Fedora 37编译PAPI遇事件检测失败及组件禁用问题求助
解决Fedora 37上编译PAPI 7.0.0.0时perf_event组件禁用问题
问题根源
核心原因是libpfm4无法识别AMD Ryzen 5 5600H的PMU(性能监控单元),导致PAPI的perf_event组件被禁用,进而无可用性能事件,最终引发测试失败。
解决步骤
1. 手动编译安装最新版libpfm4
Fedora 37仓库中的libpfm4版本对AMD Zen3架构(5600H属于该架构)的支持不完善,需编译最新源码:
# 安装编译依赖 sudo dnf install git gcc make # 克隆libpfm4源码 git clone https://github.com/andikleen/libpfm4.git cd libpfm4 # 编译并安装 make sudo make install sudo ldconfig
2. 重新编译PAPI并指定libpfm4路径
之前的编译未正确关联最新libpfm4,重新编译时明确指定路径:
# 进入PAPI源码目录,先清理旧编译文件 cd path/to/papi-7.0.0.0 make clean ./configure --with-libpfm4=/usr/local make sudo make install
3. 验证内核perf配置
确保内核开启了perf相关必要选项(Fedora 37默认已开启,可验证):
grep -i perf /boot/config-$(uname -r)
需确认CONFIG_PERF_EVENTS=y和CONFIG_HW_PERF_EVENTS=y两项存在且为y。
4. 手动指定AMD PMU类型(可选)
若上述步骤无效,可通过环境变量强制libpfm4识别AMD PMU:
export LIBPFM_FORCE_PMU=amd64
之后运行./utils/papi_component_avail和./utils/papi_avail验证组件状态。
5. 验证修复结果
完成配置后重新测试:
make test ./utils/papi_component_avail ./utils/papi_avail
额外提示
- 若问题仍存在,检查PAPI编译输出,确认是否正确检测到libpfm4
- 确保当前用户有权限访问perf事件,可临时用
sudo运行测试,或通过修改/etc/sysctl.conf添加kernel.perf_event_paranoid=0并执行sudo sysctl -p配置永久权限
内容的提问来源于stack exchange,提问作者Devansh_Jain_21
相关产品推荐
相关产品推荐

