关于磁盘IO
- iostat作为systat这个系统自带的使用工具包中的命令,但iostat -x显示的内容中潜伏着一些警告
- util值和scvtm值一般用于判断磁盘的利用率和饱和度的重要指标
基础知识
- svctm表示向设备发起I/O请求的平均响应时间(被广泛认为是一个操作锁华为的平均时间)
- util表示向设别发送I/O请求的CPU时间百分比(被广泛认为超过80%就是严重的IO性能瓶颈)
svctm和util的值在带有固态驱动器或者RAID上被放大了,这两个字段的值并不能反应出它们的性能限制 iostat手册中将svctm描述警告为平均服务时间(svctm字段)值没有意义,因为I/O统计现在是在块级别计算的,我们不知道磁盘驱动程序何时开始处理请求。
假设A做10件事情需要20分钟,那么平均做每件事情需要2分钟。假设B可以同时做10件事情,做每件事情也同样需要两分钟,这样看来B拥有更高的并行度。但是在单次请求结果方面,A和B处理一次事情的时间都是2分钟 所以在拥有固态或者RAID的服务器中,svctm和uil并不能反应出性能限制
实例:
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 0.00 0.00 13823.00 0.00 55292.00 0.00 8.00 -1.78 0.06 0.06 0.00 0.06 78.40
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 0.00 0.00 72914.67 0.00 291658.67 0.00 8.00 15.27 0.21 0.21 0.00 0.01 100.00
那么%util发生了什么?第一个iostat结果告诉我们,驱动器的利用率为 78.4%,每秒读取13823 次。第二行告诉我们,驱动器在每秒 72914 次读取时被100%使用。如果要14000才能填到78.4%,难道我们不期望它总共只能做18000吗?7.3万怎么做到的?
这里的问题是出在并行性。当iostat 说%util时,它的意思是“向设备发出 I/O 请求的 CPU 时间百分比”。驱动器至少做一件事的时间百分比。如果它同时做 16 件事,那不会改变。再一次,这个计算对于驱动器来说效果很好,它一次只做一件事。他们花在做一件事上的时间很好地表明了他们真正的忙碌程度。另一方面,SSD(以及 RAID 和 Alice)可以同时做多项事情。如果你可以同时做多件事,你至少做一件事的时间百分比不能很好地预测您的表现潜力