протокол когерентности кеша чипов AMD Opteron (MOESI?) - PullRequest
4 голосов
/ 27 июля 2011

Если я могу начать с примера.

Скажем, у нас есть система из 4 разъемов, где каждый разъем имеет 4 ядра, а каждый разъем имеет 2 ГБ ОЗУ. Тип памяти ccNUMA (когерентный неоднородный доступ к памяти).

Допустим, 4 запущенных процесса находятся на каждом сокете, и у всех есть некоторая область общей памяти, выделенная в ОЗУ P2, обозначенная как SHM. Это означает, что любая загрузка / сохранение в этом регионе приведет к поиску в каталоге P2, верно? Если так, то ... Когда происходит такой поиск, это эквивалентно доступу к ОЗУ с точки зрения задержки? Где этот каталог находится физически? (См. Ниже)

Более конкретный пример: Скажем, P2 выполняет ЗАГРУЗКУ на SHM, и эти данные заносятся в кэш L3 P2 с тегом '(O) wner'. Кроме того, скажем, P4 выполняет нагрузку на тот же SHM. Это заставит P4 выполнить поиск в каталоге P2, и, поскольку данные помечены как принадлежащие P2, мой вопрос:

Получает ли P4 SHM из оперативной памяти P2 или ВСЕГДА получает данные из кэша L3 P2?

Если он всегда получает данные из кэша L3, не будет ли быстрее получить данные непосредственно из оперативной памяти P2? Так как он уже должен искать в каталоге P2? И я понимаю, что каталог буквально располагается поверх оперативной памяти.

Извините, если я сильно неправильно понимаю, что здесь происходит, но я надеюсь, что кто-то может помочь прояснить это.

Кроме того, есть ли какие-либо данные о том, как быстро работает такой каталог? Что касается поиска данных, есть ли документация по средним задержкам при таких поисках? Сколько циклов в L3 чтение-попадание, чтение-промах, поиск в каталоге? и т.д.

1 Ответ

2 голосов
/ 06 декабря 2014

Это зависит от того, реализует ли процессор Opteron механизм HT Assist.

Если этого не произойдет, значит, каталог отсутствует. В вашем примере, когда P4 выдает нагрузку, в контроллер памяти P2 поступит запрос памяти. P2 ответит обратно строкой кеша, а также отправит пробное сообщение двум другим ядрам. Наконец, эти два других ядра ответят на P4 ACK, сказав, что у них нет копии строки кэша.

Если включен HT Assist (обычно для 6-ядерных и более мощных сокетов), то каждый кэш L3 содержит Snoop-фильтр (каталог), используемый для записи, какие ядра поддерживают линию. Таким образом, в вашем примере P4 не будет отправлять тестовые сообщения двум другим ядрам, так как он ищет каталог HT Assist, чтобы выяснить, что ни у кого больше нет копии строки (это упрощение, так как состояние строка будет Exclusive вместо Owned, и поиск в каталоге не потребуется).

...