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

如何使用perf为代码标注缓存缺失率(而非仅缓存命中/缺失数)?

用perf annotate查看代码行级缓存缺失率的方法

要在perf annotate里显示缓存缺失率,核心是同时采集缓存命中和缺失的配对事件,然后让perf计算比率,具体步骤如下:

1. 正确采集配对的缓存事件

首先用perf record同时记录缓存加载(命中+缺失的总次数)和缓存缺失的事件,比如针对L1数据缓存:

perf record -e L1-dcache-loads,L1-dcache-load-misses -g ./你的程序

如果要分析指令缓存,换成:

perf record -e L1-icache-loads,L1-icache-load-misses -g ./你的程序

要是想看所有缓存层级的整体情况,用通用缓存事件:

perf record -e cache-references,cache-misses -g ./你的程序

参数说明:

  • -g:记录调用栈,方便定位到具体函数和代码行
  • 可加-F 99设置采样频率,避免采样过度影响程序运行

2. 用perf annotate查看缺失率

命令行直接输出比率

运行以下命令,直接在代码行旁显示缺失率(缺失数/总加载数):

perf annotate --ratio

交互式界面切换显示模式

如果用交互式的perf annotate:

  1. 运行perf annotate进入界面
  2. 按r键切换显示模式,此时每个代码行的计数后面会自动显示缺失率百分比
  3. 按c键可以按缓存事件的计数排序,快速定位缺失率最高的代码块

额外提示

  • 确保perf版本在5.0以上,旧版本可能需要手动计算,但交互式的r键切换功能大部分版本都支持
  • 可以先用perf report --ratio查看函数级的缺失率,找到热点函数后,再进入该函数的annotate视图看代码行级细节
  • 必须配对正确的事件:比如L1-dcache-load-misses必须和L1-dcache-loads搭配,不能混用不同类型的缓存事件,否则计算出的比率没有意义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:12:05