perf 事件命名与 raw event
更新时间:2026-10-01。配合 perf events,这篇解决“跨 CPU 时事件怎么写才对”。
一、事件类别
perf list 列出 hardware(cycles/instructions)、software(context-switches/page-faults)、cache 类、tracepoint、断点等。别名由内核映射到当前 CPU 的具体 PMU 事件,便于可移植;但别名粒度粗,底层实现随微架构而异。
二、raw event
要用厂商专有事件(如某 uarch 的特定 stall),用 raw 编码:rEE(event number),完整可带 umask:r<event><umask> 或 cpu/event=..,umask=../。编码从 Intel SDM Vol.3/AMD PPR/ARM TRM 的 PMU 表查。

三、常见坑
- 把 Intel raw 码照搬到 AMD/ARM。
- 别名含义在不同代 CPU 不同却假设一致。
- 事件名拼错或权限不足被当成不支持。
小结
别名保可移植、raw event 保精确;raw 编码必须按当前 CPU 手册查,不可跨平台抄。下一篇 采样原理 skid 与 PEBS。
总结
cycles/instructions/cache-misses 这类别名由内核映射到当前 CPU 的具体 PMU 事件、保证可移植,但粒度粗、同一别名在不同微架构底层事件可能不同;要精确用到厂商专有 stall,就得按 Intel SDM/AMD PPR/ARM TRM 的 PMU 表查出 event/umask 编码、写成 raw event(r<event><umask> 或 cpu/event=,umask=/)——raw 码绝不跨平台照抄,而“事件不存在/权限不足”要和“真的不支持”区分开。