Какова роль L3 $ в протоколе MESI? - PullRequest
0 голосов
/ 21 января 2019

Мне бы хотелось узнать больше информации о 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 не вызвало промах чтения.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Вы правы, на вашем шаге T4 загрузка ядра № 5 будет достигнута в L3, поэтому доступ к памяти не происходит.Ядро № 5 получает еще одну копию линии в состоянии Shared.


Ваша последовательность шагов не имеет смысла для такого процессора, как Broadwell, где все ядра имеют общий доступ к встроенным контроллерам DRAM.

Кольцевая шина соединяет ядра (каждое из которых имеет свой кэш L3) и системный агент (соединения PCIe и подключение к другим ядрам) и домашний агент (контроллеры памяти).См. https://en.wikichip.org/wiki/intel/microarchitectures/broadwell_(client)#Die_Stats для блок-схемы, показывающей кольцевую шину.

Отдельные ядра напрямую не управляют «шиной памяти» или даже одной из двух или четырех шин DRAM.Контроллер памяти разрешает доступ к DRAM и имеет некоторую буферизацию для изменения порядка или объединения доступа.( Все , которое обращается к памяти, проходит через нее, включая DMA, поэтому оно может делать все, что захочет, если только оно создает видимость загрузок / хранилищ, происходящих в каком-то нормальном порядке.)

AЗапрос на загрузку не будет отправлен системному агенту до тех пор, пока он не пропадет в кеше L3.См. https://superuser.com/questions/1226197/x86-address-space-controller/1226198#1226198 для иллюстрации четырехъядерного рабочего стола (который проще и имеет только контроллер памяти, подключенный к системному агенту, что делает его точно таким же, как северный мост до того, как процессоры интегрируют контроллеры памяти).


Поскольку Broadwell использует инклюзивный кэш L3, теги L3 могут сказать, какое ядро ​​имеет копию Modified или Exclusive, если таковая имеется, даже если строка в самом L3 не является разделяемой.(то есть данные строки могут быть неверными в L3, но теги все еще отслеживают, какое ядро ​​имеет личную копию).См. Какой метод отображения кэша используется в процессоре Intel Core i7?

Это позволяет тегам L3 выступать в качестве фильтра отслеживания для сокращения широковещательных сообщений.

0 голосов
/ 21 января 2019

Похоже, вы говорите об алгоритме Early Snoop , в котором агенты кэширования срезов L3 отвечают за отправку отслеживаний.Поэтому я отвечу на вопрос в соответствии с этим алгоритмом.

Все процессоры Broadwell используют инклюзивный L3.Так что да, ядро ​​5 пропустит свои частные кэши L1 и L2, и запрос на чтение отправляется агенту кэширования среза L3, в который отображается запрошенная строка.Агент кэширования определяет, что он имеет строку и находится в состоянии S.Поскольку это запрос на чтение, агент кэширования отправит строку кэша ядру 5. Состояние строки не изменяется, и никакие отслеживания не отправляются.

...