从/proc/diskstats看如何理解LINUX iostat指标
•
文章
在linux的man中居然要我们不要相信这个指标,并且说在未来的sysstat工具里,将会去除掉这个指标。原来我们一直引以为豪的一种高级分析技能完全是错误的。那么如果以后我们要分析IO问题是由于什么原因引起的,怎么去分析呢?我们如何理解iostat的信息呢?如果我们执行iostat -x,可以看到如下的数据:
首先我们来看看这些指标的含义:
序号 |
例子 |
列名 |
说明 |
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