什么是perf缓存事件的含义?

Man*_*lva 27 c linux perf

我试图弄清楚为什么修改后的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]
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到关于这些领域的解释?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
Run Code Online (Sandbox Code Playgroud)

MvG*_*MvG 27

一些答案:

  • L1是Level-1缓存,是最小和最快的缓存.LLC另一方面,它指的是缓存层次结构的最后一级,因此表示最大但最慢的缓存.
  • ivs d将指令缓存与数据缓存区分开来.只有L1以这种方式分割,其他缓存在数据和指令之间共享.
  • TLB是指转换后备缓冲区,一种在将虚拟地址映射到物理地址时使用的缓存.
  • 不同的TLB计数器取决于命名地址是指一个指令还是一些数据.
  • 对于所有数据访问,根据给定的存储器位置是否被读取,写入或预取(即,在稍后的某个时间检索以供读取),保持不同的计数器.
  • 未命中数表示访问给定数据项但在缓存中存在的频率.

  • @ManuelSelva"加载"是指程序执行加载指令以检索内存."预取"是指处理器猜测您将在不久的将来加载内存并提前获取内存.这样,当你的程序使用内存时,它已经存在于缓存中. (2认同)

fir*_*oot 21

您似乎认为该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

例如,通过阅读它,您可以看到cache-missesperf list显示的事件对应于PERF_COUNT_HW_CACHE_MISSES