Когерентность кэша
Когерентность кэша (англ. cache coherence) — свойство кэшей, означающее целостность данных, хранящихся в локальных кэшах для разделяемого ресурса. Когерентность кэшей — частный случай когерентности памяти.
Когда клиенты в системе используют кэширование общих ресурсов, например, памяти, могут возникнуть проблемы с противоречивостью данных. Это особенно справедливо в отношении процессоров в многопроцессорной системе. На рисунке «Несколько кэшей для разделяемого ресурса памяти», если клиент в верхней части имеет копию блока памяти из предыдущего чтения, а нижний клиент изменяет блок памяти, копия данных в кэше верхнего клиента становится устаревшей, если не используются какие-либо уведомления об изменении или проверки изменений. Когеренция кэшей предназначена для управления такими конфликтами путём поддержания согласованности данных в разных кэшах.
Определение[править | править код]
Когерентность определяет поведение чтений и записей в одно и то же место памяти. Кэш называется когерентным, если выполняются следующие условия:[1]
- Информирование о записи
- Изменение данных в любом из кэшей должно быть распространено на другие копии этих данных (этой линии кэша) в соседних кэшах.
- Сериализация транзакций
- Операции чтения/записи в одну и ту же ячейку памяти должны быть видимы для всех процессоров в одинаковом порядке.
В этих условиях предполагается, что операции чтения и записи происходят мгновенно. Однако этого не происходит на практике из-за задержек памяти и других особенностей архитектуры. Изменения, сделанные процессором , могут быть не видны процессору , если чтение произошло через очень маленький промежуток времени после записи. Модель консистентности памяти определяет, когда записанное значение будет видно при чтении из другого потока.
Механизмы когерентности кэшей[править | править код]
- Когерентность с использованием справочника (directory). Информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (физически справочник может быть распределен по узлам системы).
- Когерентность с использованием отслеживания (snooping). Каждый кэш, который содержит копию данных некоторого блока физической памяти, имеет также соответствующую копию служебной информации о его состоянии. Централизованная система записей отсутствует. Обычно кэши расположены на общей (разделяемой) шине и контроллеры всех кэшей наблюдают за шиной (просматривают её) для определения того, не содержат ли они копию соответствующего блока.
- Перехват (snarfing). Когда из какого-либо одного кэша данные переписываются в оперативную память, контроллеры остальных получают сигнал об этом изменении ("перехватывают" информацию об изменении данных) и, если необходимо, изменяют соответствующие данные в своих кэшах.
Системы распределенной разделяемой памяти en:Distributed shared memory используют похожие механизмы для поддержания корректности между блоками памяти в слабосвязанных системах.
Протоколы поддержки когерентности[править | править код]
Протоколы поддержки когерентности отвечают за поддержание корректности данных между всеми кэшами в системе с en:distributed shared memory. Протокол поддерживает когерентность памяти согласно выбранной модели (en:consistency model). Большинство аппаратных протоколов в микропроцессорах соответствуют модели en:sequential consistency, а программные протоколы в системах software distributed shared memory чаще соответствуют моделям en:release consistency или en:weak consistency.
Модели и протоколы поддержки когерентности кэшей:
- Протокол MSI
- Протокол MESI en:Illinois protocol (intel pentium, Core)
- Протокол MOSI
- Протокол MOESI (Amd Opteron[2])
- MOWESI[3]
- Протокол MERSI
- Протокол MESIF (Intel Nehalem[2])
- Протокол Write-once
- en:Synapse protocol
- en:Berkeley protocol
- en:Firefly protocol (DEC)
- en:Dragon protocol (Xerox)
- Протокол CXL (Compute eXpress Link)[4] (Intel)
- Протокол CCIX (Cache Coherent Interconnect for Accelerators)[5][6] (ARM)
- Протокол OmniXtend[7][8] (Western Digital, SiFive, Linux Foundation CHIPS Alliance)[9][10] – подключение ускорителей (GPU, AI/NN, FPGA), хранилищ, устройств памяти (NVDIMM) и сетевых интерфейсов к RISC-V СнК (SoC). Использует физический уровень Ethernet (Ethernet L1 фрейм).
Литература[править | править код]
- Handy, Jim. The Cache Memory Book. Academic Press, Inc., 1998. ISBN 0-12-322980-4
Примечания[править | править код]
- ↑ Yan, Solihin. Fundamentals of parallel multicore architecture (неопр.).
- ↑ 1 2 [1] Архивная копия от 3 июля 2010 на Wayback Machine Multi Processors, their Memory organizations and Implementations by Intel & AMD
- ↑ Принципы работы кэш-памяти — Индикаторы состояния строки
- ↑ Compute Express Link
- ↑ StackPath
- ↑ How AMBA CCIX and GenZ address the needs of the datacenter - Processors blog - Processors - Arm Community
- ↑ GitHub - westerndigitalcorporation/omnixtend: An open standard Cache Coherent Fabric Interface repository
- ↑ Архивированная копия (недоступная ссылка). Дата обращения: 12 марта 2019. Архивировано 22 февраля 2019 года.
- ↑ Google, SiFive и WD основали альянс для продвижения открытых чипов и SoC
- ↑ Western Digital Reveals SweRV RISC-V Core, Cache Coherency over Ethernet Initiative