Мне бы хотелось узнать больше информации о MESI в intel broadwell.
Предположим, что сокет процессора имеет 6 ядер от ядра 0 до ядра 5,
каждый из них имеет свои собственные L1 $ и L2 $ и разделяет L3 $,
в общей памяти есть переменная X, а в строке кэша - x
называется XCacheL, вот подробности моего вопроса:
T1: Ядро 0 и ядро 4 и ядро 5 имеют x = 100 и XCacheL
имеет статус S hared, поскольку 3 ядра имеют копию XCacheL.
T2: ядро 0 требует модификации x, поэтому ядро 0 передает сигнал аннулирования, а ядро 4 и ядро 5 получают сигнал
, сделайте недействительной свою копию XCacheL, Core 0 измените x на 200
и статус XCacheL теперь M odified.
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: S hared и I n, подтвержденный в ядре 5, а также
L3 $ и основная память имеют новейший действительный XCacheL.
T4: ядро 5 требует чтения x, поскольку его копия XCacheL имеет значение I , проверенное в T2, но этот компонент XCacheL имеет
правильная копия в L3 $, нужно ли ядру 5 запускать промах чтения, как это делают ядра 4 ?!
Мое предположение: нет необходимости, поскольку L3 $ имеет действительный XCacheL,
так что ядро 5 может достигнуть L3 $ и получить правильный XCacheL от L3 $ до L1 $ в ядре 5, чтобы ядро 5 не вызвало промах чтения.