首页/系统/Linux 内核与性能调优速查/bpftrace 追踪点浏览与使用

bpftrace 追踪点浏览与使用

先列后查字段再写程序: tracepoint 稳定且带结构化参数, 是首选的观测点类型。

追踪点浏览与使用

追踪点是内核在关键路径上预先埋好的观测位置,参数是结构化的,相比直接挂内核函数探针更稳定,是观测时首选的位置类型。使用流程基本固定:先列出某个子系统下的追踪点,再查看目标追踪点的字段名与类型,最后把字段写进表达式。

基本信息

适用平台Linux,需要内核 eBPF 支持与相应权限
列出方式按子系统通配列出可用追踪点
字段查看展示字段名与类型,写表达式前必做
稳定性相比内核函数探针更稳定,跨版本兼容性更好
差异提示不同内核版本字段可能增减

典型使用场景

  • 观测调度行为:进程切换、唤醒与迁移。
  • 观测块层请求的提交与完成,配合延迟统计。
  • 观测网络收发路径上的关键节点。
  • 在没有合适内核函数探针时寻找结构化观测点。
  • 与采集工具的事件清单相互对照,确认名称一致。

浏览与使用

浏览与使用
bpftrace -l 'tracepoint:sched:*'                    # 列出调度子系统追踪点
bpftrace -l 'tracepoint:block:*'                    # 列出块层追踪点
bpftrace -l 'tracepoint:net:*'                      # 列出网络相关追踪点
bpftrace -lv 'tracepoint:sched:sched_switch'        # 查看该追踪点的字段名与类型
bpftrace -e 'tracepoint:sched:sched_switch { @[args->prev_comm] = count(); }'   # 按切换前的进程名统计
bpftrace -e 'tracepoint:block:block_rq_complete { @[comm] = count(); }'         # 块请求完成按进程计数

常见子系统

子系统观测内容典型用途
调度切换、唤醒、迁移确认上下文切换来源
块层请求提交与完成IO 延迟与队列分析
系统调用调用进入与退出统计调用频率与参数
网络收发与丢弃定位链路层行为
-l 是列出,-lv 是带字段列出;写表达式前先跑一次 -lv,字段名与类型一目了然,比反复试错快得多。
跨内核版本直接复用他人的表达式容易失败:字段可能改名或增减,遇到报错应先用字段列举核对,而不是怀疑权限问题。

易错点

  • 不同内核的字段差异被忽略,直接复用他人脚本导致报错或采不到数据。
  • 在高频追踪点上不加过滤,输出量失控并影响被测系统。
  • 把字段名写错却以为是权限问题,反复在错误方向上调整。
  • 只用追踪点不核对语义:有些追踪点在失败路径上也会触发,统计口径与预期不同。
  • 采集窗口不覆盖现象时段,采到的是平稳期的数据。

数据来源与参考

  • bpftrace 官方文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌