
ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова
.pdfБуферы записи связаны с исполнительным блоком процессора. Они по-
зволяют на некоторое время откладывать фактическую запись во внешний кэш и основную память, уступая шину для других обменов, необходимых для исполнения следующих инструкций. Буферы современных процессоров по-
зволяют также комбинировать записи в память 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