You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取主机架构原始Perf事件并解决libpfm4事件识别问题?

解决libpfm4相关Perf事件问题

获取主机架构原始Perf事件

  • 直接运行libpfm4自带的pfm_discover_events工具,它会列出当前CPU架构支持的所有原始硬件事件,包含事件名、编码、描述信息。
  • 参考对应CPU厂商的官方手册:Intel用户查《Intel 64 and IA-32 Architectures Software Developer Manual》的性能监控章节;AMD用户查《AMD64 Architecture Programmer’s Manual》的性能监控部分,里面有所有原始事件的编码和定义。

编译可读事件映射列表与pfm_get_os_event_encoding()使用

libpfm4的事件映射逻辑内置在库中,无需手动编译单独的映射列表,只需确保正确使用:

  • 若使用标准硬件事件,直接用libpfm4支持的事件名(比如cycles、instructions)或原始编码格式(如cpu/event=0x3C,umask=0x00/)作为输入参数传给pfm_get_os_event_encoding()。
  • 若自定义事件,需在代码中通过pfm_event_info_t结构体定义事件的名称、编码、掩码等属性,再调用pfm_get_event_info()注册后使用。
  • 编译程序时,需链接libpfm4库:gcc your_code.c -o your_bin -lpfm,确保头文件路径正确(若库安装在非默认路径,需加-I指定头文件目录、-L指定库目录)。

解决libpfm4无法识别perf list多数事件的问题

perf list输出的部分事件是内核封装的高层别名或组事件,libpfm4仅识别底层硬件原始事件和自身定义的标准别名,解决方法:

  • 用perf list --details查看目标事件的原始硬件编码,比如L1-dcache-loads对应的原始编码可能是cpu/event=0x00,umask=0x01/,将这个原始编码传入pfm_get_os_event_encoding()即可。
  • 确保使用的libpfm4是最新版本,部分新CPU架构的事件支持需要更新库来适配。
  • 调用pfm_get_os_event_encoding()时,指定正确的参数:目标类型设为PFM_OS_PERF_EVENT,权限掩码设为对应层级(比如用户态事件用PFM_PLM0|PFM_PLM3)。

内容的提问来源于stack exchange,提问作者drip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:55:02