Когерентность кэша

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

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

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

Некогерентные кэши: значение одной ячейки памяти различно для двух кэшей
Когерентные кэши

Когерентность определяет поведение чтений и записей в одно и то же место памяти. Кэш называется когерентным, если выполняются следующие условия[1]:

  • информирование о записи: изменение данных в любом из кэшей должно быть распространено на другие копии этих данных (этой линии кэша) в соседних кэшах;
  • сериализация транзакций: операции чтения и записи в одну и ту же ячейку памяти должны быть видимы для всех процессоров в одинаковом порядке.

В этих условиях предполагается, что операции чтения и записи происходят мгновенно. Однако этого не происходит на практике из-за задержек памяти и других особенностей архитектуры. Изменения, сделанные процессором [math]\displaystyle{ P_1 }[/math], могут быть не видны процессору [math]\displaystyle{ P_2 }[/math], если чтение произошло через очень маленький промежуток времени после записи. Модель консистентности памяти определяет, когда записанное значение будет видно при чтении из другого потока.

Механизмы когерентности кэшей

Три основных механизма обеспечения когерентности кэшей — с использованием справочника (directory), отслеживание (snooping) и перехват (snarfing).

При использовании справочника информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (при этом физически справочник может быть распределён по узлам системы).

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

При применении перехвата, когда из какого-либо одного кэша данные переписываются в оперативную память, контроллеры остальных получают сигнал об этом изменении («перехватывают» информацию об изменении данных) и, если необходимо, изменяют соответствующие данные в своих кэшах.

Системы распределенной разделяемой памяти[англ.] используют похожие механизмы для поддержания согласованности между блоками памяти в слабосвязанных системах.

Протоколы поддержки когерентности

Протоколы поддержки когерентности отвечают за поддержание корректности данных между всеми кэшами в системе с распределенной разделяемой памятью. Протокол поддерживает когерентность памяти согласно выбранной модели согласованности. Большинство аппаратных протоколов в процессорах (в том числе обеспечивающих кэш-когерентный неравномерный доступ к памяти) соответствует модели последовательной согласованности, а программные протоколы в системах программной распределённой памяти чаще реализуют модели согласованности по выходу (англ. release consistency) или слабой согласованности (англ. weak consistency).

Основные модели и протоколы поддержки когерентности кэшей:

Примечания

  1. Yan, Solihin. Fundamentals of parallel multicore architecture (неопр.).
  2. 2,0 2,1 [1] Архивная копия от 3 июля 2010 на Wayback Machine Multi Processors, their Memory organizations and Implementations by Intel & AMD
  3. Принципы работы кэш-памяти — Индикаторы состояния строки. Дата обращения: 15 октября 2009. Архивировано 25 января 2009 года.
  4. StackPath. Дата обращения: 12 марта 2019. Архивировано 16 февраля 2019 года.
  5. How AMBA CCIX and GenZ address the needs of the datacenter — Processors blog — Processors — Arm Community. Дата обращения: 12 марта 2019. Архивировано 12 декабря 2019 года.
  6. GitHub — westerndigitalcorporation/omnixtend: An open standard Cache Coherent Fabric Interface repository. Дата обращения: 12 марта 2019. Архивировано 26 августа 2020 года.
  7. Архивированная копия (недоступная ссылка). Дата обращения: 12 марта 2019. Архивировано 22 февраля 2019 года.
  8. Google, SiFive и WD основали альянс для продвижения открытых чипов и SoC. Дата обращения: 12 марта 2019. Архивировано 14 марта 2019 года.
  9. Western Digital Reveals SweRV RISC-V Core, Cache Coherency over Ethernet Initiative. Дата обращения: 12 марта 2019. Архивировано 25 апреля 2019 года.

Литература

  • Handy, Jim. The Cache Memory Book. Academic Press, Inc., 1998. ISBN 0-12-322980-4