Организация когерентности системы кэш-памяти в многопроцессорных системах с общей оперативной памятью.
Наибольшая эффективность использования кэш-памяти достигается при использовании обратной записи.
Проблема когерентности (согласованности) первичных модулей кэш-памяти возникает в многопроцессорных системах при параллельной обработке массивов разделяемых данных, именно при использовании обратной записи. Но при записи данных одним процессором с обратной записью, данные в оперативной памяти и, возможно, в локальных модулях других процессоров становятся устаревшими, т.е. нарушается когерентность данных кэш-памяти с данными не только в оперативной памяти, но и с данными в кэш-памяти других процессорах.
Проблема когерентности памяти для мультипроцессоров и устройств ввода/вывода имеет много аспектов. Обычно в малых мультипроцессорных системах используется аппаратный механизм, позволяющий решить эту проблему при помощи протоколов наблюдения. Существуют два класса таких протоколов:
1. Протоколы на основе справочника (directory based). Информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (физически справочник может быть распределен по узлам системы).
2. Протоколы наблюдения (snooping). Каждый кэш, который содержит копию данных некоторого блока физической памяти, имеет также соответствующую копию служебной информации о его состоянии.
Обычно кэш-память подключается к общей адресной шине, видимой контроллерами всех локальных устройств кэш-памяти. Это позволяет контроллерам локальных устройств кэш-памяти наблюдать за всеми адресами запросов по чтению и записи в оперативную память. При этом читаемые и записываемые данные ими могут быть не наблюдаемыми (например, при использовании аппаратных коммутаторов).
Имеется множество протоколов наблюдения для реализации когерентности локальных блоков кэш-памяти.
Одним из самых простых протоколов наблюдения, является следующий: при обновлении любым процессором своей локальной кэш-памяти с использованием обратной записи, локальные контроллеры кэш-памяти других процессоров обязаны отметить эти адреса, как содержащие недостоверные данные.
Это самый простой протокол наблюдения. На практике обычно используются более сложные протоколы.
Для примера рассмотрим протокол когерентности, разработанный для систем кэш-памяти для многопроцессорных систем на основе МП IA-486.
Это один из вариантов протокола MESI (Modified, Exclusive, Shared, Invalid).
Протокол был разработан для кэш-памяти c обратной записью. Одной из основных задач протокола MESI является откладывание на максимально возможный срок операции обратной записи кэшированных данных в основную память.
Варианты протоколов MESI.Протокол MESI приписывает каждой кэш-строке одно из четырех состояний, которые контролируются двумя битами MESI. Аббревиатура MESI означает Modified (модифицированная), Exclusive (эксклюзивная), Shared (разделяемая), Invalid (недействительная). Эти четыре термина определяют четыре возможных состояния кэш-строки. Состояние кэш-строки может быть изменено:
· процессором (посредством операций чтения, записи или внутренней проверки),
· внешними логическими устройствами, например, другими процессорами или контроллером кэш-памяти L2 (посредством внешней проверки).
Характеристики основных состояний строк:
Модифицированная (М): данные в кэш-строке, помеченной как модифицированная, имеются только в одной кэш-памяти системы. Строка может быть считана и записана без доступа к внешней шине.
Эксклюзивная (Е): эксклюзивная кэш-строка, как и М-строка, хранится только в одной кэш-памяти системы, однако она не подверглась изменению посредством запроса на запись. Поэтому данные в ней идентичны данным, хранящимся в основной памяти. Поскольку эксклюзивная кэш-строка хранится только в одной кэш-памяти, она может быть считана или записана без выполнения цикла внешней шины. После перезаписи кэш-строка отмечается как модифицированная.
Разделяемая (S): разделяемая кэш-строка может храниться в нескольких кэш-устройствах системы; она, как показывает название S, используется совместно несколькими кэш-устройствами. Запросы на чтение в разделяемую кэш-строку всегда выполняются через кэш-память. Запросы на запись к разделяемой кэш-строке всегда переключаются на внешнюю шину данных независимо от стратегии кэш-памяти (сквозная запись или отложенная запись); поэтому кэш-строки в других кэш-модулях объявляются недействительными. Эта операция производится в цикле внешней проверки с использованием адреса, выдаваемого при выполнении цикла шины. При этом содержимое основной памяти также обновляется. Операция записи в локальную кэш-память обновляет только ее содержимое, которое недействительным не объявляется.
Недействительная (I): кэш-строка, отмеченная как недействительная, становится логически недоступной. Это может выполняться в том случае, если кэш-строка пуста или содержит недействительный элемент, т.е. не была обновлена. Все попытки обращения к недействительной кэш-строке интерпретируются как кэш-промах. В случае запроса на чтение кэш-контроллер обычным образом инициирует заполнение кэш-строки (если строка поддается кэшированию и если ее передача в кэш не блокирована). Но запрос на запись переключается на внешнюю шину и выполняется как сквозная запись (только в формате двойного слова).
Протокол MESI имеет множество вариантов, в зависимости от особенностей реализации многопроцессорных систем и режимов работы.
Здесь рассматриваются только два варианта протоколов MESI.
Вариант 1. Вариант протокола MESI со сквозной записью без размещения.
Вариант характеризуется:
· использованием сигнала переключения режима записи – МТ (Значение МТ=0 соответствует режиму обратной (задержанной) записи, а значение МТ=1 – режиму сквозной записи без размещения;
· использованием при записи в оперативную память только форматов данных в 32 бита (двойное слово).
Дата добавления: 2021-01-26; просмотров: 392;