我想要测量我的代码的缓存失分率。我们可以使用perf列表来显示受支持的事件。我的桌面上有一个Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz处理器,perf列表包含缓存-refrences和高速缓存-错过,如下所示:
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]我认为根据英特尔架构软件开发人员手册,cache-misses被映射到硬件事件LLC(我通过比较perf stat -e r412e和perf stat r412e和perf stat -e cache-错过了,它们给出了几乎相同的结果)。但是缓存引用是如何计算的呢?我没有找到使用现有硬件事件获取全部缓存引用的事件或方法。所以我在想在我的电脑上这个缓存引用是否准确?
发布于 2014-06-11 09:36:35
在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标记的事件表示关联缓存中引用的数量。
注意:以前的问题和关于perf_event_open的手册页 (perf在内部使用)可能会有所帮助。
发布于 2014-06-10 09:04:39
如果您在内核代码中查看arch/x86/内核/cpu/perf_EventIntel.c。你会看到的
"PERF_COUNT_HW_CACHE_REFERENCES = 0x4f2e". 何地as
"PERF_COUNT_HW_CACHE_MISSES= 0x412e"X86体系结构手册上说,0x4f2e是“此事件计数来自引用上一级缓存中的缓存行的核心的请求”。所以我认为这是正确的。
发布于 2014-06-11 07:41:47
我尝试了英特尔的一个名为Vtune的工具,我得到了一些关于如何测量总的缓存引用的线索。它们可以测量微操作代码,过滤加载或存储的指令,从而获得总的缓存引用。但我不确定perf工具是否也使用这种方法。
https://stackoverflow.com/questions/24093416
复制相似问题