Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / 10_Большие системы.doc
Скачиваний:
64
Добавлен:
20.03.2015
Размер:
389.63 Кб
Скачать

10.6.2. Согласованность кэша

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

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

Протокол сквозной записи

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

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

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

Протокол обратной записи

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

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

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

Кэш с отслеживанием

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

Когда процессор в первый раз выполняет запись блока в свой кэш, это блок помечается как измененный (dirty) и информация о записи распространяется по сети. Модуль памяти и все остальные кэши помечают свои копии измененного блока как недостоверные. Выполнивший запись Процессор с этого момента явля­ется владельцем блока. Он может вносить в него изменения без их распростране­ния по сети. Если другой процесс выдаст запрос на чтение данного блока, модуль памяти окажется не в состоянии на него ответить, поскольку в нем нет достовер­ной копии. Однако текущий владелец блока тоже увидит этот запрос на шине и должен будет предоставить выдавшему его процессору достоверные данные. Но­вые данные, содержащиеся в отправленном владельцем широковещательном со­общении, считываются модулем памяти, после чего последний обновляет свой блок. Затем владелец блока помечает свою копию как чистую (неизмененную). Теперь во всех кэшах и в памяти находятся обновленные данные, и весь процесс при необходимости повторяется. Если измененный блок в кэше одного из про­цессоров должен быть заменен новым, выполняется операция обратной записи в модуль памяти.

Если два процессора хотят одновременно записать данные в один и тот же блок, доступ к шине предоставляется только одному из них (он становится вла­дельцем блока). В результате копия этого блока в другом процессоре помечается как недостоверная. Позднее второй процессор может повторить свой запрос. Та­кая последовательная обработка запросов на запись гарантирует корректное из­менение данных двумя процессорами в одном и том же блоке.

Описанная схема основана на способности контроллеров кэша следить за ак­тивностью шины и выполнять соответствующие действия. Поэтому кэш-память подобного типа называется кэшем с отслеживанием (snoopy-cache).

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

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

Схемы на основе каталогов

Схема согласования кэша при помощи широковещательной передачи сообщений об обновленных или недостоверных данных не годится для больших систем. Ши­роковещательные сообщения вызывают слишком большой трафик, несмотря на то что копии каждого конкретного блока обычно присутствуют всего в нескольких кэшах. Альтернативой может служить создание каталога с информацией о кэшах, хранящих копии каждого из блоков. Для реализации такого каталога можно вклю­чить в каждый блок дополнительные биты, указывающие, в каких кэшах имеются его копии. Тогда вместо широковещательной рассылки информации об изменени­ях модуль памяти может направлять процессорным модулям отдельные или груп­повые сообщения. Конечно, дополнительные биты в модулях памяти увеличивают их стоимость. Предлагались различные схемы реализации каталога, и некоторые из них были воплощены в существующих мультипроцессорных системах.

Стандарт SCI

Один из способов обеспечения согласованности кэш-памяти был стандартизиро­ван Институтом инженеров по электротехнике и электронике (Institute of Electri­cal and Electronics Engineers, IEEE). Он приведен в стандарте SCI (Scalable Cohe­rent Interface — масштабируемый когерентный интерфейс), который определяет структуру мультипроцессора, обеспечивающую быстрое распространение сигна­лов, масштабируемую архитектуру, согласованность кэша и простую реализацию. В сети обмена используются соединения «точка-точка», а коммуникационный протокол основывается на принципе «один источник запроса — один приемник». Каждый пакет высылается одним узлом-источником и адресуется единственному узлу-приемнику. Если пакет принят адресатом, последний возвращает пакет с по­ложительным подтверждением. Если пакет не принят, высылается отрицатель­ное подтверждение, вызывающее повторную отправку пакета.

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

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

Хотя стандарт SCI не определяет конкретную топологию сети обмена, наибо­лее подходящей для него является кольцевая топология. Она реализована в муль­типроцессорах Exemplar V2600 производства Hewlett-Packard и AV25000 произ­водства Data General вместе с описанным в этом разделе протоколом согласова­ния кэша.

Мультипроцессоры cc-NUMA

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

Согласованность кэша может обеспечиваться как аппаратными, так и програм­мными средствами. Но более высокая производительность достигается при ис­пользовании аппаратных средств. Поэтому в большинстве современных мульти­процессоров NUMA согласованность кэша реализуется аппаратно. Такие системы называются системами NUMA с согласованной кэш-памятью (cache coherent NU­MA, cc-NUMA).

Соседние файлы в папке Архитектура компьютеров