缓存性能计数器与 perf
更新时间:2026-10-01。要确认缓存是不是瓶颈,最可靠的是读硬件计数器,而不是凭代码感觉。
本文要回答的问题
- 该看哪些 perf 事件、命中率怎么算?
- 计数器数字为什么有时不准?
一、关键事件
常见:cache-references、cache-misses(LLC 级)、L1-dcache-loads/misses、LLC-load-misses、iTLB/dTLB-load-misses。命中率 = 1 − misses/references。事件名随 Intel/AMD/ARM 不同,应查对应事件表。
二、偏差与归因
事件数过多时计数器复用(multiplexing)会缩放估计,最好精简事件;高 miss 不等于主瓶颈,要结合 top-down(前端/坏投机/后端/内存)和执行时间占比判断。
三、常见坑
- 把 cache-misses 绝对数大就当瓶颈(要看相对和时间)。
- 事件名跨架构照抄。
- 同时开太多事件导致多路复用偏差。
小结
用 PMU 事件算各级命中率、注意复用偏差,再用 top-down 把缓存放进整体瓶颈归因。下一篇 缓存与 GPU/加速器层次。
总结
确认缓存是不是瓶颈,最可靠的手段是读硬件 PMU 而不是凭代码感觉:用 perf stat 采集 cache-references/cache-misses、L1-dcache 与 LLC miss、iTLB/dTLB miss,按 1−miss/ref 算各级命中率,事件名必须对照具体架构;同时事件过多会触发计数器 multiplexing 缩放估计,高 miss 绝对数也不等于主瓶颈,必须结合 top-down 四类归因和时间占比判断。测量先于优化,归因先于动手——没有计数器佐证的"缓存瓶颈"都只是猜测。