perf list 事件检索

perf list 列出硬件、软件、缓存与 tracepoint 事件, 是写 -e 参数前的核对步骤。

事件清单检索

事件清单命令列出本机所有可统计的事件:硬件计数器事件、内核软件事件、各级缓存事件、内核追踪点,以及处理器自带的监视单元事件。它是写采集参数之前的核对步骤,也是排查「同一份采集脚本在另一台机器上什么也采不到」的第一站。

基本信息

适用平台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'   # 精确检索某个追踪点是否存在

事件类别

类别名称特征典型用途
硬件周期、指令、分支等效率与流水线行为
缓存各级缓存命中与未命中访存与局部性
软件切换、缺页、迁移内核行为影响
追踪点带子系统前缀精确观测特定内核路径
把清单结果写进采集脚本的注释或用运行时探测替代硬编码,可以避免内核升级后事件名变化导致的静默失效。
不同内核版本与架构的事件名不通用,直接复用他人脚本里的名称在部分环境上不会报错但采不到数据,结果被误读为「系统没有该行为」。

易错点

  • 把不同内核版本的事件名直接复用,采不到数据却误以为系统真的没有该行为。
  • 未核对事件可用性就写入采集脚本,问题在跨环境部署时才暴露。
  • 清单不按类别过滤直接全量阅读,实际使用时找不到目标事件。
  • 忽略架构差异:同名的硬件事件在不同处理器上语义与可用性不同。
  • 依赖人工记忆事件名,人员更换后脚本无人敢改。

数据来源与参考

  • man perf-list
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌