/proc/diskstats
Linux的/proc存储了很多系统级统计信息,与IO相关的信息都存储在diskstat中,输出如下
$cat /proc/diskstats sda 120880 392 8323045 78832 53591 51267 2315680 115900 0 76384 194700
一共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个被读取的扇区