首页/系统/Linux 内核与性能调优速查/biosnoop 逐 IO 明细追踪

biosnoop 逐 IO 明细追踪

逐条显示块 IO 的进程、读写、扇区与延迟, 用于点名慢 IO 的来源进程。

逐条 IO 明细

逐条打印块层 IO 的细节:发起进程、读写方向、扇区与完成延迟,用来把慢 IO 点名到具体进程和具体位置。它给出的是个体样本而不是统计分布,所以通常先用分布工具看整体形态、锁定时间窗口,再用它做定点观察。

基本信息

适用平台Linux,需要内核 eBPF 支持与较高权限
输出内容时间、进程、读写方向、扇区与延迟
常用参数是否包含排队时间
输出量与 IO 频率成正比,高负载下非常大
使用建议先分布后明细,缩短观察窗口

典型使用场景

  • 把慢 IO 归因到具体服务或进程。
  • 结合扇区偏移判断是否存在热点区段。
  • 验证缓存、限流与预读策略调整的效果。
  • 排查单次异常慢 IO,确认是设备抖动还是上层重试。
  • 多个进程争抢存储时,对照各自的实际 IO 情况。

用法

用法
biosnoop-bpfcc | head -40            # 先看前若干条,判断量级
biosnoop-bpfcc -Q | head             # 包含系统排队时间
biosnoop-bpfcc -d sda | head -20     # 只看指定设备
lsblk -d -o NAME,ROTA,SCHED          # 确认设备名、是否机械盘与调度器
timeout 20 biosnoop-bpfcc > /tmp/io.log   # 限时采集并留档到文件
awk '{print $NF, $0}' /tmp/io.log | sort -g | tail -20   # 按延迟列排序,找最慢的几条

字段判读

字段含义判读要点
时间IO 完成时刻与业务慢的时刻对齐
进程与进程号发起 IO 的对象归因到具体服务
读写类型方向区分读放大与写放大
扇区与长度设备上的位置与大小结合偏移找热点区段
延迟单次 IO 的耗时结合队列深度判断
同进程多条聚集同一进程连续发起 IO常见于顺序扫描或批量写入
先看分布再看明细的效率远高于直接盯明细:高 IOPS 环境里逐条输出会持续刷屏,先确定时间窗口和可疑设备能省下大量时间。
长时间全量采集会同时拖慢排查与占用磁盘,日志文件也可能迅速变大;限制采集时长并在采集后立即停止工具。

易错点

  • 长时间全量输出拖慢排查,关键数据被海量正常记录淹没。
  • 只看单条延迟不看队列深度,把排队造成的等待当成设备慢。
  • 忽略读写方向,读放大与写放大的优化方向完全不同。
  • 采集文件不清理,占满临时目录影响后续操作。
  • 把单次异常慢 IO 直接当成系统性故障,缺少分布层面的佐证。

数据来源与参考

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