iostat – I/O 向导
要理解运行系统上的 I/O 行为,首先应该使用命令 iostat。iostat 可以快速回答以下问题:
* 每秒中有多少输入/输出操作 (IOPS) 和吞吐量(MB/秒)?
* I/O 子系统的工作负载如何(时延问题和利用率)?
在最简单的形式下,iostat -x <interval>(即 iostat -x 2)将检查所有 I/O 通道并报告统计数据。查看 iostat -xc 2:
可以从屏幕截图中看出,iostat -x <interval> 命令将报告每 <interval> 秒中的设备统计数据。每个设备使用一个单独的行进行报告,包括以下信息:
*device:设备名称
*r/s:每秒钟的设备读取操作,即读 IOPS。
*w/s:每秒钟的设备写入操作,即写 IOPS。
*kr/s:每秒中读取的千字节。
*kw/s:每秒中写入的千字节。
*wait:事务等待服务的平均数量(队列长度)
*actv:将服务的活动事务的平均数量(从队列中删除但未完成)。这是设备接受的 I/O 操作数,但尚未提供服务。
*svc_t:事务平均响应时间(以毫秒为单位)。svc_t 输出报告整个相应时间,而不是设备的服务时间。整个时间包括事务在队列中的时间和服务事务的时间。
*%w:有事务在等待服务的时间占总时间的百分比(队列非空)。
*%b:磁盘忙碌的时间占总时间的百分比(事务正在处理)。
将 -M 选项添加到 iostat 可以报告输出 MB 而不是 KB。
iostat 使用场景 – 顺序 I/O
我们开始研究系统执行顺序 I/O 时 iostat 的输出。要做到这一点,作为超级用户登录并在终端窗口中输入以下命令:
*dd if=/dev/rdsk/c1d0s0 of=/dev/null bs=128k &
然后启动 iostat 命令(iostat -xM 10),观察输出。一分钟后,停止 iostat 和 dd 进程。
正如屏幕截图中看到的那样,测试系统的磁盘可以维持的读吞吐量稍大于 25 MB/秒,平均服务时间低于 5 毫秒。
iostat 使用场景 – 随机 I/O
我们开始研究系统执行随机 I/O 时 iostat 的输出。要做到这一点,启动命令:
*find / >/dev/null 2>&1 &
然后启动 iostat 命令(iostat -xM 10),观察输出。一分钟后,停止 iostat 和 find 进程。
iostat – 随机 I/O
可以从上面的屏幕截图中看到,测试系统中同一个磁盘对于随机 I/O 仅交付 1 MB/秒以下的性能。
恰当调整 I/O 子系统的大小很有意义。必须考虑以下因素:
*每秒中的 I/O 操作数量 (IOPS)
*吞吐量,单位为每秒钟的 MB 数量 (MB/s)
*服务时间(以毫秒为单位)
*I/O 模式(顺序或随机)
*缓存可用性