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

如何让perf显示缓存缺失百分比?含原始计数器与内核配置问题

针对Intel Xeon E5-1650 v4(Broadwell)上perf缓存事件问题的解决方案

问题1:让perf基于加载数自动计算缺失百分比

可以通过两种方式实现:

  • 手动计算+awk脚本批量处理:先运行你已经在用的指定原始事件的perf命令,比如:
    perf stat -e [你的L1加载事件],[你的L1缺失事件],[你的LLC加载事件],[你的LLC缺失事件] ./your_program
    
    接着用awk提取输出中的数值并计算百分比,示例脚本如下(把括号内的内容替换成你实际用的事件代码/描述):
    perf stat -e rXXX,rYYY,rZZZ,rWWW ./your_program 2>&1 | awk '
    /rXXX/ {l1_load=$1}
    /rYYY/ {l1_miss=$1; printf("L1-icache miss rate: %.2f%%\n", (l1_miss/l1_load)*100)}
    /rZZZ/ {llc_load=$1}
    /rWWW/ {llc_miss=$1; printf("LLC miss rate: %.2f%%\n", (llc_miss/llc_load)*100)}
    '
    
  • 自定义事件别名简化输入:在~/.perfconfig里添加别名,避免每次输入长串原始代码:
    [events]
    l1_icache_loads = [你的L1加载事件代码]
    l1_icache_misses = [你的L1缺失事件代码]
    llc_loads = [你的LLC加载事件代码]
    llc_load_misses = [你的LLC缺失事件代码]
    
    之后用别名运行perf,再配合上述awk脚本计算百分比即可。

问题2:编译/配置perf使其自动支持Broadwell缓存事件并显示百分比

Broadwell的缓存事件在新版perf中是原生支持的,出现<not supported>大概率是系统自带的perf版本过旧,或者内核perf事件子系统配置不全,解决步骤如下:

  1. 检查版本匹配度:
    运行perf --version和uname -r,如果perf版本远低于内核版本(比如内核是5.x但perf是3.x),直接更新perf即可。
  2. 编译对应版本的perf工具(无需编译整个内核):
    • 下载与当前内核版本一致的内核源码包
    • 进入源码目录的tools/perf文件夹
    • 安装编译依赖(比如Debian系的libelf-dev、libdw-dev,RHEL系的elfutils-libelf-devel、elfutils-devel)
    • 运行make编译,完成后会生成perf二进制文件
    • 替换系统中的旧perf:sudo cp perf /usr/bin/perf
  3. 验证内核配置(仅当自行编译内核时需要):
    确保内核编译时开启了以下选项:
    • CONFIG_PERF_EVENTS=y:启用perf事件子系统
    • CONFIG_X86_PERF_EVENTS=y:支持x86架构的perf事件
    • CONFIG_PERF_EVENTS_INTEL=y:启用Intel处理器的perf事件支持
  4. 测试自动支持:
    编译完成后直接运行标准事件名的perf命令,此时perf会自动识别事件并显示缺失百分比:
    perf stat -e L1-icache-loads,L1-icache-load-misses,LLC-loads,LLC-load-misses ./your_program
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:30:12