块层延迟分布
以直方图统计块设备 IO 的完成延迟,回答的是「延迟长什么样」而不是「平均多少毫秒」。整体抬高与长尾拖累是两种完全不同的故障形态:前者通常来自设备能力或限流,后者往往来自偶发竞争或缓存穿透。分布图能直接把这两种情况区分开。
基本信息
| 适用平台 | Linux,需要内核 eBPF 支持与较高权限 |
|---|---|
| 输出形态 | 按延迟区间的直方图 |
| 常用参数 | 窗口与刷新间隔、按设备分别输出、刻度、是否含排队时间 |
| 观察重点 | 长尾桶的计数与形态 |
| 采集建议 | 窗口覆盖业务高峰 |
典型使用场景
- 存储性能定性:延迟是整体抬高还是少数请求非常慢。
- 对比不同设备或不同存储后端的延迟形态。
- 验证存储升级、缓存策略调整的收益。
- 区分软件排队造成的等待与设备本身的处理时间。
- 与上层服务的响应时间对照,确认延迟确实来自存储侧。
常用变体
常用变体
biolatency-bpfcc 10 1 # 10 秒窗口,每秒刷新一次
biolatency-bpfcc -D 10 1 # 按设备分别输出,定位具体盘
biolatency-bpfcc -m 10 1 # 以毫秒为刻度
biolatency-bpfcc -Q 10 1 # 含系统排队时间
biolatency-bpfcc 60 1 > /tmp/iohist.txt # 长窗口留档,事后对比直方图读法
| 形态 | 含义 | 排查方向 |
|---|---|---|
| 整体分布右移 | 延迟普遍变高 | 设备能力、限流或写放大 |
| 主体集中在低区间 | 大多数 IO 正常 | 看长尾桶规模 |
| 少量请求落在高区间 | 存在长尾 | 竞争、缓存穿透或偶发重试 |
| 出现两个明显峰值 | 两类 IO 混合 | 按设备或进程拆开分析 |
带排队时间的口径与设备实际处理时间不同:需要判断是存储设备慢还是上游排队久时,两种口径都要看,只用一个容易把排队问题归到设备上。
采样窗口太短会与业务峰值错位:存储问题常常只在特定负载下出现,窗口至少覆盖一个完整的业务周期,否则图很干净但结论没有意义。