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

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

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, которая ссылается на кэш-строку.

Сначала центральный процессор, выдающий команду, передает ее своему блоку управления памятью (MMU), который

Рис. 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 свидетельствует об ее отсутствии. Более того, в каждой записи каталога обычно содержится несколько дополнительных битов. В результате этого расходы памяти на каталог существенно возрастают.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Мультипроцессоры NUMA:

  1. Л.О. Доліненко, В.О. Доліненко, С.О. Сарновська. Цивільне право України, 2006
  2. ЦИВІЛЬНЕ ПРАВО УКРАЇНИ
  3. ПЕРЕДМОВА
  4. Частина І ПРОГРАМА КУРСУ «ЦИВІЛЬНЕ ПРАВО УКРАЇНИ»
  5. Розділ І. Загальні положення цивільного права
  6. Тема 1. Поняття цивільного права. Предмет та метод, система цивільного права. Функції та принципи цивільного права
  7. Тема 2. Цивільне законодавство України
  8. Тема 3. Поняття, елементи та види цивільних правовідносин
  9. Тема 4. Здійснення цивільних прав і виконання обов’язків
  10. Тема 5. Захист цивільних прав та інтересів
  11. Тема 6. Об’єкти цивільних прав
  12. Тема 7.ФІЗИЧНІ особи як суб’єкти цивільного права
  13. Тема 8. Юридичні особи
  14. Тема 9. Держава як суб’єкт цивільного права. Територіальні громади та Автономна Республіка Крим як суб’єкти цивільного права
  15. Тема 10. Правочини: поняття, види. Умови чинності правочину
  16. Тема 11. Представництво і довіреність
  17. Тема П.Строки. Позовна давність