繁体   English   中英

性能缓存事件是什么意思?

[英]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

一些答案:

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM