我试图弄清楚为什么修改后的C程序比未修改的计数器部分运行得更快(我添加了很少的代码行来执行一些额外的工作)。在这种情况下,我怀疑“缓存效果”是主要的解释(指令缓存)。因此,我到达perf
(https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但遗憾的是我无法理解其有关缓存未命中的输出的含义。
提供了几个关于缓存的事件:
cache-references [Hardware event]
cache-misses [Hardware event]
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]
dTLB-loads [Hardware cache event]
dTLB-load-misses [Hardware cache event]
dTLB-stores [Hardware cache event]
dTLB-store-misses [Hardware cache event]
dTLB-prefetches [Hardware cache event]
dTLB-prefetch-misses [Hardware cache event]
iTLB-loads [Hardware cache event]
iTLB-load-misses [Hardware cache event]
branch-loads [Hardware cache event]
branch-load-misses [Hardware cache event]
node-loads [Hardware cache event]
node-load-misses [Hardware cache event]
node-stores [Hardware cache event]
node-store-misses [Hardware cache event]
node-prefetches [Hardware cache event]
node-prefetch-misses [Hardware cache event]
我在哪里可以找到有关这些字段的说明? cache-misses事件总是小于其他事件。这个事件的衡量标准是什么?
如何在以下示例中解释ls的26,760次L1-icache-load-miss与5,708次缓存未命中?
perf stat -e L1-icache-load-misses ls
caches caches~ out
Performance counter stats for 'ls':
26,760 L1-icache-load-misses
0.002816690 seconds time elapsed
perf stat -e cache-misses ls
caches caches~ out
Performance counter stats for 'ls':
5,708 cache-misses
0.002822122 seconds time elapsed
答案 0 :(得分:26)
一些答案:
L1
是Level-1缓存,是最小和最快的缓存。另一方面,LLC
指的是cache hierarchy的最后一级,因此表示最大但最慢的缓存。i
与d
区分指令缓存与数据缓存。只有L1以这种方式分割,其他缓存在数据和指令之间共享。TLB
是指translation lookaside buffer,是将虚拟地址映射到物理地址时使用的缓存。答案 1 :(得分:19)
您似乎认为cache-misses
事件是所有其他类型的缓存未命中的总和(L1-dcache-load-misses
,依此类推)。事实并非如此。
cache-misses
事件表示任何缓存无法提供的内存访问次数。
我承认perf的文档不是最好的。
但是,通过阅读(假设您已经很好地了解CPU和性能监视单元如何工作,这显然不是计算机体系结构课程),可以通过阅读来了解相关内容:perf_event_open的文档( )功能:
http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html
例如,通过阅读它,您可以看到perf列表显示的cache-misses
事件对应PERF_COUNT_HW_CACHE_MISSES
答案 2 :(得分:0)
由于评论信誉受到限制,我无法在Mvg的评论中回复。 根据{{3}},硬件事件是指可以直接映射到PMU evnet的那些事件。但是,硬件缓存事件是指perf提供的一些硬件事件别名,它们可能会映射到CPU提供的实际事件。