核心观点: 磁盘性能分析的关键不在于单个指标的绝对值,而在于理解指标之间的关联,并将其与真实工作负载联系起来,从而判断系统是“健康”、“亚健康”还是“病态”。
第一部分:理论篇 — 理解核心性能指标
磁盘 I/O 栈可以看作一个“数据处理管道”,我们的指标正用于监控这个管道各环节的健康状况。
1. 吞吐量(Throughput):“管道”的流量
- rkB/s, wkB/s:表示磁盘读写数据流的“宽度”,即每秒读写多少 KB 数据。高吞吐量通常对应顺序读写。
2. IOPS(I/O Operations Per Second):“管道”的流速
- r/s, w/s:表示磁盘处理 I/O 请求的“频率”,即每秒的读写操作次数。高 IOPS 通常对应随机读写。
3. 延迟(Latency):“处理”的耗时
- r_await, w_await:这是最关键的用户体验指标。它衡量一个 I/O 请求从发出到完成的总时间(包括在队列中等待的时间和服务时间)。该指标直接决定了应用的响应速度。
4. 队列与利用率:“管道”的拥堵程度
- aqu-sz:平均队列长度。表示平均有多少个 I/O 请求在排队等待处理。如果这个值持续大于 1,说明设备已经饱和,请求开始堆积。
- %util:磁盘带宽利用率。表示设备有百分之多少的时间在处理 I/O 请求。注意: 对于 SSD/NVMe,即使%util 很低,但如果队列很深或延迟很高,也可能意味着遇到了其他瓶颈。
5. 请求大小与合并:“货物”的打包效率
- rareq-sz, wareq-sz:平均请求大小。大的请求通常意味着顺序操作,小的请求则意味着随机操作。
- %rrqm, %wrqm:请求合并率。操作系统会将多个相邻的 I/O 请求合并成一个大的请求后再下发给磁盘,这能提升效率。高的合并率通常对性能有益。
第二部分:实践篇 — 四步诊断法
我们将使用开篇的 NVMe 磁盘数据作为“健康”的范本,并推演不同的问题场景。
第一步:看负载 — 当前在做什么?
查看 r/s, w/s, rkB/s, wkB/s。
- 我们的案例:负载极轻,最高仅 76 次写操作/秒和 304kB/s 的吞吐量。这属于后台级负载。
- 问题场景对比:如果
w/s持续在 10000 以上,但wkB/s只有 40000(即wareq-sz约 4KB),则可判断这是一个高频率、小粒度的随机写负载,对磁盘压力很大。
第二步:看压力 — 磁盘“累”不累?
查看 %util 和 aqu-sz。
- 我们的案例:
%util最高 0.10%,aqu-sz始终为 0。结论:磁盘非常“清闲”,远未达到性能瓶颈。 - 问题场景对比:
- 场景 A:
%util接近 100%,aqu-sz持续很高。结论:磁盘已完全饱和,成为系统瓶颈。 - 场景 B:
%util只有 70%,但aqu-sz却大于 5,w_await很高。结论:虽然利用率未满,但 I/O 请求的分布不均匀,导致队列堆积,磁盘处于亚健康状态。
- 场景 A:
第三步:看效率 — 处理速度够快吗?
查看 r_await, w_await。这是用户体验的最终体现。
- 我们的案例:读写延迟均低于 0.5ms。对于 NVMe SSD 来说,这是非常优秀的成绩,表明硬件和驱动工作正常。
- 问题场景对比:
- 如果
w_await持续 > 10ms,即使%util不高,也意味着每个写请求都很“吃力”。可能原因:磁盘空间将满、SSD 在执行 GC(垃圾回收)、或遇到了“写放大”问题。
- 如果
第四步:看模式 — 负载类型是什么?
结合 rareq-sz/wareq-sz 和 %rrqm/%wrqm 判断负载模式。
- 我们的案例:读请求 128KB(顺序读),写请求 4-10.4KB(随机写),有少量合并。是混合型轻负载。
- 问题场景对比:
- 顺序大文件读写:
rareq-sz很大(如>128KB),%rrqm可能较高,吞吐量高但 IOPS 低。 - 随机小文件读写:
rareq-sz很小(如 4-8KB),%rrqm很低,IOPS 高但吞吐量低。这种负载对磁盘压力最大。
- 顺序大文件读写:
第三部分:决策篇 — 性能健康矩阵
根据以上分析,可以将磁盘状态归纳为以下矩阵,以指导行动:
| 低延迟 (await < 5ms) | 高延迟 (await > 10ms) | |
|---|---|---|
| 低利用率 (%util < 50%) | ✅ 健康 (Healthy) 范例磁盘状态。无需任何操作,性能优秀。 | ⚠️ 亚健康 (Sub-optimal) 磁盘本身不忙,但请求处理慢。需调查: • 驱动程序/Firmware • 文件系统碎片 • RAID 卡策略 • 虚拟机开销 |
| 高利用率 (%util > 80%) | 🚧 饱和 (Saturated) 磁盘正满负荷工作,但仍能保持低延迟。这是性能极限状态,需考虑: • 负载是否可优化? • 是否需要升级硬件? | ❌ 病态 (Pathological) 磁盘已成严重瓶颈。系统卡顿。必须: • 立即优化应用 I/O 模式 • 升级更高性能的存储设备 |
实战总结:
- 监控命令:
iostat -x 1是入门和诊断的首选。 - 核心思路:不要孤立地看任何一个数字。
高延迟 + 低利用率和高延迟 + 高利用率是完全不同性质的问题。 - 黄金标准:延迟 (
await) 是最终的用户体验指标。一切优化手段的最终目的都是降低延迟。 - 我们的案例定位:毫无疑问处于 “健康” 象限。分析的价值在于建立性能基线,当未来出现性能波动时,可以迅速与之对比,定位问题。
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)