我读过不少关于MESI协议及其保持缓存一致性的应用的文献,但是有两个细节我不太清楚:
当使用MESI-协议来保持多个缓存同步并对高速缓存行应用LRU策略时,缓存中的行是只通过读访问还是通过写访问来保持?
另外,我是否正确地看到了这一点:缓存A中的共享行上的缓存不会在缓存B的LRU顺序中打开该行吗?
发布于 2014-09-29 16:02:32
如果您讨论的是写回类型的缓存,则需要区分缓存读/写操作和加载/存储( CPU看到它们)。加载和存储都将执行读取操作(在这里,存储可能使用一种名为“读换所有权”的稍微不同的风格,这在本质上保证核心只获得行,并且可以标记为M状态)。原因是大多数存储没有覆盖缓存行的整个宽度,因此必须将它们覆盖的部分合并到数据的最新有效副本中。因此,在这样的系统上,负载和存储都将用于读取和分配缓存中的行。所分配的任何这类行都将更新LRU。
缓存写入操作通常与从上层缓存到较低缓存的写回相关联。LRU机制与缓存一致性本身是正交的,只是选择需要空间时必须写回哪些行(通常用于需要分配的读行)。
至于第二个问题,同样,LRU和MESI是正交的.窥探另一个缓存并在共享状态下命中一行的缓存查找要么将其留在那里,要么使其失效(取决于访问的类型)。如果不让行单独使用(对于简单的读取,这将在高速缓存A中以共享状态分配行),则缓存B中的行可能被触摸(它的LRU更新了),这取决于实现。它不会影响一致性。
https://stackoverflow.com/questions/26103241
复制相似问题