Какой протокол кэш-когерентности используют Intel и AMD?

Для моей бакалаврской работы я должен проанализировать влияние False Sharing на многоядерные системы. Итак, в поисках различных типов протоколов кэш-когерентности я наткнулся в Википедии на то, что Intel разработала протокол кэш-когерентности MESIF, но нет информации о том, что Intel также использует его.

Глядя на руководство Руководство разработчика по архитектурам Intel® 64 и IA-32: Vol. 3A Я ничего не нашел о MESIF, кроме MESI-протокола. Итак, вопрос в том, не использует ли Intel свой собственный протокол кэш-когерентности. Или я ищу не в том документе.


person mbed_dev    schedule 07.08.2015    source источник
comment
Какой у Вас вопрос? Где документы? Если метавопрос. Какую информацию вы пытаетесь найти? То, что вы можете найти на MESIF с помощью Google, вероятно, все, что есть в открытом доступе.   -  person Jeff Hammond    schedule 07.08.2015


Ответы (2)


Intel использует протокол MESIF (http://www.realworldtech.com/common-system-interface/5/, https://en.wikipedia.org/wiki/MESIF_protocol ) в QuickPath, а AMD использует протокол MOESI (https://en.wikipedia.org/wiki/MOESI_protocol, http://www.m5sim.org/MOESI_hammer) с фильтром зонда или без него в HyperTransport. Но эти протоколы предназначены для межчипового взаимодействия (бульдозерный сокет AMD имеет 2 чипа в MCM). Насколько мне известно, в обоих процессорах внутричиповая когерентность осуществляется по кешу L3.

Для проверки проблем с производительностью NUMA можно использовать инструмент numagrind: http://dx.doi.org/10.1109/IPDPS.2011.100

person Bruno Coutinho    schedule 16.09.2015
comment
Существуют ли какие-либо тесты MESIF и MOESI с точки зрения задержки и пропускной способности в реальных приложениях? - person Tamas Ionut; 25.03.2016
comment
Зависит от того, что вы называете реальным приложением. В этой диссертации автор использовал Splash 2, который состоит в основном из программ для высокопроизводительных вычислений и компьютерной графики. - person Bruno Coutinho; 17.04.2016

Этот ответ относится к процессорам Intel, которые имеют инклюзивную кэш-память L3 и кольцевую шину в стиле Sandy Bridge (т. е. не Nehalem/Westmere EX), то есть все серверные процессоры после Sandy Bridge до сервера Skylake.

Широко распространено мнение, что Intel использует MESIF, но AFAICT, состояние F не существует в ядре. Строки ядра (*) будут в состояниях MESI, потому что с инклюзивным кешем L3 данные считываются непосредственно из L3, если они присутствуют более чем в 1 ядре. Специальное F-состояние не требуется. Однако он существует в ядрах сервера Skylake, который имеет неинклюзивный L3.

Ядра отправляют пакеты IDI в слайс кэша L3 Cbo (контроллер), который обрабатывает этот диапазон адресов (он чередуется на основе хеш-функции старшей части битов селектора набора кэшей адреса по модулю количества CBos). Пакет DRd отправляется ядром, когда оно запрашивает линию, не принадлежащую ядру, и получает его либо в состоянии S, если он присутствует в других ядрах, либо в состоянии E, если он отсутствует в других ядрах. Слайс кэша L3 Cbo использует фильтр отслеживания для строки, чтобы решить, следует ли вернуть ее в состоянии E (ни в каком другом ядре, но в L3/не в L3) или в состоянии S (в L3 и присутствует в другом ядре; отправить понижение к этому ядру E-›S). Создание первого запроса строки по умолчанию в состоянии E, если оно не принадлежит другим ядрам, а не в состоянии S, является оптимизацией, поскольку ядру не нужно выполнять RFO при небольшом дефекте среза кэша L3, имеющего для отправки понижений на ядра (что является просто дополнительным трафиком в фоновом режиме по сравнению с фактической задержкой, которую может вызвать выполнение RFO).

Пакет RFO отправляется в Cbo слайса LLC, когда линия вообще не принадлежит, потому что запись должна быть выполнена для нее ядром, в этом случае CBo должен отправить недействительные, если он принадлежит более чем одно ядро, или отслеживание недействительно, если оно принадлежит только одному ядру, потому что CBo не знает, изменено оно или нет, а также отслеживание домашнего агента, которому принадлежит кросс-сокет адреса, и возвращает линию на ядро, а также его обновление. Когда линия находится в состоянии S, она отправляет недействительную запись WiL в CBo слайса L3, который затем делает недействительными другие ядра и обновляет запрашивающую сторону до состояния E. Это приводит к изменению состояния S на E и отключению других ядер. Предположительно, в пакете есть флаг, указывающий, что он находится в состоянии S, чтобы исключить ненужную нагрузку.

Состояние F предназначено только для кэша L3 (агента кэширования) в контексте отслеживания нескольких сокетов между другими агентами кэширования и домашним агентом в домашнем узле, поскольку кэш HitME домашнего агента не включает L3 любого сокета. В режиме отслеживания источника без каталога только один агент кэширования (совокупный набор CBos в узле NUMA) будет отвечать на широковещательный отслеживание, если он находится в состоянии F, а не в результате нескольких ответов. В домашнем режиме снупа с кешем каталога + каталог, биты кеша каталога + каталога означают, что там, где это возможно, в любом случае будет отправлен только один запрос, но когда он не кэшируется и отправляется широковещательная рассылка, состояние F помогает, так как там не являются множественными ответами. Поскольку кеш может в одностороннем порядке отбросить (аннулировать) строку в состоянии S или F, возможно, что ни у одного кеша нет копии в состоянии F, даже если копии в состоянии S существуют. В этом случае запрос строки выполняется (менее эффективно, но все же правильно) из основной памяти (поскольку ни один агент кэширования не ответит, когда он находится в состоянии S).

«Домашний агент домашнего узла» — это домашний агент, которому перемежается декодированный SAD когерентный адрес DRAM (т. е. домашний агент, которому принадлежит этот адрес).

Коды операций IDI (которые используются для обмена данными между ядром и неосновными ядрами) в руководстве по мониторингу производительности для Xeon E5 v2 за 2014 год не показывают никаких состояний F (показывают только коды операций QPI, которые говорят об агентах кэширования и домашних агентах и ​​предназначены для неосновных). -›uncore Communication), но в руководстве по мониторингу производительности за 2017 год показаны коды операций IDI, относящиеся к F-состояниям, например, WbEFtoE и WbEFtoI, и говорящие о «ядрах». Поиск документа по skylake показывает результат для сервера skylake, который содержит неинклюзивный L3, что говорит само за себя.

Поскольку L2 не является инклюзивным в последних процессорах Intel для настольных ПК, это может означать, что L1i и L1d реализуют свои собственные F-состояния, которые могут использоваться внутри L2 между двумя поддерживаемыми им кэшами (L1i, L1d которые совместно используются обоими гиперпотоками в ядре) для промахов кеша, хотя это не обязательно, если кеши L1d и L1i могут запрашивать/аннулировать друг друга внутренне, что кажется быстрее, чем переход к L2, а затем L2 должен запрашивать кеш запрос не исходит, и есть только один другой кеш для запроса, хотя я на самом деле не думаю, что L1i и L1d связаны, за исключением любой существующей реализации SMC (самоизменяющийся код), подробности которой я не знаю из. Кэш L2, конечно, не нуждается в F-состояниях.

person Lewis Kelsey    schedule 10.05.2020