我正在使用perf userland工具进行基于事件的采样:目标是试图找出某些影响性能的事件,例如分支未命中和缓存未命中在我正在处理的更大系统上发生的情况。
现在,像
perf record -a -e branch-misses:pp -- sleep 5
效果很好:在采集样本中的IP时,由'pp'修饰符分配的PEBS计数模式非常准确。
不幸的是,当我尝试为缓存未命中做同样的事情时,即
perf record -a -e cache-misses:pp -- sleep 5 # [1]
我得到了
错误:sys_perf_event_open()系统调用返回22(无效参数)。 / bin / dmesg可能会提供其他信息。
致命:没有配置CONFIG_PERF_EVENTS = y内核支持?
dmesg | grep "perf\|pmu"
没有显示任何有用的AFAICT。我也很确定内核是用CONFIG_PERF_EVENTS = y编译的,因为[1]和
perf record -a -e cache-misses -- sleep 5 # [2]
工作:[2]的问题是收集的样本不是很准确,这会伤害我的个人资料。
有关可能发生的事情的任何暗示?
答案 0 :(得分:4)
事实证明,通用cache-misses
映射到的特定事件不支持PEBS。另一种方法是使用PEBS支持的 事件之一(请参阅Nehalem架构列表here)并使用适当的掩码缩小范围。具体来说,可以使用MEM_LOAD_RETIRED:LLC_MISS,即使事件在所有情况下似乎都不准确。