linux - 如何在 Linux 中使用 perf 工具捕获 L3 缓存命中和未命中

标签 linux caching cpu perf

在 Linux 中是否有任何方法可以通过 perf 工具捕获 L3 缓存命中和未命中。根据perf list cache的输出,支持L1和LLC缓存。根据 perf_evsel__hw_cache 的定义perf 源代码中的数组:

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 是二级缓存的别名。我的问题是如何在 Linux 中通过 perf 工具捕获 L3 缓存命中和未命中。提前致谢!

最佳答案

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

我认为您唯一的解决方案是使用“原始硬件事件”(请参阅​​“perf list”末尾,以“rNNN”开头的行)。这提供了对硬件寄存器的描述进行编码的机会。

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

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

关于linux - 如何在 Linux 中使用 perf 工具捕获 L3 缓存命中和未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18172353/

相关文章:

linux - 没有 bc 的时间(以毫秒为单位)

http - Restful api 数据同步仅在大集合上更改模型

c# - 什么更快?缓存大量对象或通过 IEnumerable 访问它们?

c - 使用线程发现 CPU 核心数

multithreading - 当后台线程数以千计时,为什么程序的最佳线程数与核心数有关

java - 并行流 Java 8 的 CPU 核心数

Linux 3.x 内核书籍

linux - 在linux脚本中运行java应用程序后返回控制台

swift - 如何使用 SDWebImage 快速缓存图像?

Linux - 使用 awk 读取一条记录直到结束