iostat 输出字段说明
iostat是在查看、分析磁盘I/O时,一个很重要的工具。我们来简单说说iostat的输出都表示什么。
先看一段iostat的输出:
[root@k8s-slave9 ~]
# iostat -xdm 3 /dev/sde
Linux 4.11.3-1.el7.elrepo.x86_64 (k8s-slave9.sm.bj.hualala.com) 05
/11/2018
_x86_64_ (40 CPU)
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.04 0.00 0.05 2720.69 0.01 160.63 1.23 182.37 90.72 0.36
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.03 0.00 0.00 0.00 0.00 2.73
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.33 0.00 0.01 40.00 0.04 207.00 0.00 207.00 125.00 4.17
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm
/s
wrqm
/s
r
/s
w
/s
rMB
/s
wMB
/s
avgrq-sz avgqu-sz await r_await w_await svctm %util
sde 0.00 0.00 0.00 0.33 0.00 0.00 16.00 0.05 144.00 0.00 144.00 144.00 4.80
|
rrqm/s: 每秒合并读操作的次数
wrqm/s: 每秒合并写操作的次数
r/s: 每秒读操作的次数 (IOPS)
w/s: 每秒写操作的次数 (IOPS)
rMB/s: 每秒读带宽
wMB/s: 每秒写带宽
avgrq-sz: I/O请求的平均大小(扇区数)
avgqu-sz: I/O请求队列的平均长度
await: 每个I/O平均耗时,单位是ms,这个时间包括I/O在队列中等待耗时,以及最终被磁盘设备处理的时间
r_await: 每个读操作的平均耗时
w_await: 每个写操作的平均耗时
svctm: 这个指标其实已经废弃了,没意义,不管这个指标
%util: 该磁盘设备的繁忙度,该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有。
%util与硬盘设备饱和度
%util表示该设备有I/O(即非空闲)的时间比率,不考虑I/O有多少,只考虑有没有。由于现代硬盘设备都有并行处理多个I/O请求的能力,所以%util即使达到100%也不意味着设备饱和了。
举个简化的例子:某硬盘处理单个I/O需要0.1秒,有能力同时处理10个I/O请求,那么当10个I/O请求依次顺序提交的时候,需要1秒才能全部完成,在1秒的采样周期里%util达到100%;
而如果10个I/O请求一次性提交的话,0.1秒就全部完成,在1秒的采样周期里%util只有10%。可见,即使%util高达100%,硬盘也仍然有可能还有余力处理更多的I/O请求,即没有达到饱和状态。
await多大才算有问题
await是单个I/O所消耗的时间,包括硬盘设备处理I/O的时间和I/O请求在kernel队列中等待的时间,正常情况下队列等待时间可以忽略不计,姑且把await当作衡量硬盘速度的指标吧,那么多大算是正常呢?
对于SSD,从0.0x毫秒到1.x毫秒不等,具体看产品手册;
对于机械硬盘,一般来说一万转的机械硬盘是8.38毫秒,包括寻道时间、旋转延迟、传输时间。
在实践中,要根据应用场景来判断await是否正常,如果I/O模式很随机、I/O负载比较高,会导致磁头乱跑,寻道时间长,那么相应地await要估算得大一些;
如果I/O模式是顺序读写,只有单一进程产生I/O负载,那么寻道时间和旋转延迟都可以忽略不计,主要考虑传输时间,相应地await就应该很小,甚至不到1毫秒。
对磁盘阵列来说,因为有硬件缓存,写操作不等落盘就算完成,所以写操作的service time大大加快了,如果磁盘阵列的写操作不在一两个毫秒以内就算慢的了;
读操作则未必,不在缓存中的数据仍然需要读取物理硬盘,单个小数据块的读取速度跟单盘差不多。
更多推荐
所有评论(0)