Лучшие вопросы
Таймлайн
Чат
Перспективы
Когерентность кэша
Из Википедии, свободной энциклопедии
Remove ads
Когерентность кэша (англ. cache coherence) — свойство кэшей, означающее целостность данных, хранящихся в локальных кэшах для разделяемого ресурса. Когерентность кэшей — частный случай когерентности памяти.

Когда процессы в системе используют кэширование общих ресурсов, например, памяти, могут возникнуть проблемы с противоречивостью данных. Это особенно справедливо в отношении процессоров в многопроцессорной системе. Когеренция кэшей предназначена для управления такими конфликтами путём поддержания согласованности данных в разных кэшах.


Когерентность определяет поведение чтений и записей в одно и то же место памяти. Кэш называется когерентным, если выполняются следующие условия[1]:
- информирование о записи: изменение данных в любом из кэшей должно быть распространено на другие копии этих данных (этой линии кэша) в соседних кэшах;
- сериализация транзакций: операции чтения и записи в одну и ту же ячейку памяти должны быть видимы для всех процессоров в одинаковом порядке.
В этих условиях предполагается, что операции чтения и записи происходят мгновенно. Однако этого не происходит на практике из-за задержек памяти и других особенностей архитектуры. Изменения, сделанные процессором , могут быть не видны процессору , если чтение произошло через очень маленький промежуток времени после записи. Модель консистентности памяти определяет, когда записанное значение будет видно при чтении из другого потока.
Remove ads
Механизмы когерентности кэшей
Суммиров вкратце
Перспектива
Три основных механизма обеспечения когерентности кэшей — с использованием справочника (directory), отслеживание (snooping) и перехват (snarfing).
При использовании справочника информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (при этом физически справочник может быть распределён по узлам системы).
В механизме отслеживания каждый кэш, который содержит копию данных некоторого блока физической памяти, имеет также соответствующую копию служебной информации о его состоянии. Централизованная система записей отсутствует. Обычно кэши расположены на общей (разделяемой) шине и контроллеры всех кэшей наблюдают за шиной (просматривают её) для определения того, не содержат ли они копию соответствующего блока.
При применении перехвата, когда из какого-либо одного кэша данные переписываются в оперативную память, контроллеры остальных получают сигнал об этом изменении («перехватывают» информацию об изменении данных) и, если необходимо, изменяют соответствующие данные в своих кэшах.
Системы распределенной разделяемой памяти[англ.] используют похожие механизмы для поддержания согласованности между блоками памяти в слабосвязанных системах.
Remove ads
Протоколы поддержки когерентности
Суммиров вкратце
Перспектива
Протоколы поддержки когерентности отвечают за поддержание корректности данных между всеми кэшами в системе с распределенной разделяемой памятью. Протокол поддерживает когерентность памяти согласно выбранной модели согласованности. Большинство аппаратных протоколов в процессорах (в том числе обеспечивающих кэш-когерентный неравномерный доступ к памяти) соответствует модели последовательной согласованности, а программные протоколы в системах программной распределённой памяти чаще реализуют модели согласованности по выходу (англ. release consistency) или слабой согласованности (англ. weak consistency).
Основные модели и протоколы поддержки когерентности кэшей:
- протокол MSI
- протокол MESI[англ.] (Intel Pentium, Intel Core)
- протокол MOSI
- протокол MOESI (AMD Opteron[2])
- MOWESI[3]
- протокол MERSI
- протокол MESIF (Intel Nehalem[2])
- протокол однократной записи[англ.]
- протокол синапса[англ.]
- протокол Беркли[англ.]
- светлячковый протокол (англ. firefly protocol; DEC)
- протокол дракона (англ. dragon protocol; Xerox)
- протокол CXL (англ. compute express link; Intel)
- протокол CCIX (англ. cache coherent interconnect for accelerators; ARM)[4][5]
- протокол OmniXtend[6][7] (Western Digital — SiFive — Linux Foundation[8][9]) — подключение ускорителей (GPGPU, FPGA, нейропроцессоров), систем хранения, энергонезависимой памяти и сетевых интерфейсов к системам на кристалле с процессором RISC-V; использует физический уровень Ethernet (L1-кадр).
Remove ads
Примечания
Литература
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads