Ubuntu 20.04下PAPI无可用计数器问题求助
问题原因分析
- PAPI预设事件映射未生成:预设事件是PAPI对硬件原生事件的抽象层,若编译PAPI时未针对当前CPU架构生成对应映射表,就会出现预设事件为0的情况。
- PAPI编译配置缺失:编译过程中可能未启用perf_event组件的完整支持,或未正确检测当前CPU的事件信息。
- 内核版本兼容问题:部分过新/过旧的内核与PAPI的perf_event组件存在适配问题,导致预设事件无法加载。
- 权限或安全机制限制:即便调整了
kernel.perf_event_paranoid和kptr_restrict,仍可能因未用sudo运行、SELinux/AppArmor拦截等导致组件异常。
解决建议
- 重新编译PAPI并指定CPU架构:
- 卸载现有PAPI,下载最新稳定版源码
- 编译时添加对应CPU架构参数,例如x86_64架构的Skylake处理器可执行:
./configure --with-arch=skylake --enable-perf-events && make && sudo make install
- 调整内核版本:
- 升级内核至LTS版本(如5.15、6.x系列),避免使用测试版或过旧内核
- 升级后重新加载perf_event模块:
sudo modprobe perf_event
- 验证权限与安全机制:
- 用sudo运行PAPI工具:
sudo papi_avail、sudo papi_component_avail - 临时关闭SELinux测试:
sudo setenforce 0,若恢复正常再配置SELinux规则放行
- 用sudo运行PAPI工具:
- 直接使用原生事件:
- 若预设事件仍不可用,可在代码中直接绑定原生事件,示例片段:
int event_code; PAPI_event_name_to_code("LLC_MISSES", &event_code); PAPI_add_event(eventset, event_code);
- 若预设事件仍不可用,可在代码中直接绑定原生事件,示例片段:
- 排查组件详细状态:
- 运行
papi_component_avail -v查看perf_event组件的加载错误日志 - 确保系统安装了perf工具:
sudo apt install linux-tools-common linux-tools-$(uname -r)
- 运行
内容的提问来源于stack exchange,提问作者BR8
相关产品推荐
相关产品推荐

