Мультипроцессоры NUMA
NUMA-машины обладают тремя ключевыми характеристиками, которые присущи им всем и которые в совокупности отличают их от других мультипроцессоров:
1. В области видимости всех центральных процессоров находится единое адресное пространство.
2. Доступ к удаленной памяти осуществляется с помощью команд LOAD и STORE.
3. Доступ к удаленной памяти осуществляется медленнее, чем доступ к локальной.
Когда время доступа к удаленной памяти не скрыто (по причине отсутствия кэширования), система называется NC-NUMA (No Cache-coherent NUMA — NUMA без согласованного кэширования). При наличии согласованной кэш-памяти система называется CC-NUMA (Cache-Coherent NUMA — NUMA с согласованным кэшированием).
В настоящее время самым популярным подходом при создании больших мультипроцессоров CC-NUMA является мультипроцессор на основе каталогов (directory-based multiprocessor). Идея заключается в ведении базы данных, сообщающей, где находится каждая кэш-строка и каково ее состояние. При обращении к кэш-строке запрашивается база данных, чтобы определить, где она находится и какая информация в ней содержится — неизмененная или измененная. Поскольку эта база данных должна запрашиваться при выполнении каждой команды, обращающейся к памяти, она должна поддерживаться исключительно быстродействующей специализированной аппаратурой, откликающейся за доли такта шины.
Чтобы конкретизировать идею мультипроцессора, основанного на каталогах, рассмотрим простой (гипотетический) пример — систему, состоящую из 256 узлов, каждый узел которой состоит из одного центрального процессора и 16 Мбайт оперативной памяти, с которой этот процессор связан по локальной шине. Общий объем памяти составляет 232 байт, которые поделены на 226 кэш-строк по 64 байт каждая. Память статически распределена по узлам, где диапазон адресов 0-16 M выделен узлу 0, 16 M-32 M — узлу 1 и т. д. Узлы связаны схемой соединений, показанной на рис. 8.6, а. Каждый узел содержит также записи каталога для 218 64-байтовых кэш-строк, включающих в себя 224 байт памяти. Предположим на время, что строка может храниться не более чем в одном кэше.
Чтобы понять, как работает каталог, проследим за командой LOAD из центрального процессора 20, которая ссылается на кэш-строку.
![]() |
Рис. 8.6. а — мультипроцессор на основе каталогов, содержащий 256 узлов; б — разделение 32-разрядного адреса памяти на поля; в — каталог в узле 36
осуществляет преобразование команды в физический адрес, например 0x24000108. MMU разбивает этот адрес на три части, показанные на рис. 8.6, б. В десятичной форме эти три части представляют собой узел 36, строку 4 и смещение 8. Блок управления памятью видит, что слово памяти, на которое делается ссылка, из узла 36, а не из узла 20, поэтому он отправляет сообщение с запросом через схему соединений к узлу 36, выясняя, находится ли эта строка 4 в кэше, и если да, то где именно.
Когда запрос по схеме соединений поступает к узлу 36, он направляется к аппаратуре каталога. Эта аппаратура обращается по индексу в свою таблицу, состоящую из 218 записей, по одной для каждой своей кэш-строки, и извлекает запись 4. На рис. 8.6, в показано, что строки в кэше нет, поэтому аппаратура извлекает строку 4 из локальной оперативной памяти, отправляет ее обратно узлу 20 и обновляет запись каталога 4, показывая, что теперь строка находится в кэше на узле 20.
Рассмотрим второй запрос, на этот раз касающийся строки 2 узла 36. На рис. 8.6, в показано, что эта строка присутствует в кэше на узле 82. В этот момент аппаратура может обновить запись каталога, чтобы она сообщала, что строка теперь находится на узле 20, а затем отправить сообщение узлу 82, предписывая ему передать строку узлу 20 и аннулировать свой кэш. Заметьте, что даже так называемый мультипроцессор с общей памятью не обходится без передачи на внутреннем уровне большого количества сообщений.
В качестве небольшого отступления подсчитаем, сколько памяти уходит на каталоги. У каждого узла имеется 16 Мбайт оперативной памяти и 218 записей длиной 9 бит для
ведения учета этой памяти. Итак, на каталог уходит около 9 • 218 бит на 16 Мбайт, или около 1,76 %, что вполне приемлемо (если не обращать внимания на то, что это должна быть высокоскоростная память, что, разумеется, повышает ее стоимость). Даже если использовать кэш-строки длиной 32 байта, издержки составят только 4 %. При кэш- строках длиной 128 байт они будут меньше 1 %.
Несомненная ограниченность такой схемы состоит в том, что строка может быть кэширована только в одном узле. Чтобы кэшировать строки на нескольких узлах, нужны какие-то способы их обнаружения, для того чтобы, к примеру, аннулировать или обновить их при записи. Поэтому на многих многоядерных процессорах запись каталога состоит из битового вектора, по одному биту на ядро. Значение 1 свидетельствует о том, что строка кэша присутствует в ядре, а значение 0 свидетельствует об ее отсутствии. Более того, в каждой записи каталога обычно содержится несколько дополнительных битов. В результате этого расходы памяти на каталог существенно возрастают.
Еще по теме Мультипроцессоры NUMA:
- Л.О. Доліненко, В.О. Доліненко, С.О. Сарновська. Цивільне право України, 2006
- ЦИВІЛЬНЕ ПРАВО УКРАЇНИ
- ПЕРЕДМОВА
- Частина І ПРОГРАМА КУРСУ «ЦИВІЛЬНЕ ПРАВО УКРАЇНИ»
- Розділ І. Загальні положення цивільного права
- Тема 1. Поняття цивільного права. Предмет та метод, система цивільного права. Функції та принципи цивільного права
- Тема 2. Цивільне законодавство України
- Тема 3. Поняття, елементи та види цивільних правовідносин
- Тема 4. Здійснення цивільних прав і виконання обов’язків
- Тема 5. Захист цивільних прав та інтересів
- Тема 6. Об’єкти цивільних прав
- Тема 7.ФІЗИЧНІ особи як суб’єкти цивільного права
- Тема 8. Юридичні особи
- Тема 9. Держава як суб’єкт цивільного права. Територіальні громади та Автономна Республіка Крим як суб’єкти цивільного права
- Тема 10. Правочини: поняття, види. Умови чинності правочину
- Тема 11. Представництво і довіреність
- Тема П.Строки. Позовна давність