MESI协议和LRU策略

时间:2014-09-29 15:17:25

标签: multithreading caching multiprocessing cpu-cache mesi

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

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

另外,我是否看到了这一点:缓存A中共享线路上的缓存命中不会在缓存B的LRU顺序中显示该行?

1 个答案:

答案 0 :(得分:0)

如果您正在讨论写回缓存类型,则需要在CPU看到它们时区分缓存读/写操作和加载/存储。加载和存储都将执行读取操作(其中存储可以使用称为读取所有权的稍微不同的风格,这实质上保证了核心获得专线并且可以标记为M状态)。原因是大多数商店没有覆盖高速缓存行的整个宽度,因此必须将它们覆盖的部分合并到最新的有效数据副本中。因此,在这样的系统上,加载和存储都将进行读取并在高速缓存中分配行。分配的任何此类行都将更新LRU。

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

关于第二个问题 - 再次,LRU和MESI是正交的。监听另一个缓存并在共享状态下命中一行的缓存查找会将其保留在那里或使其无效(取决于访问类型)。如果该行保持不变(对于简单读取,然后将在缓存A中的共享状态中分配线路),可以触摸缓存B中的线路(其LRU已更新)或不根据实现。它不会影响一致性。