Ответ 1
Это возможно, потому что кеш L3 не может содержать одно и то же физическое область памяти как страница процесса 1 и как страница процесса 2 при этом время.
А что? Если оба процесса имеют отображение страницы, они могут как попадать в кеш для той же линии физической памяти.
Эта часть преимуществ многоядерных проектов Intel с использованием больших инкапсулированных кэшей L3. Когерентность требует только проверки тегов L3, чтобы найти строки кэша в состоянии E или M в другом кэше L2 или L1 ядра.
Получение данных между двумя ядрами требует только обратной записи на L3. Я забываю, где это задокументировано. Возможно http://agner.org/optimize/. Процессоры до Nehalem, у которых были отдельные кэши для каждого ядра, по-моему, должны были сливаться с DRAM для согласованности. IDK, если данные могут быть отправлены непосредственно из кеша в кеш с тем же протоколом, который используется для обнаружения проблем согласованности.
Такая же строка кэша, сопоставленная с разными виртуальными адресами, всегда будет находиться в одном наборе кеша L1. См. Обсуждение в комментариях: кеши L2/L3 являются физически индексом, а также физически помечены, поэтому сглаживание никогда не является проблемой. (Только L1 может получить выигрыш в скорости от виртуальной индексации. Пропуски кеша L1 не обнаруживаются до тех пор, пока перевод адреса не будет завершен, поэтому физический адрес будет готов вовремя для проверки кэшей более высокого уровня.)
Также обратите внимание, что в комментариях в комментариях неверно упоминается, что Skylake снижает ассоциативность кеша L1. Фактически, это кеш Skylake L2, который менее ассоциативен, чем раньше (4-х позиционный, с 8-way в SnB/Haswell/Broadwell). L1 все равно 32kiB 8-way, как всегда: максимальный размер для этой ассоциативности, который сохраняет биты адреса выбора страницы из индекса. Итак, нет никакой тайны.
Также см. еще один ответ на этот вопрос о потоках HT в одном и том же ядре, обменивающемся через L1. Я сказал больше о способах кеширования и наборы там. (И благодаря Voo, я просто исправил это, чтобы сказать, что индекс кэша выбирает набор, а не способ.: P)