iostat

iostat是一个基于/proc/diskstats文件计算的IO统计工具,它在周期性的去读取/proc/diskstats的IO统计信息并通过一定的公式计算出来。输出如下:

tps:transfer per second,每秒传输的IO数量
kB_read/s:每秒读取的KB数量
kB_wrtn/s:每秒写的KB数量
kB_read:累计读取的KB数
kB_wrtn:累计写的KB数量

rrqm/s:每秒合并读IO的次数
wrqm/s:每秒合并写IO的次数
r/s:每秒读IO完成的次数
w/s:每秒写IO完成的次数
rkB/s:每秒读IO的KB数量
wkB/s:每秒写IO的KB数量
avgrq-sz:平均IO扇区数
avgqu-sz:平均未完成的IO数量,包括在队列中的和硬件正在处理的。
await:平均每个IO耗时,包括在队列中和硬件操作的时间。
r_wait:平均每个读IO耗时**w_wait**:平均每个写IO耗时
svctm:Warning! Do not trust this field any more. This field will be removed in a future sysstat version
%util:磁盘利用率,只要有IO操作就算,由于硬件的并发处理IO能力,即使%util达到100%也不意味着已达存储介质的性能极限,只能说明在这个统计周期内,该介质一直都有IO操作。

/proc

/proc/diskstats

Linux的/proc存储了很多系统级统计信息,与IO相关的信息都存储在diskstat中,输出如下

一共11个字段,在内核文档””中有详细的解释,除了Field9之外,其他字段都是从开始计数的累计值。以sda为例,前两个分别是设备的major和minor,接下来分别是:

Field 1 – rd_io,表示120880个读IO被完成
Field 4 – rd_ticks,读操作一共耗时78832ms,从__make_request开始,到end_that_make_request()为止,包括在队列中等待的时间。
Field 5 – wr_io,表示53591个写IO被完成
Field 6 – wr_merges,表示发生了51267次写IO合并
Field 7 – wr_sectors,表示2315680个被写的扇区
Field 8 – wr_ticks,写操作一共耗时115900ms,
Field 9 – in_flight,IO队列中遗留了0个IO尚未处理,当有一个IO进入IO队列时,该值+1,每完成一个IO,该值-1
Filed 10 – io_ticks,表示处理IO花费了76384ms的自然时间,即只要in_flight不为0,io_ticks就在计数。io_ticks不是rd_ticks和wr_ticks的和,因为rd_ticks和wr_ticks是针对IO而言的,由于设备往往有并行处理IO的能力,所以io_ticks往往小于rd_ticks+wr_ticks。
Field 11 – time_in_queue,系统一共花费了194700ms用于IO操作
Field 2 – rd_merges,表示发生了392次读IO合并
Field 3 – rd_sectors,表示8323045个被读取的扇区