Попов И.И., Матвеев А.А., Максимов Н.В. Архитектура электронно-вычислительных машин и систем (2004) (1186255), страница 36
Текст из файла (страница 36)
К шинеподключены также внешние устройства. Все действия с использованиемтранзакций шины, производимые ВМ и внешними устройствами, скопиями строк, как в каждой кэш-памяти, так и в основной памяти,доступны для отслеживания всем ВМ. Это является следствием того, чтов каждый момент на шине передает только один, а воспринимают все,подключенные к шине абоненты.199Рис.
24. Многопроцессорная ВС с раздельными кэшами и общейпамятьюПо сравнению с многопроцессорная ВС с общим кэшам и общейпамятью в данной системе возникает наряду с проблемой пропускнойспособности шины еще и проблема когерентности кэш-памяти.В такой вычислительной системе кэши могут содержать какразделяемые, так и частные данные. Частные данные - это данные,которые используются одним процессором, в то время как разделяемыеданные используются многими процессорами, по существу обеспечиваяобмен между ними.
Когда кэшируется элемент частных данных, ихзначение переносится в кэш для сокращения среднего времени доступа,а также требуемой полосы пропускания. Поскольку никакой другойпроцессор не использует эти данные, этот процесс идентичен процессудля однопроцессорной машины с кэш-памятью. Если кэшируютсяразделяемые данные, то разделяемое значение реплицируется и можетсодержаться в нескольких кэшах. Кроме сокращения задержки доступа итребуемой полосы пропускания такая репликация данных способствуеттакже общему сокращению количества обменов.
Т.о. кэшированиеразделяемых данных вызывает проблему когерентности кэш-памяти.Когерентность памяти многопроцессорной ВС с раздельнымикэшами и общей памятьюОбычно в малых мультипроцессорах используется аппаратныймеханизм, называемый протоколом, позволяющий решить эту проблему.Такие протоколы называются протоколами когерентности кэш-памяти.Существуют два класса таких протоколов:Протоколы на основе справочника (directory based).
Информация осостоянии блока физической памяти содержится только в одном месте,называемом справочником (физически справочник может бытьраспределен по узлам системы).Протоколы наблюдения (snooping). Каждый кэш, которыйсодержит копию данных некоторого блока физической памяти, имееттакже соответствующую копию служебной информации о его200состоянии.
Централизованная система записей отсутствует. Обычнокэши расположены на общей (разделяемой) шине и контроллеры всехкэшей наблюдают за шиной (просматривают ее) для определения того,не содержат ли они копию соответствующего блока.Вмультипроцессорныхсистемах,использующихмикропроцессоры с кэш-памятью, подсоединенные к централизованнойобщей памяти, протоколы наблюдения приобрели популярность,поскольку для опроса состояния кэшей они могут использовать заранеесуществующее физическое соединение - шину памяти.Имеются два подхода поддержания когерентности.
Один изметодов заключается в том, чтобы гарантировать, что процессор долженполучить исключительные права доступа к элементу данных передвыполнением записи в этот элемент данных. Этот тип протоколовназывается протоколом записи с аннулированием (write ivalidateprotocol), поскольку при выполнении записи он аннулирует другиекопии. Это наиболее часто используемый протокол как в схемах наоснове справочников, так и в схемах наблюдения. Исключительноеправо доступа гарантирует, что во время выполнения записи несуществует никаких других копий элемента данных, в которые можнописать или из которых можно читать: все другие кэшированные копииэлемента данных аннулированы.
Чтобы увидеть, как такой протоколобеспечивает когерентность, рассмотрим операцию записи, вслед закоторой следует операция чтения другим процессором. Посколькузапись требует исключительного права доступа, любая копия,поддерживаемая читающим процессором должна быть аннулирована (всоответствии с названием протокола). Таким образом, когда возникаетоперация чтения, произойдет промах кэш-памяти, который вынуждаетвыполнить выборку новой копии данных. Для выполнения операциизаписи можно потребовать, чтобы процессор имел достоверную копиюданных в своей кэш-памяти прежде, чем выполнять в нее запись. Такимобразом, если оба процессора попытаются записать в один и тот жеэлемент данных одновременно, один из них выиграет состязание увторого и вызывает аннулирование его копии. Другой процессор длязавершения своей операции записи должен сначала получить новуюкопию данных, которая теперь уже должна содержать обновленноезначение.Представителем данного протокола является алгоритм MESI.Альтернативой протоколу записи с аннулированием являетсяобновление всех копий элемента данных в случае записи в этот элементданных.
Этот тип протокола называется протоколом записи собновлением (write update protocol) или протоколом записи странсляцией (write broadcast protocol). Обычно в этом протоколе дляснижения требований к полосе пропускания полезно отслеживать,является ли слово в кэш-памяти разделяемым объектом, или нет, аименно, содержится ли оно в других кэшах.
Если нет, то нет никакой201необходимости обновлять другой кэш или транслировать в негообновленные данные.Разница в производительности между протоколами записи собновлениемисаннулированиемопределяетсятремяхарактеристиками:Несколько последовательных операций записи в одно и то жеслово, не перемежающихся операциями чтения, требуют несколькихопераций трансляции при использовании протокола записи собновлением, но только одной начальной операции аннулирования прииспользовании протокола записи с аннулированием.При наличии многословных блоков в кэш-памяти каждое слово,записываемое в блок кэша, требует трансляции при использованиипротокола записи с обновлением, в то время как только первая запись влюбое слово блока нуждается в генерации операции аннулирования прииспользовании протокола записи с аннулированием.
Протокол записи саннулированием работает на уровне блоков кэш-памяти, в то время какпротокол записи с обновлением должен работать на уровне отдельныхслов (или байтов, если выполняется запись байта).Задержка между записью слова в одном процессоре и чтениемзаписанного значения другим процессором обычно меньше прииспользовании схемы записи с обновлением, поскольку записанныеданные немедленно транслируются в процессор, выполняющий чтение(предполагается, что этот процессор имеет копию данных). Длясравнения, при использовании протокола записи с аннулированием впроцессоре, выполняющим чтение, сначала произойдет аннулированиеего копии, затем будет производиться чтение данных и его приостановкадо тех пор, пока обновленная копия блока не станет доступной и невернется в процессор.Эти две схемы во многом похожи на схемы работы кэш-памяти сосквозной записью и с записью с обратным копированием.
Также как исхема задержанной записи с обратным копированием требует меньшейполосы пропускания памяти, так как она использует преимуществаопераций над целым блоком, протокол записи с аннулированием обычнотребует менее тяжелого трафика, чем протокол записи с обновлением,поскольку несколько записей в один и тот же блок кэш-памяти нетребуют трансляции каждой записи.
При сквозной записи памятьобновляется почти мгновенно после записи (возможно с некоторойзадержкой в буфере записи). Подобным образом при использованиипротокола записи с обновлением другие копии обновляются так быстро,насколькоэтовозможно.Наиболееважноеотличиевпроизводительности протоколов записи с аннулированием и собновлением связано с характеристиками прикладных программ и свыбором размера блока.202Алгоритм поддержания когерентности памяти MESIДля обеспечения когерентности памяти модели ВС с раздельнымикэшами и общей памятью можно использовать алгоритм MESI(Modified, Exclusive, Shared, Invalid). Алгоритм MESI представляетсобой организацию когерентности кэш-памяти с обратной записью.
Этоталгоритм предотвращает лишние передачи данных между кэш-памятьюи основной памятью. Так, если данные в кэш-памяти не изменялись, тонезачем их пересылать.Каждая строка кэш-памяти ВМ может находиться в одном изследующих состояний:М - строка модифицирована (доступна по чтению и записи тольков этом ВМ, потому что модифицирована командой записи по сравнениюсо строкой основной памяти);Е - строка монопольно копированная (доступна по чтению изаписи в этом ВМ и в основной памяти);S - строка множественно копированная или разделяемая (доступнапо чтению и записи в этом ВМ, в основной памяти и в кэш-памятяхдругих ВМ, в которых содержится ее копия);I - строка, невозможная к использованию (строка не доступна нипо чтению, ни по записи).Состояние строки используется, во-первых, для определенияпроцессором ВМ возможности локального, без выхода на шину, доступак данным в кэш-памяти, а, во-вторых, - для управления механизмомкогерентности.Для управления режимом работы механизма поддержкикогерентности используется бит WT, состояние 1 которого задает режимсквозной (write-through) записи, а состояние 0 - режим обратной (writeback) записи в кэш-память.При исполнении команд чтения и записи состояние строки кэшпамяти, к которой выполняется доступ, определяется табл.
3.Таблица 3Переходы состояний кэш памятиИсх.СостояниестрокиIСостояние после чтенияСостояние после записиСквозная запись в основную память;ISЕсли WT=1, тогда Е, иначе S;Обновление строки путем еечтения из основной памятиSЕМЕМ203Сквозная запись в основную память;Если WT=1 тогда Е, иначе SММПромах чтения в кэш-памяти заставляет вызвать строку изосновной памяти и сопоставить ей состояние Е или S. Кэш-памятьзаполняется только при промахах чтения.