MESI协议。使用缓存未命中进行写入,但缓存行复制存在于另一个CPU上。为什么需要从主内存中获取?

时间:2016-09-04 18:16:15

标签: caching cpu-cache mesi

根据此diagram,如果写入高速缓存未命中,则在另一个CPU高速缓存中复制(例如共享 / 独占状态)。步骤是:

1。侦听核心(使用缓存行复制)将状态设置为无效

2. 当前缓存存储新的主内存值。

为什么其中一个侦听核心最初不能将其缓存行值放在总线上?然后转到无效状态。在现有副本的读取未命中中使用相同的算法。谢谢。

1 个答案:

答案 0 :(得分:1)

你是完全正确的,当你已经拥有它在你旁边时从内存中取一条线是非常愚蠢的,但这个图描述了对连贯性的功能正确性的最低要求协议(即必须采取哪些措施来避免一致性错误),并且只能指示为修改后的行侦听数据,因为这是唯一正确的副本。你所描述的是一种可能的优化,有些系统的行为确实如此。

但是,请记住,现在大多数系统也使用共享缓存(L2或L3,有时甚至超过此范围),这通常是包容性的(关于所有内核中存在的所有行)。在这样的系统中,没有必要一直到存储器,因为在另一个核心中具有该线意味着它也在共享高速缓存中,并且在无效之后,请求核心可以从那里获得它。因此,您的提案仅适用于没有共享缓存的系统,或者不具有严格包容性的缓存。