首页/系统/Linux 内核与性能调优速查/biolatency 块层延迟分布

biolatency 块层延迟分布

按直方图统计块设备 IO 完成延迟, 判断存储侧延迟形态: 长尾还是整体抬高。

块层延迟分布

以直方图统计块设备 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 混合按设备或进程拆开分析
带排队时间的口径与设备实际处理时间不同:需要判断是存储设备慢还是上游排队久时,两种口径都要看,只用一个容易把排队问题归到设备上。
采样窗口太短会与业务峰值错位:存储问题常常只在特定负载下出现,窗口至少覆盖一个完整的业务周期,否则图很干净但结论没有意义。

易错点

  • 只看平均值不看分布,长尾被均值掩盖,误判存储没有问题。
  • 采样窗口过短,与业务峰值错位,采到的是空闲期的数据。
  • 混淆含排队时间与不含排队时间的两种口径,把上游排队当成设备慢。
  • 不按设备拆开看,多块盘的问题被汇总平均,看不出是哪一块有问题。
  • 拿到分布就直接归因于硬件,未排除上层访问模式与写放大。

数据来源与参考

  • BCC 工具集文档 biolatency
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌