如何通过Linux中的perf工具捕获L3缓存命中和未命中

时间:2013-08-11 13:20:58

标签: linux caching cpu perf

有没有办法在Linux中通过perf工具捕获L3缓存命中和未命中。根据{{​​1}}的输出,支持L1和LLC高速缓存。根据perf源代码中perf_evsel__hw_cache数组的定义:

perf list cache

LLC是L2缓存的别名。我的问题是如何通过Linux中的perf工具捕获L3缓存命中和未命中。提前谢谢!

3 个答案:

答案 0 :(得分:3)

如果硬件具有L3缓存,则奇怪的LLC(最后一级缓存)配置为“L2”。但我还不知道perf的内部结构,也许这些设置是通用的。

我认为你唯一的解决方案是使用“原始硬件事件”(参见“perf list”末尾,以“rNNN”开头的行)。这样就有机会对硬件寄存器的描述进行编码。

perf用户指南和教程仅提及“要测量硬件供应商文档提供的实际PMU,请传递十六进制参数代码”。我不知道英特尔的语法是什么,以及在这种架构上是否有不同的性能监视器实现。你可以从这里开始:

http://code.google.com/p/kernel/wiki/PerfUserGuide#Hardware_events

答案 1 :(得分:2)

我使用原始事件计数器取得了更大成功,直接查看“英特尔软件开发人员手册”以获取详细定义。

http://jsfiddle.net/galindbergh/jkkvk1v7/13/

从部分: 18.2.1.2预定义的架构性能事件

r412e" LLC未遂"可能是你想要的那个

perf stat -e r412e <command>

(请注意,对我来说,这与使用-e cache-misses的数字相同。)

答案 2 :(得分:1)

要获得系统范围的L3缓存未命中率,请执行以下操作:

$ sudo perf stat -a -e LLC-loads,LLC-load-misses,LLC-stores,LLC-store-misses,LLC-prefetch-misses sleep 5


Performance counter stats for 'system wide':

    24,477,266,369      LLC-loads                                                     (22.65%)
     1,409,470,007      LLC-load-misses           #    5.76% of all LL-cache hits     (29.79%)
        88,584,705      LLC-stores                                                    (30.32%)
        10,545,277      LLC-store-misses                                              (30.03%)
       150,785,745      LLC-prefetch-misses                                           (34.71%)

      13.773144159 seconds time elapsed

这会打印出未命中和总引用。该比率是L3缓存未命中率。

请参阅wiki上的完整事件列表:https://perf.wiki.kernel.org/index.php/Tutorial#Events