不能直接看 svctm,因自 linux 内核 2.6.25 起该字段已被废弃且恒为 0;应改用 await(含等待与服务时间)和 %util(设备忙时比)综合评估磁盘响应性能。

要查看单个物理磁盘的平均服务时间(Average Service Time),必须使用 iostat -x 选项,并聚焦于 svctm 字段——但需注意:从 Linux 内核 2.6.25 起,svctm 已被废弃且恒为 0,不再反映真实服务时间。现代系统中应改用 await(平均 I/O 请求等待 + 服务时间)和 util(设备忙时百分比)综合判断响应性能。
为什么不能直接看 svctm
svctm 字段在较新内核中已移除逻辑计算,iostat 仅填充 0 或占位值,失去参考意义。官方文档及 sysstat 源码明确说明该字段“deprecated”(已弃用)。依赖它会得出错误结论。
替代方案:用 await 和 util 评估实际响应延迟
平均服务时间的实际替代指标是 await(单位:毫秒),它包含队列等待时间与真正服务时间之和。结合 %util 可进一步判断是否达到设备极限:
- await 值偏高(如 >10 ms 机械盘 / >1 ms NVMe)且 %util 接近 100% → 表明磁盘响应慢,可能因队列堆积或硬件瓶颈
- await 正常但 %util 长期 >90% → 设备持续饱和,I/O 请求排队,等效于服务时间拉长
- await 高但 %util 很低(如 → 问题不在磁盘本身,可能是上层(如文件系统、RAID、驱动)或突发小 I/O 导致延迟抖动
实操命令:精准查看指定物理磁盘的扩展指标
假设目标磁盘为 /dev/sdb,运行以下命令获取每秒刷新、共 3 次的扩展统计:
iostat -x -d -m /dev/sdb 1 3
输出中重点关注列:
- r_await / w_await:读/写请求平均等待(含服务)时间(ms)
- await:整体平均 I/O 延迟(ms)
- %util:设备忙时百分比(接近 100% 即已达吞吐上限)
- avgqu-sz:平均队列长度(>1 表示有排队,叠加 await 可估算服务耗时占比)
补充验证建议
若需更底层的服务时间估算,可交叉参考:
- blktrace + btt:对特定设备做块层跟踪,精确分离 queue、issue、complete 各阶段耗时
- smartctl -a /dev/sdb:检查磁盘 SMART 属性中的 Load_Cycle_Count、Temperature、Reallocated_Sector 等,排除硬件老化影响
- iotop -o:确认是否有单个进程引发大量随机小 I/O,导致延迟升高











