Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова

.pdf
Скачиваний:
36
Добавлен:
31.05.2015
Размер:
4.4 Mб
Скачать

Буферы записи связаны с исполнительным блоком процессора. Они по-

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

зволяют также комбинировать записи в память WC (память с комбинируемой записью, от англ.Write Combining). При этом записи в соседние ячейки памя-

ти, порождаемые несколькими исполненными инструкциями, физически вы-

полняются за один цикл обращения к памяти. Запись буферизуется во всех режимах процессора. Буферизация записи в порты ввода-вывода не произво-

дится. Все механизмы кэширования в основном прозрачны для прикладных программ и после разрешения кэширования пропускают через себя потоки инструкций и данных без требований явного программного управления. Од-

нако значение особенностей механизмов кэширования помогает в оптимиза-

ции кода. Так, например, можно определить оптимальные размеры одновре-

менно обрабатываемых структур данных, при котором кэш не «буксует», т.

е. нет кэш-трешинга.

Кэш-память процессоров строится с учетом возможностей обращений к памяти со стороны внешних абонентов – других процессоров или контролле-

ров шины. Процессоры имеют механизмы внешнего слежения за состоянием собственного кэша с соответствующими аппаратными интерфейсами. Для поддержания согласованности данных кэша и основной памяти процессор отрабатывает циклы слежения (Snoop Cycle, или Inquire Cycle), иницииро-

ванные внешней (относительно него) системой. В таких циклах, происходя-

щих при обращении к памяти со стороны внешнего абонента, процессор оп-

ределяет присутствие затребованной области в своем собственном кэше. Ес-

ли область отображается в кэше, то действия процессора зависят от состоя-

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

241

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

венно в обращающийся процессор, что экономит время. Выгрузка этой стро-

ки в основную память будет произведена позже, согласно алгоритму обрат-

ной записи.

13.9. Обеспечение согласованности кэш-памяти микропроцессо-

ров в мультипроцессорных системах

Рассмотрим особенности работы кэш-памяти в том случае, когда одновременно несколько микропроцессоров используют общую оператив-

ную память (рис. 100). В этом случае могут возникнуть проблемы, связанные с кэшированием информации из оперативной памяти в кэш-память микро-

процессоров.

Рис. 100. Структура мультимикропроцессорной системы с общей опера-

тивной памятью

Предположим, что микропроцессор А (МП А) считал некоторую стро-

ку данных из ОЗУ в свою внутреннюю кэш-память и изменил данные в этой строке в процессе работы.

Мы отмечали, что существует два основных механизма обновления опе-

ративной памяти:

242

сквозная запись, которая подразумевает, что как только изменилась информация во внутренней кэш-памяти, эта же ин-

формация копируется в то же место оперативной памяти, и

обратная запись, при которой микропроцессор после из-

менения информации во внутреннем кэше отражает это измене-

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

тивную. То есть существуют определенные моменты времени,

когда информация, предположим, по адресу 2000 имеет разные значения: микропроцессор ее обновил, а в оперативной памяти осталось старое значение. Если в этот момент другой микропро-

цессор (МП В), использующий ту же оперативную память, обра-

тится по адресу 2000 в ОЗУ, то он прочитает оттуда старую ин-

формацию, которая к этому времени уже не актуальна.

Для обеспечения согласованности (когерентности) памяти в мультипро-

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

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

Существует два класса протоколов когерентности: 1) протоколы на ос-

нове справочника (directory based): информация о состоянии блока физиче-

ской памяти содержится только в одном месте, называемом справочником

(физически справочник может быть распределен по узлам системы); 2) про-

токолы наблюдения (snooping): каждый кэш, который содержит копию дан-

ных некоторого блока физической памяти, имеет также соответствующую копию служебной информации о его состоянии; централизованная система записей отсутствует; обычно кэши расположены на общей шине, и контрол-

леры всех кэшей наблюдают за шиной (просматривают ее), чтобы опреде-

243

лять, какие обращения по адресам в пределах этого блока происходят со сто-

роны других микропроцессоров.

В мультипроцессорных системах с общей памятью наибольшей попу-

лярностью пользуются протоколы наблюдения, поскольку для опроса со-

стояния кэшей они могут использовать уже существующее физическое со-

единение – шину памяти.

Для поддержания когерентности применяется два основных метода.

Один из методов заключается в том, чтобы гарантировать, что процессор должен получить исключительные права доступа к элементу данных перед выполнением записи в этот элемент данных. Этот тип протоколов называется протоколом записи с аннулированием (write invalidate protocol), поскольку при выполнении записи он аннулирует другие копии. Это наиболее часто ис-

пользуемый протокол как в схемах на основе справочников, так и в схемах наблюдения. Исключительное право доступа гарантирует, что во время вы-

полнения записи не существует никаких других копий элемента данных, в

которые можно писать или из которых можно читать: все другие кэширован-

ные копии элемента данных аннулированы.

Альтернативой протоколу записи с аннулированием является обновле-

ние всех копий элемента данных в случае записи в этот элемент данных. Этот тип протокола называется протоколом записи с обновлением (write update protocol), или протоколом записи с трансляцией (write broadcast protocol).

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

процессорных системах с небольшим числом процессоров как схемы записи с аннулированием, так и схемы записи с обновлением данных, является ис-

пользование для выполнения этих операций механизма шины. Для выполне-

ния операции обновления или аннулирования процессор просто захватывает шину и транслирует по ней адрес, по которому должно производиться обнов-

244

ление или аннулирование данных. Все процессоры непрерывно наблюдают за шиной, контролируя появляющиеся на ней адреса.

Процессоры проверяют, не находится ли в их кэш-памяти адрес, поя-

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

ла.

Рассмотрим один из наиболее распространенных протоколов, обеспечи-

вающих согласованную работу кэш-памяти нескольких микропроцессоров и основной памяти в мультимикропроцессорных системах, – протокол MESI,

который относится к группе протоколов наблюдения с аннулированием.

Будем знакомиться с ним на примере двухпроцессорной системы, состоящей из микропроцессоров A и B. Этот протокол использует 4 признака состояния строки кэш-памяти микропроцессора, по первым буквам которых и называ-

ется протокол:

измененное состояние (Modified): информация, хранимая в кэш-памяти микропроцессора А, достоверна только в этом кэше; она отсутствует в оперативной памяти и в кэш-памяти других микропро-

цессоров;

исключительная копия (Exclusive): информация, содержащаяся

вкэше А, содержится еще только в оперативной памяти;

разделяемая информация (Shared): информация, содержащаяся

вкэше А, содержится в кэш-памяти по крайней мере еще одного МП, а

также в оперативной памяти;

недостоверная информация (Invalid): в строке кэш-памяти на-

ходится недостоверная информация.

Таким образом, состояние признаков протокола MESI отражает сле-

дующие состояния (по отношению к МП А) строки кэш-памяти (табл. 6):

245

Таблица 6

Формирование признаков состояния протокола MESI

Состояние признака про-

Состояние строки памяти

 

токола

 

 

 

Кэш А

Кэш B

ОЗУ

 

 

 

 

 

Modified

Д

НД

НД

 

 

 

 

Shared

Д

Д

Д

 

 

 

 

Exclusive

Д

НД

Д

 

 

 

 

Invalid

НД

Х

Х

 

 

 

 

При работе микропроцессора А с точки зрения обеспечения когерентно-

сти памяти возможны следующие ситуации:

RH (Read Hit) – кэш-попадание при чтении;

WH (Write Hit) – кэш-попадание при записи;

RME (Read Miss Exclusive) – кэш-промах при чтении;

RMS (Read Miss Shared) – кэш-промах при чтении, но соответ-

ствующий блок есть в кэш-памяти другого микропроцессора;

WM (Write Miss) – кэш-промах при записи;

SHR (Snoop Hit Read) – обнаружение копии блока при прослу-

шивании операции чтения другого кэша;

SHW (Snoop Hit Write) – обнаружение копии блока при про-

слушивании операции записи другого кэша.

Наибольший интерес здесь представляют две последние позиции. Со-

временные микропроцессоры имеют двунаправленную шину адреса.

Выдавая информацию на эту шину, микропроцессор адресует ячейки оперативной памяти или устройства ввода-вывода. В силу того, что в рас-

сматриваемой мультипроцессорной системе микропроцессоры связаны об-

щей шиной, в том числе и шиной адреса, принимая информацию по адрес-

246

ным линиям, микропроцессор определяет, было ли обращение по адресам,

содержащимся в его кэш-памяти, со стороны других микропроцессоров. При обнаружении такого обращения меняется состояние строки кэш-памяти мик-

ропроцессора.

Изменения признака состояния блока кэш-памяти МП в зависимости от различных ситуаций в его работе и работе мультимикропроцессорной систе-

мы в целом представлены на рис. 101.

Рис. 101. MESI-диаграмма обес-

печения когерентности кэш-памяти

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

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

При этом состояние строки в кэш-памяти рассматриваемого микропро-

цессора изменится с модифицированного на разделяемое (Shared).

Если строка кэш-памяти находилась в состоянии Invalid, т. е. информа-

ция в ней была недостоверной, то по отношению к этой строке следует рас-

247

сматривать только ситуации, связанные с кэш-промахами. Так, если про-

изошел кэш-промах при выполнении операции записи, то необходимая стро-

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

В пространстве памяти компьютера имеются области, для которых кэ-

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

бы из кэша не вытеснялись более полезные фрагменты.

В современных процессорах в связи с их микроархитектурными особен-

ностями («спекулятивное исполнение» и «выполнение с изменением поряд-

ка» и проч.) обращения к памяти могут производиться с различными метода-

ми повышения эффективности. По возможности кэширования память можно классифицировать следующим образом:

Строго некэшируемая память UC (Uncacheable). Все об-

ращения процессора по чтению и записи выполняются строго в порядке, предписанном программным кодом, и выходят на сис-

темную шину. Никакие спекулятивные чтения и предваритель-

ные выборки не используются. Такой тип требуется для ввода-

вывода, отображенного на память. Работа процессора в таком режиме с обычным ОЗУ приведет к значительному снижению производительности.

Память с комбинируемой записью WC (Write Combining).

Некэшируемая память, когерентность памяти не поддерживается протоколом шины. Спекулятивное чтение допустимо, записи мо-

гут комбинироваться и откладываться до любого события, вызы-

248

вающего сериализацию (инструкция CPUID, обращение к некэ-

шируемой памяти, прерывание и т. д.). Такой тип применим, на-

пример, для видеопамяти графического адаптера (порядок запи-

сей не важен).

Память со сквозной записью WT (Write-through). Кэши-

руемая память, все операции записи отражаются в кэше и выхо-

дят на системную шину. Чтение по возможности выполняется из кэша, кэш-промахи вызывают заполнение строк кэша. Спекуля-

тивное чтение и комбинирование записей разрешено. Данный тип применим, например, для буферов кадров, а также для памяти, к

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

Память с обратной записью WB (Write-back). Кэшируемая память, все операции чтения и записи по возможности выполня-

ются только с кэш-памятью. Запись на системную шину выходит только при необходимости освобождения строк или по требова-

нию от других абонентов шины, что уменьшает необязательный трафик шины. Спекулятивное чтение и комбинирование записи разрешено. Этот тип самый производительный, но требует под-

держки протокола обеспечения когерентности от всех абонентов шины, обращающихся к данной области памяти.

Память с защищенной записью WP (Write protected). Кэ-

шируемая память, чтения по возможности выполняются из кэша,

промахи вызывают заполнение строк. Записи выходят на систем-

ную шину и вызывают аннулирование строк в кэшах всех ос-

тальных абонентов шины (процессоров).

Базовые методы (сквозная и обратная запись или отмена кэширования)

управляются атрибутами PCD (Page Cache Disable – запрет кэширования страницы) и PWT (Page Write Through – сквозная запись для страницы) сис-

249

темы управления страничной переадресации, более совершенные методы программируются только через регистры MTRR или PAT, если таковые имеются в исходном процессоре (здесь многое зависит от конкретной модели процессора).

13.10. Управление кэшированием

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

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

чиная с гиперконвейерных архитектур процессоров, имеются также регистры

MTTR, определяющие возможности кэширования на уровне областей физи-

ческой памяти. Эти механизмы имеют различные области воздействия. Если разные механизмы определяют возможности кэширования конкретной об-

ласти памяти по-разному, будет реализовано самое жесткое из ограничений:

запрет кэширования имеет приоритет над разрешением, а политика WT от-

меняет политику WB.

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

товерными и очистка всей кэш-памяти.

Для программного управления кэшированием имеются инструкции ан-

нулирования (инвалидации) INVD и WBINVD (инвалидация обратной запи-

си, от англ. Write-back invalidation). Инструкция INVD аннулирует строки внутреннего кэша без выгрузки модифицированных строк, поэтому ее неос-

торожное использование при включенной политике обратной записи может

250