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




Главная
Новости
Статьи
Ремонт
Каркасный дом
Несущие конструкции
Металлические конструкции
Прочность дорог
Дорожные материалы
Стальные конструкции
Воздухоопорные сооружения
Грунтовые основания




25.01.2021


24.01.2021


23.01.2021


21.01.2021


21.01.2021


20.01.2021


19.01.2021


19.01.2021


15.01.2021


15.01.2021





Яндекс.Метрика
         » » Когерентность кэша

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

18.12.2020

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

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

Определение

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

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

В этих условиях предполагается, что операции чтения и записи происходят мгновенно. Однако этого не происходит на практике из-за задержек памяти и других особенностей архитектуры. Изменения, сделанные процессором P 1 {displaystyle P_{1}} , могут быть не видны процессору P 2 {displaystyle P_{2}} , если чтение произошло через очень маленький промежуток времени после записи. Модель консистентности памяти определяет, когда записанное значение будет видно при чтении из другого потока.

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

  • Когерентность с использованием справочника (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)
  • MOWESI
  • Протокол MERSI
  • Протокол MESIF (Intel Nehalem)
  • Протокол Write-once
  • en:Synapse protocol
  • en:Berkeley protocol
  • en:Firefly protocol (DEC)
  • en:Dragon protocol (Xerox)
  • Протокол CXL (Compute eXpress Link) (Intel)
  • Протокол CCIX (Cache Coherent Interconnect for Accelerators) (ARM)
  • Протокол OmniXtend (Western Digital, SiFive, Linux Foundation CHIPS Alliance) – подключение ускорителей (GPU, AI/NN, FPGA), хранилищ, устройств памяти (NVDIMM) и сетевых интерфейсов к RISC-V СнК (SoC). Использует физический уровень Ethernet (Ethernet L1 фрейм).