
6. Протоколы на основе справочника
Протоколы обеспечения когерентности на основе справочника характерны для сложных мультипроцессорных систем с совместно используемой памятью, где процессоры объединены многоступенчатой иерархической сетью межсоеди-нений. Сложность топологии приводит к тому, что применение протоколов на-блюдения с их механизмом широковещания становится дорогостоящим и не- эффективным.
Протоколы на основе справочника предполагают сбор и отслеживание информации о содержимом всех локальных кэшей. Такие протоколы реализуются с помощью централизованного контроллера, физически представляющего собой часть контроллера основной памяти. Сам справочник хранится в основной па-мяти. Когда контроллер локальной кэш-памяти делает запрос, контроллер спра-вочника обнаруживает такой запрос и формирует команды, необходимые для пересылки данных из основной памяти либо из другой локальной кэш-памяти, содержащей последнюю версию запрошенных данных. Центральный контроллер отвечает за обновление информации о состоянии локальных кэшей, поэтому он должен быть извещен о любом локальном действии, способном повлиять на состояние блока данных.
Справочник содержит множество записей, описывающих каждую кэши-руемую ячейку ОП, которая может быть совместно использована процессорами системы. Обращение к справочнику производится всякий раз, когда один из процессоров изменяет копию такой ячейки в своей локальной памяти. В этом случае информация из справочника нужна для того, чтобы аннулировать или обновить копии измененной ячейки в прочих локальных кэшах, где имеются такие копии.
Для каждой строки общего пользования, копия которой может быть по-мещена в кэш-память, в справочнике выделяется одна запись, хранящая указатели на копии данной строки. Кроме того, в каждой записи выделен один бит модификации (D), показывающий, является ли копия «грязной» (D=1 – dirty) или «чистой» (D=0 – clean), то есть изменялось ли содержимое строки в кэш-памяти после того, как она была туда загружена. Этот бит указывает, имеет ли право процессор производить запись в данную строку.
В настоящее время известны три способа реализации протоколов обес-печения когерентности кэш-памяти на основе справочника: полный справочник, ограниченные справочники и сцепленные справочники.
В протоколе полного справочника единый централизованный справочник поддерживает информацию обо всех кэшах. Справочник хранится в основной памяти.
В системе из N процессоров каждая запись справочника будет содержать N однобитовых указателей. Если в соответствующей локальной кэш-памяти присутствует копия данных, бит-указатель устанавливается в 1, иначе – в 0. Схема с полным справочником показана на рис. 3.12. Здесь предполагается, что копия строки имеется в каждом кэше. Каждой строке придаются два индикатора сос-тояния: бит достоверности V (Valid) и бит владения P (Private). Если информация в строке корректна, ее V-бит устанавливается в 1. Единичное значение P-бита указывает, что данному процессору предоставлено право на запись в соответст-вующую строку своей локальной кэш-памяти.
Рис. 3.12. Протокол обеспечения когерентности кэш-памяти с полным справочником
Предположим, что процессор 2 производит запись в ячейку x. В исходный момент процессор не получил еще разрешения на такую запись. Он формирует запрос к контроллеру справочника и ждет разрешения на продолжение операции. В ответ на запрос во все кэши, где есть копии строки, содержащей ячейку x, выдается сигнал аннулирования имеющихся копий. Каждый кэш, получивший этот сигнал, сбрасывает бит достоверности аннулируемой строки (V-бит) в 0 и возвращает контроллеру справочника сигнал подтверждения. После приема всех сигналов подтверждения контроллер справочника устанавливает в единицу бит модификации (D-бит) соответствующей записи справочника и посылает про-цессору 2 сигнал, разрешающий запись в ячейку x. С этого момента процессор 2 может продолжить запись в собственную копию ячейки x, а также в основную память, если в кэше реализована схема сквозной записи.
Основные проблемы
протокола полного справочника связаны
с большим количеством записей. Для
каждой ячейки в справочнике системы из
N
процес-соров требуется N+1
бит, то есть с увеличением числа
процессоров коэффициент сложности
возрастает линейно. Протокол полного
справочника допускает нали-чие в каждом
локальном кэше копий всех совместно
используемых ячеек. На практике такая
возможность не всегда востребована –
в каждый конкретный мо-мент обычно
актуальны лишь одна или несколько копий.
В протоколе
с огра-ниченными справочниками
копии отдельной строки вправе находиться
только в ограниченном числе кэшей –
одновременно может быть не более чем n
копий строки, при этом число указателей
в записях справочника уменьшается до
n
(n<N).
Чтобы однозначно идентифицировать
кэш-память, хранящую копию, указатель
вместо одного бита должен состоять из
бит, а общая длина указателей в каждой
записи справочника вместоN
бит будет равна
бит.
Когда одновременно требуется более чем n копий, контроллер принимает решение, какие из копий сохранить, а какие аннулировать, после чего произво-дятся соответствующие изменения в указателях записей справочника.
Рис. 3.13. Протокол обеспечения когерентности кэш-памяти со сцепленным справочником
Метод сцепленных справочников также применяется для сжатия объема справочника. В нем для хранения записей привлекается связный список, кото- рый может быть реализован как односвязный (однонаправленный) и двусвязный (двунаправленный).
В односвязном списке (рис. 3.13) каждая запись справочника содержит указатель на копию строки в одном из локальных кэшей. Копии одноименных строк в разных кэшах системы образуют однонаправленную цепочку. Для этого в их тегах предусмотрено специальное поле, куда заносится указатель на кэш-память, содержащую следующую копию цепочки. В тег последней копии цепочки помещается специальный символ-ограничитель. Сцепленный справочник допус-кает цепочки длиной в N, то есть поддерживает N копий ячейки. При создании еще одной копии цепочку нужно разрушить, а вместо нее сформировать новую. Например, пусть в процессоре 5 нет копии ячейки x и он обращается за ней к основной памяти. Указатель в справочнике изменяется так, чтобы указывать на кэш с номером 5, а указатель в кэше 5 – таким образом, чтобы указывать на кэш 2. Для этого контроллер основной памяти наряду с затребованными данными дол-жен передать в кэш-память 5 также и указатель на кэш-память с номером 2. Лишь после того, как будет сформирована вся структура цепочки, процессор 5 получит разрешение на доступ к ячейке x. Если процессор производит запись в ячейку, то вниз по тракту, определяемому соответствующей цепочкой указателей, посыла-ется сигнал аннулирования. Цепочка должна обновляться и при удалении копии из какой-либо кэш-памяти.
Двусвязный список поддерживает указатели как в прямом, так и в обратном направлениях. Это позволяет более эффективно вставлять в цепочку новые указа-тели или удалять из нее уже не нужные, но требует хранения большего числа указателей.
Недостатками схем на основе справочника являются:
возникновение «заторов» в централизованном контроллере;
коммуникационные издержки в трактах между контроллерами локальных кэшей и центральным контроллером.
Тем не менее они весьма эффективны в мультипроцессорных системах со сложной топологией взаимосвязей между процессорами, где невозможно реали-зовать протоколы наблюдения.
В настоящее время актуальными являются следующие протоколы обеспе-чения когерентности кэш-памяти на основе справочника:
Протокол Tang. Здесь присутствует централизованный глобальный спра-вочник, содержащий полную копию всей информации из каталогов каждого из локальных кэшей. Это приводит к проблеме узких мест, а также требует поиска соответствующих входов.
Протокол Censier. В схеме справочника Censier для указания того, какие процессоры содержат локальную копию данного блока памяти, использу-ется битовый вектор указателей. Такой вектор имеется для каждого блока памяти. Недостатками метода является его неэффективность при большом числе процессоров; кроме того, для обновления строк кэша требуется дос-туп к основной памяти
Протокол Archibald. Схема справочника Archibald – это пара замыслова-тых схем для иерархически организованных сетей процессоров.
Протокол Stenstrom. Справочник Stenstrom для каждого блока данных предусматривает шесть допустимых состояний. Этот протокол относитель-но прост и подходит для любых топологий межсоединений процессоров. Справочник хранится в основной памяти. В случае кэш-промаха при чтении происходит обращение к основной памяти, которая посылает сообщение кэш-памяти, являющейся владельцем блока, если такой находится. Получив это сообщение, кэш-владелец посылает затребованные данные, а также на-правляет сообщение всем остальным процессорам, совместно использую-щим эти данные, для того чтобы они обновили свои битовые векторы. Схема не очень эффективна при большом числе процессоров, однако в настоящее время это наиболее проработанный и широко распространенный протокол на основе справочника.