Linux kernel 使用perf userland工具和PEBS进行基于事件的采样

Linux kernel 使用perf userland工具和PEBS进行基于事件的采样,linux-kernel,profiling,kernel-module,perf,Linux Kernel,Profiling,Kernel Module,Perf,我正在使用perf userland工具进行基于事件的采样:目标是试图找出在我正在工作的更大系统上,某些影响性能的事件(如分支未命中和缓存未命中)发生在何处 现在,大概是 perf record -a -e branch-misses:pp -- sleep 5 工作完美:“pp”修饰符触发的PEBS计数模式在采集样本中的IP时非常准确 不幸的是,当我尝试对缓存未命中执行相同操作时,即 perf record -a -e cache-misses:pp -- sleep 5 # [1] 我明

我正在使用perf userland工具进行基于事件的采样:目标是试图找出在我正在工作的更大系统上,某些影响性能的事件(如分支未命中和缓存未命中)发生在何处

现在,大概是

perf record -a -e branch-misses:pp -- sleep 5
工作完美:“pp”修饰符触发的PEBS计数模式在采集样本中的IP时非常准确

不幸的是,当我尝试对缓存未命中执行相同操作时,即

perf record -a -e cache-misses:pp -- sleep 5 # [1]
我明白了

错误:sys_perf_event_open()syscall返回22(无效参数)/bin/dmesg可提供额外信息

致命:未配置配置性能事件=y内核支持

dmesg | grep“perf\| pmu”
没有显示任何有用的AFAICT。我还非常确定内核是用CONFIG_PERF_EVENTS=y编译的,因为[1]和

perf record -a -e cache-misses -- sleep 5 # [2]
工作:[2]的问题是,采集的样本不太准确,这损害了我的个人资料


关于这里可能发生的事情有什么线索吗

结果表明,通用
缓存未命中映射到的特定事件不支持PEB。另一种方法是使用PEB支持的事件之一(参见Nehalem体系结构列表)和适当的掩码来缩小范围。具体来说,可以使用MEM_LOAD_RETIRED:LLC_MISS,即使事件似乎并非在所有情况下都是准确的。

与Nehalem事件列表的链接已断开。将创建位于不同位置的新链接