我想在 intel Broadwell 中了解 MESI 的更多细节。
假设一个 cpu socket 有 6 个核心 core 0 到 core 5 ,每个都有自己的 L1$ 和 L2$ 并共享 L3$ ,在共享内存中有一个 var X , x 位于缓存行中,称为 XCacheL ,以下是我的问题的详细信息:
T1:核心 0 和核心 4 和核心 5 的 x = 100 并且 XCacheL处于共享状态,因为 3 个核心具有 XCacheL 的副本。
T2:核心0需要修改x,所以核心0广播无效信号,核心4和核心5接收到信号,使他们的XCacheL副本无效,核心0修改x为200,现在XCacheL状态被修改。
T3:核心 4 需要读取 x,但其 XCacheL 副本在 T2 中无效,因此它会触发读取未命中,将发生以下情况:
● Processor makes bus request to memory
● Snooping cache puts copy value on the bus
● Memory access is abandoned
● Local processor caches value
● Local copy tagged S
● Source (M) value copied back to memory
● Source value M -> S
所以在 T3 之后,XCacheL 是核心 0 和核心 4 状态:共享,并且I在核心 5 中无效,并且 L3$ 和主内存具有最新的有效 XCacheL。
T4:核心 5 需要读取 x ,因为它的 XCacheL 副本在T2 中无效,但是这个 monent XCacheL 在 L3$ 中有正确的副本,核心 5 是否需要像核心 4 一样触发读取未命中?!
我的猜测是:不需要,因为 L3$ 具有有效的 XCacheL,所以核心 5 可以达到 L3$ 并在核心 5 中从 L3$ 到 L1$ 获得正确的 XCacheL,因此核心 5 不会触发读取未命中。