繁体   English   中英

如何通过Linux中的perf工具捕获L3缓存的命中与失败

[英]How to catch the L3-cache hits and misses by perf tool in Linux

有什么方法可以通过Linux中的perf工具来捕获L3缓存的命中率和未命中率。 根据性能perf list cache的输出,支持L1和LLC缓存。 根据perf的源代码中perf_evsel__hw_cache数组的定义:

const char *perf_evsel__hw_cache[PERF_COUNT_HW_CACHE_MAX]
                                [PERF_EVSEL__MAX_ALIASES] = {
 { "L1-dcache", "l1-d",         "l1d",          "L1-data",              },
 { "L1-icache", "l1-i",         "l1i",          "L1-instruction",       },
 { "LLC",       "L2",                                                   },
 { "dTLB",      "d-tlb",        "Data-TLB",                             },
 { "iTLB",      "i-tlb",        "Instruction-TLB",                      },
 { "branch",    "branches",     "bpu",          "btb",          "bpc",  },
 { "node",                                                              },
};

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

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

我认为您唯一的解决方案是使用“原始硬件事件”(请参阅​​“性能列表”末尾,以“ rNNN”开头的行)。 这样就可以对硬件寄存器的描述进行编码了。

perf用户指南和教程仅提及“要测量由硬件供应商文档提供的实际PMU,请传递十六进制参数代码”。 我不知道Intel的语法是什么,以及该体系结构上性能监控器的实现方式是否不同。 您可以从这里开始:

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

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

http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html

从以下部分开始:18.2.1.2预定义的架构性能事件

r412e“ LLC Misses”可能是您想要的

perf stat -e r412e <command>

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

要获得系统范围的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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