从/proc/diskstats看如何理解LINUX iostat指标

从/proc/diskstats看如何理解LINUX iostat指标

在linux的man中居然要我们不要相信这个指标,并且说在未来的sysstat工具里,将会去除掉这个指标。原来我们一直引以为豪的一种高级分析技能完全是错误的。那么如果以后我们要分析IO问题是由于什么原因引起的,怎么去分析呢?我们如何理解iostat的信息呢?如果我们执行iostat -x,可以看到如下的数据:

从/proc/diskstats看如何理解LINUX iostat指标

首先我们来看看这些指标的含义:

序号
例子
列名
说明
1
nvme0n1
Device
设备名
2
0.00
rrqm/s
每秒读io merge后放入队列的数量
3 102.00
wrqm/s
每秒写io merge后放入队列的数量
4
100.00
r/s
每秒读IO数量
5
1006.00
w/s 每秒写IO的数量
6
406.00
rkb/s
每秒读吞吐(KB)
7
44460
wkb/s
每秒写吞吐(KB)
8
81.33
avgrq-sz
设备上平均IO请求(扇区数)的数量
9
0.14
avgqu-sz
设备上的平均IO请求队列的数量
10
0.13
await
设备上平均IO的响应时间,和小型机上的await不同的是,这个时间包含了OS上排队的时间和设备上的响应时间
11
0.15
r_await
设备上平均读IO的响应时间
12
0.13 w_await
设备上平均写IO的响应时间
13
0.07
svctm
设备上的响应时间,不要相信这个指标,LINUX的计算算法存在问题    
14
7.50
util%
设备繁忙程度

实际上,iostat的数据是从/proc/diskstats计算获得的。这个文件也可以成为我们用于分析IO延时的一个十分重要的工具,对于我们分析IO延时产生的位置还是有一定的帮助的。

通过理解diskstats的数据,我们可以更好的理解iostat的输出。这14个字段中除了前三个是设备名称和设备号外,其他11个指标大多数是累计值,也有当前值(in_flight)。因此iostat的指标来源实际上是对累计值做一个对减,然后除以时间间隔。下表列出了diskstats的十四个列的情况

Quoted 解释
1 major  number 此块设备的主设备号
2 minor  mumber 此块设备的次设备号
3 device  name 此块设备名字
4 reads  completed successfully 成功完成的读请求次数
5 reads  merged 读请求merge的次数,出现IO  MERGE就会计数。这是计算rrqm/s的基础
6 sectors  read 读请求读取的扇区数总和
7 time  spent reading (ms) 读请求花费的时间总和,这个值统计了所有的IO访问的延时,由于并行访问的存在,这个统计值可能超过时间的长度。这个值是计算r_await的基础,这个时间包含了OS中调度IO的时间、排队时间和IO花费在设备上的时间的总和,字段11类似
8 writes  completed 成功完成的写请求次数
9 writes  merged 写请求合并的次数
10 sectors  written 写请求的扇区数总和
11 time  spent writing (ms) 写请求花费的时间总和,这个值统计了所有的IO访问的延时,由于并行访问的存在,这个统计值可能超过时间的长度。这个值是计算w_await的基础
12 I/Os  currently in progress 次块设备队列中的IO请求数
13 time  spent doing I/Os (ms) 块设备队列非空时间总和,这个字段是一个统计值,并不能完全反映出设备IO的总时长
14 weighted  time spent doing I/Os (ms) 块设备队列非空时间加权总和,这个指标是计算util%的基础,要注意是weighted  time,这只是一个权重,并不能反映出真实的磁盘负载。在一个采样片中,有一个IO和有10个IO,采集到的权重值都是相同的。所以util%只能反映出磁盘的繁忙程度,并不能反映出磁盘的负载

从/proc/diskstats看如何理解LINUX iostat指标》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/421.html