Отправляются ли запросы отслеживания на все ядра при многоузловой настройке?

#x86 #intel #cpu-architecture #cpu-cache

# #x86 #intel #cpu-архитектура #cpu-cache

Вопрос:

Я понимаю, что intel использует протокол когерентности домашнего отслеживания в QPI и, возможно, что-то более сложное / динамическое (зависящее от рабочей нагрузки) в UPI. Но если строка кэша изначально находится в состоянии I (НЕДОПУСТИМОМ), в то время как ни одно из других ядер не имеет ее в своих L1 / L2, будет ли запрос загрузки также передаваться другим локальным ядрам после запроса строки кэша от домашнего агента? Я считаю, что это так. Однако будет ли запрос на загрузку также передаваться ядрам на другом узле?

Другое возможное объяснение: если не найдено в L2, то будет запрошен контроллер памяти L3. Контроллер LLC будет знать, в каком модуле DIMM / core запрошены физические данные (с использованием каталога), и направляет запрос на соответствующее ядро через QPI / UPI. Затем запрос передается между ядрами в целевом узле только его контроллером L3. Наконец, контроллер L2 будет проинформирован о межузловой связи, поэтому L2 не будет транслироваться на другие локальные ядра. Это означает, что запросы никогда не передаются за пределы узла.

Я понимаю, что такого рода информация может быть недоступна публично, но любые идеи приветствуются.

Ответ №1:

Но если строка кэша изначально находится в состоянии I (НЕДОПУСТИМОМ), в то время как ни одно из других ядер не имеет ее в своих L1 / L2, будет ли запрос загрузки также передаваться другим локальным ядрам после запроса строки кэша от домашнего агента?

Это деталь реализации и не является частью спецификации QPI. На всех процессорах Intel, начиная с Nehalem, независимо от того, является ли кэш L3 включающим или не включающим, каждый агент кэширования в межсоединении на кристалле имеет включающий каталог для отслеживания строк кэша, которыми он владеет (т. Е. Чей физический адрес сопоставлен с ним). Таким образом, отслеживание никогда не транслируется на все локальные ядра, если в каталоге не указано, что все они должны быть отслежены. При пропуске в кэше L3 запрос отправляется домашнему агенту целевой строки кэша.

будет ли запрос на загрузку также передаваться на ядра на другом узле?

Это также деталь реализации. Это зависит от режима согласованности. Если процессор поддерживает каталог согласованности на уровне памяти и если этот каталог включен, тогда нет необходимости транслировать для каждого запроса. Некоторые процессоры поддерживают оппортунистическую широковещательную передачу (OSB). Если OSB включен, домашний агент может предположительно транслировать отслеживание, если доступен bandwdith. Это выполняется параллельно с операцией поиска в каталоге. Если результат поиска в каталоге указывает, что нет необходимости отслеживать другие узлы NUMA, домашний агент отправляет запрошенные данные обратно, не дожидаясь ответов snoop, тем самым уменьшая задержку.