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


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

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

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

Теоретически когерентность может быть достигнута на уровне детализации загрузки/сохранения . Однако на практике это обычно выполняется на уровне блоков кэша. [3]

Один тип данных, находящихся одновременно в разных кэш-памятях, называется когерентностью кэша или, в некоторых системах, глобальной памятью.

В многопроцессорной системе считается, что более чем один процессор кэшировал копию области памяти X. Для достижения согласованности кэша необходимы следующие условия: [4]


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