io利用率100%问题
iostat -mx 1 dm-60 dm-61 dm-62 dm-63 dm-64 dm-65 dm-66 dm-67
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
dm-60 6.00 0.00 235.00 0.00 118.03 0.00 1028.63 0.40 1.69 1.69 0.00 0.74 17.45
dm-61 0.00 0.00 231.50 0.00 112.55 0.00 995.71 0.38 1.63 1.63 0.00 0.70 16.30
dm-62 0.00 0.00 1349.00 0.00 662.08 0.00 1005.14 122.07 92.08 92.08 0.00 0.59 79.10
dm-63 0.50 0.00 1143.00 0.00 560.10 0.00 1003.57 357.50 271.83 271.83 0.00 0.87 100.00
dm-64 0.00 0.00 1268.00 0.00 623.26 0.00 1006.66 151.34 115.45 115.45 0.00 0.62 79.10
dm-65 0.00 0.00 1288.00 0.00 633.29 0.00 1006.98 156.79 121.89 121.89 0.00 0.63 81.10
dm-66 0.00 0.00 230.50 0.00 112.05 0.00 995.54 0.38 1.66 1.66 0.00 0.71 16.35
dm-67 0.00 0.00 241.50 0.00 117.05 0.00 992.65 0.39 1.61 1.61 0.00 0.70 17.00
svctm 值很小,有一块盘的io利用率达到了100%。
查看iostat的manpage,
svctm
The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future
sysstat version.
发现该指标已经不具备参考性了,怎么判断我这块100%利用率的硬盘,耗时情况怎么样呢,写了个脚本如下:
#!/bin/bash blktrace -d /dev/$1 -o hh -w 20 blkparse -i hh -d $1.blktrace.bin btt -i $1.blktrace.bin -o /dev/shm/$1-caq
一个I/O请求进入block layer之后,可能会经历下面的过程:
- Remap: 可能被DM(Device Mapper)或MD(Multiple Device, Software RAID) remap到其它设备
- Split: 可能会因为I/O请求与扇区边界未对齐、或者size太大而被分拆(split)成多个物理I/O
- Merge: 可能会因为与其它I/O请求的物理位置相邻而合并(merge)成一个I/O
- 被IO Scheduler依照调度策略发送给driver
- 被driver提交给硬件,经过HBA、电缆(光纤、网线等)、交换机(SAN或网络)、最后到达存储设备,设备完成IO请求之后再把结果发回。
采样了20s,看到底哪里比较忙。取数据如下:
[root@localhost bak]# vi dm-63-caq ==================== All Devices ==================== ALL MIN AVG MAX N --------------- ------------- ------------- ------------- ----------- Q2Qdm 0.000000025 0.001386351 0.204286857 3553 Q2Cdm 0.001132298 0.104383169 0.264029949 3554 Q2G 0.000000261 0.000003114 0.001671993 3425 G2I 0.000000437 0.000053202 0.003102351 3411 Q2M 0.000000726 0.000001618 0.000004214 129 I2D 0.000000443 0.000224963 0.014763260 3425 M2D 0.000000720 0.000284257 0.008655580 115 D2C 0.001126306 0.104102819 0.254061182 3554
可以看到D2C这一行,已经达到了平均104ms的单个io消耗,而这个是可以衡量硬件指标的。
由于dm-63是一块sas的ssd设备,正常情况下的1143次/s的读,还不应该达到瓶颈,考虑到空间占用也没有达到60%以上,不应该性能这么差。硬件指标偏低,更换硬盘后解决。