追踪点浏览与使用
追踪点是内核在关键路径上预先埋好的观测位置,参数是结构化的,相比直接挂内核函数探针更稳定,是观测时首选的位置类型。使用流程基本固定:先列出某个子系统下的追踪点,再查看目标追踪点的字段名与类型,最后把字段写进表达式。
基本信息
| 适用平台 | 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,字段名与类型一目了然,比反复试错快得多。
跨内核版本直接复用他人的表达式容易失败:字段可能改名或增减,遇到报错应先用字段列举核对,而不是怀疑权限问题。