iostat - 报告 I/O 统计信息
/usr/bin/iostat [-cCdDeEiILmMnpPrstxXYz] [-l n] [-T u | d] [disk]... [interval [count]]
iostat 实用程序重复报告终端、磁盘和磁带 I/O 活动,以及 CPU 使用情况。输出的第一行针对自引导后的所有时间;随后每一行仅针对前一个时间间隔。
为计算此信息,内核要维护大量计数器。对于每个磁盘,内核都会对读取、写入、位读取和位写入情况进行计数。内核还会取得队列入口点和退出点处的 hi-res 时间戳,使它可以为每个队列跟踪驻留时间以及累积驻留长度。使用这些值,iostat 会得出关于总处理能力、使用情况、队列长度、事务处理速度和服务时间的非常准确的测量值。对于全体终端,内核只对输入和输出字符数进行计数。
内核状态命令执行期间,系统的 state 可以更改。如果相关,状态更改消息会包括在 iostat 输出中,格式为下列之一:
<<device added: sd0>> <<device removed: sd0>> <<partition added: sd0,a>> <<partition removed: sd0,a>> <<NFS mounted: nfs1>> <<NFS unmounted: nfs1>> <<multi-path added: ssd4>> <<multi-path removed: ssd4>> <<controller added: c1>> <<controller removed: c1>> <<processors added: 1, 3>> <<processors removed: 1, 3>>
请注意,根据情况,这些状态更改消息中打印的 names 受 –n 和 –m 选项影响。
有关更多常规系统统计信息,请使用 sar(1)、sar(8) 或 vmstat(8)。
iostat 实用程序的输出包括以下信息。
磁盘名称
每秒读取次数
每秒写入次数
每秒读取的千字节数
间隔期间的平均 I/O 大小可以由 kr/s 除以 r/s 计算得出。
每秒写入的千字节数
间隔期间的平均 I/O 大小可以由 kw/s 除以 w/s 计算得出。
等待服务的平均事务数(队列长度)
这是保留在设备驱动器队列中等待设备接受的 I/O 操作的数量。
正在处理的平均事务数(已从队列删除但尚未完成)
这是被设备接受但仍未处理的 I/O 操作的数量。
事务的平均响应时间(以毫秒为单位)
svc_t 输出报告设备的整体响应时间,而不是服务时间。整体时间包括事务在队列中的时间和事务被处理的时间。在队列中花费的时间以 wsvc_t 输出列中的 –x 选项显示。处理事务所花费的时间是真正的服务时间。服务时间也以 –x 选项显示,出现在同一报告的 asvc_t 输出列中。
存在等待服务的事务的时间百分比(队列非空)
对于 NFS,这是至少有一个等待启动的异步请求的时间百分比
磁盘忙碌的时间百分比(事务在进行中)
对于 NFS,这是至少有一个暂挂 NFS RPC(即系统正在等待服务器给出回复)的时间百分比
等待队列中的平均服务时间(以毫秒为单位)
活动事务的平均服务时间(以毫秒为单位)
虚拟机管理程序所用 CPU 时间的百分比。在物理硬件上运行时,始终为零。
支持以下选项:
报告系统在用户模式、系统模式下花费的时间、虚拟机管理程序所用时间(请参见以下 st 的定义)和空闲的时间百分比。有关更多信息,请参见“附注”部分。
同时也选择了 –x 选项时,报告通过 controller id 聚合的扩展磁盘统计信息。
对于每个磁盘,报告每秒传输的千字节数、每秒的传输数量以及平均服务时间(以毫秒为单位)。
对于每个磁盘,报告每秒读取次数、每秒写入次数以及磁盘使用百分比。
显示设备错误汇总统计信息。显示全部错误、硬错误、软错误以及传输错误。
显示全部设备错误统计信息。
在 –E 输出中,显示设备 ID,而非序列号。Device Id 是驱动程序通过 ddi_devid_register(9F) 注册的唯一标识符。
报告每个时间间隔内的计数,而非速度(如适用)。
将报告中包括的磁盘数量限制为 n;–d 和 –D 的磁盘限制缺省为 4,对 –x 无限制。请注意,显式请求的磁盘(请参见下文的 disk)不受此磁盘限制的约束。
报告 IO 延迟分配统计信息。此选项可与 –x 选项结合使用来观察磁盘 IO 延迟统计信息。对于启用了 MPxIO 的系统,此选项也可与 –Y 选项结合使用来观察每个路径的延迟统计信息。请注意,标签 '1us' 表示 '1024ns',而 '1ms' 表示 '1024*1024ns'。此选项不能与 –t 或 –c 选项结合使用,如果与 –E 选项结合使用,此选项会被忽略。
报告文件系统挂载点。如果还指定了 –P 或 –p 选项或者其与 –Xn 或 –en 一起使用时,该选项最有用。仅当输出中实际列出挂载点时,–m 选项才有用。该选项仅可与 –n 选项共同使用。
以 MB/秒(而非 KB/秒)显示数据吞吐量。
以描述性格式显示名称。例如,cXtYdZ、rmt/N、server:/export/path。
缺省情况下,通过诸如 ssd23 或 md301 等的实例名来标识磁盘。结合 –n 选项和 –x 选项,会以 cXtYdZsN 格式显示磁盘名称,从而更容易与其物理硬件特性关联。cXtYdZsN 格式在 Fibre Channel (FC) 环境中特别有用,其中 FC 全局名称显示在 t 字段中。
对于每个磁盘,既按设备也按分区报告统计信息。
对每个磁盘,仅按分区报告统计信息,没有按磁盘统计信息。
以逗号分隔格式显示数据。
取消与 state changes 有关的消息。
报告每秒向终端读取和写入的字符数。
显示时间戳。
指定 u 表示时间的内部表示形式的印刷表示形式。请参见 time(2)。指定 d 表示标准日期格式。请参见 date(1)。
对于 scsi_vhci(4D) 控制下的磁盘,除磁盘 lun 统计信息外,还会报告 lun.controller 的统计信息。
报告扩展磁盘统计信息。缺省情况下,通过诸如 ssd23 或 md301 等的实例名来标识磁盘。结合 x 选项和 –n 选项,会以 cXtYdZsN 格式显示磁盘名称,从而更容易与其物理硬件特性关联。使用 cXtYdZsN 格式在 FibreChannel 环境中特别有帮助,其中 FC 全局名称显示在 t 字段中。
如果不请求输出显示(无 –x、–e 或 –E),则暗含 –x。
对于 scsi_vhci(4D) 控制下的磁盘,除磁盘 lun 统计信息外,还会报告 lun .targetport 和 lun.targetport.controller 的统计信息。
在 –n(描述性)模式下,使用路径的 target-port 属性显示 targetport。没有 –n,会使用较短 port-id 显示 targetport。所有具有相同 target-port 属性值的目标端口共享相同 port-id。target-port 到 port-id 关联在重新引导后不会保留。
如果不请求输出显示(无 –x、–e 或 –E),则暗含 –x。
不会打印底层数据值都是零的行。
选项设置 –xcnCXTdz interval 对于确定是否存在磁盘 I/O 问题以及识别问题特别有用。
支持下列操作数:
仅显示 count 个报告。
明确指定要报告的磁盘;除了任何明确磁盘外,还将报告达到磁盘限制(请参见上面的 –l 选项)的任何活动磁盘。
每 interval 秒报告一次。
以下命令显示通过 controller id 为用户 (us) 和系统 (sy) 操作聚合的扩展设备统计信息的两个报告。因为 –n 选项与 –x 选项一起使用,以控制器名称标识设备。
example% iostat –xcnCXTdz 5 Thursday, May 23, 2013 09:17:03 AM PDT cpu us sy st id 14 31 0 20 extended device statistics r/s w/s kr/s kw wait actv wsvc_t asvc_t %w %b device 3.8 29.9 145.8 44.0 0.0 0.2 0.1 6.4 0 5 c0 666.3 814.8 12577.6 17591.1 91.3 82.3 61.6 55.6 0 2 c12 180.0 234.6 4401.1 5712.6 0.0 147.7 0.0 356.3 0 98 d10 Thursday, May 23, 2013 09:17:03 AM PDT cpu us sy st id 11 31 0 22 extended device statistics r/s w/s kr/s kw wait actv wsvc_t asvc_t %w %b device 0.8 41.0 5.2 20.5 0.0 0.2 0.2 4.4 0 6 c0 565.3 581.7 8573.2 10458.9 0.0 26.6 0.0 23.2 0 3 c12 106.5 81.3 3393.2 1948.6 0.0 5.7 0.0 30.1 0 99 d10示例 2 使用 iostat 生成 TTY 统计信息
以下命令显示关于不同操作模式下五个磁盘的活动的两个报告。因为使用了 –x 选项,以实例名称标识磁盘。
example% iostat -xt 5 2 extended device statistics tty device r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b tin tout blkdev0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 1 sd0 0.1 19.3 1.4 92.4 0.0 0.0 0.2 1.6 0 1 sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0 0 nfs10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 7.6 0 0 nfs11 0.0 0.0 0.0 0.0 0.0 0.0 0.0 15.6 0 0 nfs12 0.3 0.0 1.9 0.0 0.0 0.0 0.0 30.5 0 1 extended device statistics tty device r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b tin tout blkdev0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0 132 sd0 0.0 30.8 0.0 345.6 0.0 0.1 0.0 2.1 0 1 sd1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs10 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs11 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 nfs12 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0示例 3 使用 iostat 生成分区和设备统计信息
以下命令生成每个磁盘的分区和设备统计信息。因为 –n 选项与 –x 选项一起使用,以控制器名称标识磁盘。
example% iostat -xnp extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.4 0.3 10.4 7.9 0.0 0.0 0.0 36.9 0 1 c0t0d0 0.3 0.3 9.0 7.3 0.0 0.0 0.0 37.2 0 1 c0t0d0s0 0.0 0.0 0.1 0.5 0.0 0.0 0.0 34.0 0 0 c0t0d0s1 0.0 0.0 0.0 0.1 0.0 0.0 0.6 35.0 0 0 fuji:/export/home/user3示例 4 显示从实例名称向描述性名称的转换
以下示例说明了使用 iostat 将特定实例名称转换成描述性名称。
example% iostat -xn sd1 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c8t1d0示例 5 显示特定磁盘的目标端口和控制器活动
以下示例中共有四个控制器,全都连接到同一个目标端口。
# iostat -Y ssd6 extended device statistics device r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b ssd6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 12.7 0 0 ssd6.t2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 ssd6.t2.fp4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 ssd6.t4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 ssd6.t4.fp1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0示例 6 使用 iostat 生成磁盘 IO 延迟分配
以下命令生成指定磁盘的路径延迟分配统计信息。
example% iostat -Lx sd1 extended device statistics device r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b sd1 14.4 16.5 426.7 758.2 0.0 0.4 0.1 13.6 0 11 latency range count density distribution <32us 0 0.00% 0.00% 32-64us 696 0.87% 0.87% 64-128us 1622 2.03% 2.90% 128-256us 5609 7.01% 9.90% 256-512us 2655 3.32% 13.22% 512-1024us 4745 5.93% 19.15% 1-2ms 4463 5.58% 24.73% 2-4ms 7159 8.94% 33.67% 4-8ms 16899 21.11% 54.78% 8-16ms 14824 18.52% 73.30% 16-32ms 12630 15.78% 89.08% 32-64ms 6491 8.11% 97.19% 64-128ms 1908 2.38% 99.58% 128-256ms 301 0.38% 99.95% 256-512ms 38 0.05% 100.00% >1024ms 0 0.00% 100.00% total 80040
有关下列属性的说明,请参见 attributes(7):
|
调用正在发展中。用户可读的输出不稳定。
date(1)、sar(1)、time(2)、scsi_vhci(4D)、attributes(7)、mpstat(8)、sar(8)、vmstat(8)
因为生成百分比数字中的舍入误差,CPU 使用总量可能与 100 略有差别。
I/0 (r/s+w/s) 速度低于 0.5/秒时,svc_t 响应时间不是非常显著。此类情况下,无害峰值相当正常。
mpstat 实用程序报告相同的 st、usr 和 sys 统计信息。有关更多信息,请参见 mpstat(8) 手册页。
在 zone 中执行时,如果池工具处于活动状态,iostat 仅提供该 zone 绑定到的池的处理器集合中那些处理器的信息。
对于 NFS,%w 指示预读或后写等异步活动。这些请求通常与应用程序 I/O 并行处理。值较大不一定表示有性能问题。