【问题标题】:Detecting Cache Misses and Hits Pragmatically in Linux在 Linux 中实用地检测缓存未命中和命中
【发布时间】:2011-03-10 03:06:29
【问题描述】:

我知道这是特定于平台的问题,但是,我想对应用程序进行一些运行时分析,以检测缓存未命中和命中。我知道 cachegrind,一种用于 valgrind 和 vtune 的工具,并且存在大量其他分析实用程序。但是,我有兴趣实现我自己的缓存未命中检测版本。我知道 cachegrind 充当缓存模拟器。在不破解内核的情况下,如何实用地检测缓存未命中?我觉得这对于用户级应用程序来说几乎是不可能的,但无论如何我不得不问。

【问题讨论】:

    标签: c linux caching


    【解决方案1】:

    有办法做到这一点!在 Linux 上,您可以为此目的利用 Linux 性能计数器子系统。例如。看看这里:http://lxr.linux.no/#linux+v2.6.37.3/tools/perf/

    【讨论】:

      【解决方案2】:

      如何以实用的方式检测缓存未命中 [无需缓存模拟]?

      缓存由硬件而不是内核管理。它们的参数(缓存级别、大小、踢出策略、回写/直写等)都是特定于处理器实现的。作为程序员,您“不应该知道它们的存在”。因此,在没有缓存模拟的情况下测量缓存未命中性能是不可能的。

      另一方面,VM 页面(一个 更粗略的“缓存”——在缓存保存大块内存的意义上)由操作系统管理。我想有办法通过入侵内核甚至创建一个漂亮的用户应用程序来收集有关页面错误的统计信息。页面错误统计可能对您没有多大用处(尤其是因为它们受到其他正在运行的进程的影响),但使用大量 RAM 的应用程序可能(a teeny, tiny bit) 具有类似于 CPU 缓存访问模式的页面错误或页面访问模式。但是,我不太确定细节。

      【讨论】:

      • 是的,好点。我确实知道内核在加载内核时会初始化分页系统。我可能应该询问更多有关页面命中/未命中的信息。
      • 嗯,但许多处理器似乎能够报告缓存未命中等。例如 perfex 使用这个:complang.tuwien.ac.at/anton/linux-perfex/ppc7450.html 但它还需要修补内核。
      • @advait:您关于测量缓存未命中的答案是错误的。 CPU 实现了hardware performance counters,可以通过软件读取。如果您想优化软件的缓存行为,这一点至关重要。
      猜你喜欢
      • 2021-01-12
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多