我想测量我的代码的缓存未命中率.我们可以使用perf list来显示支持的事件.我的桌面有一个Intel(R)Core(TM)i5-2400 CPU @ 3.10GHz处理器,perf列表包含缓存参考和缓存未命中,如下所示:
cpu-cycles OR cycles [Hardware event] stalled-cycles-frontend OR idle-cycles-frontend [Hardware event] stalled-cycles-backend OR idle-cycles-backend [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event]
根据英特尔架构软件开发人员手册,我认为缓存未命中映射到硬件事件LLC-missses(我通过比较perf stat -e r412e和perf stat -e cache-miss确认了这一点,它们给出了几乎相同的结果).但是如何计算缓存引用?我没有找到使用现有硬件事件获取总缓存引用的事件或方法.所以我想知道这个缓存引用在我的计算机上是否准确?
解决方法
在Intel上,我认为perf不提供测量总缓存引用的事件,因为此类事件在硬件级别不存在.您应该能够使用perf list报告的硬件缓存事件自行计算此信息:
L1-dcache-loads [Hardware cache event] L1-dcache-load-misses [Hardware cache event] L1-dcache-stores [Hardware cache event] L1-dcache-store-misses [Hardware cache event] L1-dcache-prefetches [Hardware cache event] L1-dcache-prefetch-misses [Hardware cache event] L1-icache-loads [Hardware cache event] L1-icache-load-misses [Hardware cache event] L1-icache-prefetches [Hardware cache event] L1-icache-prefetch-misses [Hardware cache event] LLC-loads [Hardware cache event] LLC-load-misses [Hardware cache event] LLC-stores [Hardware cache event] LLC-store-misses [Hardware cache event] LLC-prefetches [Hardware cache event] LLC-prefetch-misses [Hardware cache event]
未标记为-misses的事件表示关联缓存中的引用数.