如何用Perf CLI工具计算LLC缓存缺失率并监控绘图?
使用Perf CLI计算L3(LLC)缓存缺失率
1. 基于Perf指标计算LLC缺失率
Perf输出的LLC相关指标中,核心用于计算缺失率的是加载/存储类事件计数,LLC prefetch misses一般不纳入常规缺失率统计(除非你专门分析硬件预取的效率):
- LLC加载缺失率:公式为
(LLC load misses / LLC loads) * 100%,反映应用发起的加载请求中,LLC无法满足的比例 - LLC存储缺失率:公式为
(LLC store misses / LLC stores) * 100%,对应存储请求的LLC缺失比例 - 整体LLC缺失率:如果要综合加载和存储的整体情况,用
(LLC load misses + LLC store misses) / (LLC loads + LLC stores) * 100%
注:LLC预取缺失是硬件预取器主动发起的请求未命中的计数,不属于应用直接触发的内存访问,所以通常不参与常规缺失率计算。若需分析预取策略有效性,可单独统计该指标的占比。
2. 用Perf全程监控LLC指标
单次运行全量统计
直接运行程序并输出所有LLC相关事件的计数:
perf stat -e LLC-loads,LLC-load-misses,LLC-stores,LLC-store-misses,LLC-prefetch-misses ./your_application
执行后会输出每个事件的总计数、每秒速率等数据,可手动代入公式计算缺失率。
实时持续监控
如果需要跟踪程序运行过程中LLC指标的波动,可使用间隔采样模式,每隔指定毫秒输出一次统计:
# 每隔1秒输出一次统计,结果写入CSV文件方便后续分析 perf stat -I 1000 -e LLC-loads,LLC-load-misses,LLC-stores,LLC-store-misses,LLC-prefetch-misses -o llc_monitor.csv ./your_application
其中-I 1000表示间隔1000毫秒(1秒),输出的CSV文件可直接用表格工具打开分析。
采样定位热点代码
如果要结合代码定位高LLC缺失的函数/代码段,可使用采样模式:
# 针对LLC加载缺失事件采样,生成采样数据文件 perf record -e LLC-load-misses -g ./your_application # 查看采样报告,按缺失率排序展示函数 perf report
通过这个方式可以快速定位到缓存效率低的热点代码,指导优化方向。
3. 生成可视化图表
Perf本身不直接生成图表,但可以导出数据后用第三方工具处理:
- 用上述
perf stat的间隔输出模式导出CSV数据(如llc_monitor.csv) - 用gnuplot、Excel或Python的matplotlib/pandas库生成图表:
- 示例:用gnuplot绘制LLC加载缺失率的时间变化图
set datafile separator "," set xlabel "Time (s)" set ylabel "LLC Load Miss Rate (%)" plot "llc_monitor.csv" using 1:($3/$2*100) with lines title "LLC Load Miss Rate"
- 示例:用gnuplot绘制LLC加载缺失率的时间变化图
内容的提问来源于stack exchange,提问作者Sherlock
相关产品推荐
相关产品推荐

