什么是perfcaching事件的含义?

我想弄清楚为什么一个修改后的C程序运行速度比它的非修改的计数器部分(我添加了几行代码来执行一些额外的工作)。 在这种情况下,我怀疑“ caching效果 ”是主要的解释(指令caching)。 因此,我到达了perf (https://perf.wiki.kernel.org/index.php/Main_Page)分析工具,但不幸的是,我无法理解其输出caching未命中的含义。

提供了几个有关caching的事件:

  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] 

我在哪里可以find关于这些领域的解释? caching未命中事件总是比其他事件小。 这个事件是什么措施?

在下面的例子中,如何解释ls的26,760 L1-icache-load-misss与5,708 cache-missses?

 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的文档不是最好的。

但是,通过阅读(假设您已经对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

一些答案:

  • L1是一级缓存,是最小和最快的缓存。 LLC另一方面是指高速缓存层次的最后一级,因此表示最大但是最慢的高速缓存。
  • id区分指令缓存与数据缓存。 这样只有L1被分割,其他的缓存在数据和指令之间共享。
  • TLB是指转换后备缓冲区 ,是将虚拟地址映射到物理地址时使用的缓存。
  • 不同的TLB计数器取决于指定的地址是指一条指令还是一些数据。
  • 对于所有数据访问,根据给定的内存位置是被读取,写入还是预取(即,在稍后的时间读取)来保存不同的计数器。
  • 未命中数表示给定数据项被访问但存在于缓存中的频率。