Этот ответ относится к процессорам 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