[英]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
使用原始事件计数器获得了更大的成功,直接查看《英特尔软件开发人员手册》以获取详细的定义。
从以下部分开始: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.