事件清单检索
事件清单命令列出本机所有可统计的事件:硬件计数器事件、内核软件事件、各级缓存事件、内核追踪点,以及处理器自带的监视单元事件。它是写采集参数之前的核对步骤,也是排查「同一份采集脚本在另一台机器上什么也采不到」的第一站。
基本信息
| 适用平台 | Linux(内核自带性能工具) |
|---|---|
| 事件类别 | 硬件、软件、缓存、内核追踪点、性能监视单元 |
| 检索方式 | 支持关键字与子系统前缀过滤 |
| 输出形式 | 人可读清单,也可输出机器可读格式 |
| 命名规律 | 追踪点名称带子系统前缀,如调度、块层 |
典型使用场景
- 写采集脚本前核对事件名在本机是否存在。
- 跨机器对比事件集合,确认脚本可移植性。
- 按子系统浏览追踪点,挑选合适的观测点。
- 生成事件清单交给自动化工具或文档。
- 排查采集脚本静默失效:事件不存在时部分版本不会报错。
按类别检索
按类别检索
perf list | head -40 # 全量清单,通常很长
perf list cache # 只看缓存类事件
perf list 'sched:*' # 调度相关追踪点
perf list 'block:*' # 块层追踪点
perf list pmu # 性能监视单元事件
perf list --json | head # 机器可读清单,便于脚本处理
perf list 'syscalls:sys_enter_openat' # 精确检索某个追踪点是否存在事件类别
| 类别 | 名称特征 | 典型用途 |
|---|---|---|
| 硬件 | 周期、指令、分支等 | 效率与流水线行为 |
| 缓存 | 各级缓存命中与未命中 | 访存与局部性 |
| 软件 | 切换、缺页、迁移 | 内核行为影响 |
| 追踪点 | 带子系统前缀 | 精确观测特定内核路径 |
把清单结果写进采集脚本的注释或用运行时探测替代硬编码,可以避免内核升级后事件名变化导致的静默失效。
不同内核版本与架构的事件名不通用,直接复用他人脚本里的名称在部分环境上不会报错但采不到数据,结果被误读为「系统没有该行为」。