我正在使用 perf 用户空间工具进行基于事件的采样:目标是试图找出某些影响性能的事件(如分支未命中和缓存未命中)在我正在处理的更大系统上发生的位置。
现在,像
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() 系统调用返回 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] 的问题是收集的样本不是很准确,这伤害了我的个人资料。
关于这里可能发生什么的任何提示?