【问题标题】:MESI-protocol and the LRU-strategyMESI 协议和 LRU 策略
【发布时间】:2014-11-24 01:02:17
【问题描述】:

我已经阅读了很多关于 MESI 协议及其用于保持缓存一致的应用的文献,但有两个细节我不太清楚:

当使用 MESI 协议保持多个缓存同步并为缓存行应用 LRU 策略时,缓存行是仅通过读取访问还是通过写入访问保留在缓存中?

另外,我看对了吗:缓存 A 中的共享行上的缓存命中不会按照缓存 B 的 LRU 顺序显示该行?

【问题讨论】:

    标签: multithreading caching multiprocessing cpu-cache mesi


    【解决方案1】:

    如果您谈论的是回写类型的缓存,则需要区分缓存读/写操作和 CPU 看到的加载/存储。加载和存储都将执行读取操作(其中存储可能使用稍微不同的风格,称为 read-for-ownership,它本质上保证核心独占获取行并且可以将其标记为 M 状态)。原因是大多数存储不会覆盖缓存行的整个宽度,因此必须将它们覆盖的部分合并到数据的最新有效副本中。因此,在这样的系统上,加载和存储都相当于读取并在缓存中分配行。分配的任何此类行都会更新 LRU。

    缓存写操作通常与从上级缓存到下级缓存的写回相关联。 LRU 机制与缓存一致性本身正交,仅在需要空间时选择哪些行必须写回(通常用于需要分配的读取行)。

    至于第二个问题 - LRU 和 MESI 是正交的。侦听另一个缓存并命中处于共享状态的行的缓存查找会将其保留在那里或使其无效(取决于访问类型)。如果该行被单独留下(用于简单的读取,然后也会在缓存 A 中分配处于共享状态的行),则缓存 B 中的行可能会被触及(其 LRU 已更新)或不被触及 - 取决于实现。它不会影响连贯性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-23
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      相关资源
      最近更新 更多