[英]What are perf cache events meaning?
我试图弄清楚为什么修改后的 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-misses 与 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
您似乎认为cache-misses
事件是所有其他类型的缓存未命中( L1-dcache-load-misses
等)的总和。 这实际上不是真的。
cache-misses
事件表示任何缓存都无法提供的内存访问次数。
我承认 perf 的文档并不是最好的。
但是,您可以通过阅读 perf_event_open() 函数的文档(假设您已经很好地了解 CPU 和性能监控单元的工作原理,这显然不是计算机体系结构课程)来了解很多关于它的信息:
http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html
例如,通过阅读它可以看到 perf list 显示的cache-misses
事件对应于PERF_COUNT_HW_CACHE_MISSES
根据perf 教程,性能监控单元 (PMU) 事件或硬件事件是指那些可以直接映射到 CPU 供应商的 CPU 特定事件的事件。 但是硬件缓存事件是指perf
提供的一些硬件事件名字,可能映射到 CPU 提供的实际事件。 对于perf
的缓存事件perf list cache
在 Linux 终端中使用perf list cache
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.