【问题标题】:"C" programmatically clear L2 cache on Linux machines“C”以编程方式清除 Linux 机器上的二级缓存
【发布时间】:2010-08-10 22:30:49
【问题描述】:

用“C”编写的与清除 Linux 操作系统机器上的二级缓存相关的程序步骤是什么?

/sys/devices/system/cpu/cpu0/cache/index2/size = 6144K x 8CPUs

【问题讨论】:

标签: c linux caching


【解决方案1】:

您可以通过任何远程清洁/便携方式获得的最接近:

char dummy[L2_CACHE_SIZE];
memset(dummy, 0, sizeof dummy);

根据您的 CPU,可能存在可以清除缓存的特权操作码,但我对它们或您如何访问它们一无所知。如果它们存在,您可能仍然需要内核级代码才能使用它们。

【讨论】:

  • 这意味着我们可能会找到一个系统调用来执行相关任务。
  • Memset() 历史上使用不需要读取目标缓存行和写入行组合在要写入的缓存行上的指令。然而,有些指令将数据直接流式传输到内存(它们在缓存之外有自己的专用缓存线)。智能编译器可能会使用此类指令来保护 L2 缓存不被此类 memset() 擦除。
  • 我想知道有多少缓存关联性会妨碍清除缓存?想象一下你有一个完全关联的 L2 缓存; LRU 更换是唯一发生的事情。其他进程正在运行,通常保持最近使用的缓存线 - 但 memset 当然不会再次写入它用于写入的缓存线。它们很快就会变成 LRU 线......所以 memset() 最终会使用和重复使用一小组缓存线来进行写入。
  • 当然,二级缓存最多说24路关联。但我想知道这是否意味着在几组 24 个内存位置之后,缓存关联性与 LRU 替换相结合意味着您最终 重新使用 L2 缓存中每个关联性块中相同的几行写入行.
【解决方案2】:

您不能从用户空间访问低级内存,您必须实现自己的设备驱动程序才能访问 Linux 中的物理内存。

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多