有没有办法在Linux中通过perf工具捕获L3缓存命中和未命中。根据{{1}}的输出,支持L1和LLC高速缓存。根据perf源代码中perf_evsel__hw_cache数组的定义:
perf list cache
LLC是L2缓存的别名。我的问题是如何通过Linux中的perf工具捕获L3缓存命中和未命中。提前谢谢!
答案 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