Из Википедии, бесплатной энциклопедии
  (Перенаправлено из CcNUMA )
Перейти к навигации Перейти к поиску
Материнская плата рабочей станции HP Z820 с двумя сокетами ЦП, каждый со своим собственным набором из восьми слотов DIMM, окружающих сокет.

Неравномерный доступ к памяти ( NUMA ) - это конструкция компьютерной памяти, используемая в многопроцессорной обработке , где время доступа к памяти зависит от местоположения памяти относительно процессора. В соответствии с NUMA процессор может получить доступ к своей локальной памяти быстрее, чем к нелокальной памяти (локальная память для другого процессора или память, совместно используемая между процессорами). Преимущества NUMA ограничены конкретными рабочими нагрузками, особенно на серверах, где данные часто прочно связаны с определенными задачами или пользователями. [1]

Архитектуры NUMA логически следуют масштабированию архитектур с симметричной многопроцессорной обработкой (SMP). Они были коммерчески разработаны в 1990-х годах компаниями Unisys , Convex Computer (позже Hewlett-Packard ), Honeywell Information Systems Italy (HISI) (позже Groupe Bull ), Silicon Graphics (позже Silicon Graphics International ), Sequent Computer Systems (позже IBM ), Data General (позже EMC ) и Digital (позже Compaq , затем HP , теперь HPE). Методы, разработанные этими компаниями, позже были использованы в различных Unix-подобных операционных системах и, в некоторой степени, в Windows NT .

Первой коммерческой реализацией системы Unix на основе NUMA было семейство серверов Symmetrical Multi Processing XPS-100, разработанное Дэном Гиланом из корпорации VAST для Honeywell Information Systems, Италия.

Основная концепция [ править ]

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

Современные процессоры работают значительно быстрее, чем используемая ими основная память. На заре вычислений и обработки данных ЦП обычно работал медленнее, чем его собственная память. Границы производительности процессоров и памяти пересеклись в 1960-х годах с появлением первых суперкомпьютеров . С тех пор процессоры все чаще оказываются «голодными по данным» и вынуждены останавливаться в ожидании поступления данных из памяти. Многие проекты суперкомпьютеров 1980-х и 1990-х годов были ориентированы на обеспечение высокоскоростного доступа к памяти в отличие от более быстрых процессоров, что позволяло компьютерам работать с большими наборами данных на скоростях, недоступных для других систем.

Ограничение количества обращений к памяти стало ключом к достижению высокой производительности современного компьютера. Для обычных процессоров это означало установку постоянно увеличивающегося объема высокоскоростной кэш-памяти и использование все более сложных алгоритмов, чтобы избежать промахов кеш-памяти . Но резкое увеличение размера операционных систем и приложений, работающих на них, в целом подавляло эти улучшения обработки кэша. Многопроцессорные системы без NUMA значительно усугубляют проблему. Теперь система может использовать несколько процессоров одновременно, особенно потому, что только один процессор может получить доступ к памяти компьютера одновременно. [2]

NUMA пытается решить эту проблему, предоставляя отдельную память для каждого процессора, избегая падения производительности, когда несколько процессоров пытаются адресовать одну и ту же память. Для проблем, связанных с распределенными данными (обычными для серверов и аналогичных приложений), NUMA может повысить производительность по сравнению с одной общей памятью примерно в несколько раз, увеличивая количество процессоров (или отдельных банков памяти). [3] Другой подход к решению этой проблемы, используемый в основном в системах, отличных от NUMA, - это многоканальная архитектура памяти , в которой линейное увеличение количества каналов памяти линейно увеличивает параллелизм доступа к памяти. [4]

Конечно, не все данные ограничиваются одной задачей, а это означает, что более чем одному процессору могут потребоваться одни и те же данные. Чтобы справиться с этими случаями, системы NUMA включают дополнительное оборудование или программное обеспечение для перемещения данных между банками памяти. Эта операция замедляет процессоры, подключенные к этим банкам, поэтому общее увеличение скорости за счет NUMA сильно зависит от характера выполняемых задач. [3]

AMD реализовала NUMA в своем процессоре Opteron (2003 г.), используя HyperTransport . Intel объявила о совместимости NUMA для своих серверов x86 и Itanium в конце 2007 года со своими процессорами Nehalem и Tukwila . [5] Оба семейства процессоров Intel имеют общий набор микросхем ; это соединение называется Intel Quick Path Interconnect (QPI). [6]

Кеш-когерентный NUMA (ccNUMA) [ править ]

Топология сервера ccNUMA Bulldozer, извлеченная с помощью инструмента lstopo от hwloc.

Почти все архитектуры ЦП используют небольшой объем очень быстрой не разделяемой памяти, известной как кеш, чтобы использовать локальность ссылок при доступе к памяти. При использовании NUMA поддержание согласованности кэша в общей памяти связано со значительными накладными расходами. Несмотря на то, что их проще спроектировать и построить, некогерентные системы NUMA становятся чрезмерно сложными для программирования в стандартной модели программирования архитектуры фон Неймана . [7]

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

В качестве альтернативы, протоколы когерентности кеша, такие как протокол MESIF, пытаются сократить обмен данными, необходимыми для поддержания когерентности кеша. Масштабируемый когерентный интерфейс (SCI) - это стандарт IEEE, определяющий протокол согласованности кэша на основе каталогов, чтобы избежать ограничений масштабируемости, обнаруженных в более ранних многопроцессорных системах. Например, SCI используется в качестве основы для технологии NumaConnect. [9] [10]

По состоянию на 2011 год системы ccNUMA представляют собой многопроцессорные системы на базе процессора AMD Opteron , который может быть реализован без внешней логики, и процессора Intel Itanium, для которого требуется, чтобы набор микросхем поддерживал NUMA. Примерами чипсетов с поддержкой ccNUMA являются SGI Shub (Super hub), Intel E8870, HP sx2000 (используется в серверах Integrity и Superdome), а также те, которые используются в системах NEC на базе Itanium. Более ранние системы ccNUMA, такие как системы Silicon Graphics, основывались на процессорах MIPS и процессоре DEC Alpha 21364 (EV7).

NUMA против кластерных вычислений [ править ]

Можно рассматривать NUMA как сильно связанную форму кластерных вычислений . Добавление подкачки виртуальной памяти к архитектуре кластера может позволить реализовать NUMA полностью программно. Однако межузловая задержка программной NUMA остается на несколько порядков больше (медленнее), чем у аппаратной NUMA. [1]

Поддержка программного обеспечения [ править ]

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

  • Поддержка Silicon Graphics IRIX для архитектуры ccNUMA с использованием ЦП 1240 и серверов Origin.
  • В Microsoft Windows 7 и Windows Server 2008 R2 добавлена ​​поддержка архитектуры NUMA для 64 логических ядер. [11]
  • В Java 7 добавлена ​​поддержка распределителя памяти с учетом NUMA и сборщика мусора . [12]
  • Версия 2.5 ядра Linux уже содержала базовую поддержку NUMA [13], которая была дополнительно улучшена в последующих выпусках ядра. Версия 3.8 ядра Linux принесла новую основу NUMA, которая позволила разработать более эффективные политики NUMA в более поздних выпусках ядра. [14] [15] Версия 3.13 ядра Linux содержит множество политик, направленных на размещение процесса рядом с его памятью, вместе с обработкой таких случаев, как совместное использование страниц памяти между процессами или использование прозрачных огромных страниц ; Новые настройки sysctl позволяют включать или отключать балансировку NUMA, а также настраивать различные параметры балансировки памяти NUMA.[16] [17] [18]
  • OpenSolaris моделирует архитектуру NUMA с помощью lgroups.
  • FreeBSD добавила поддержку архитектуры NUMA в версии 9.0. [19]

См. Также [ править ]

  • Единый доступ к памяти (UMA)
  • Архитектура только кэш-памяти (COMA)
  • Память блокнота (SPM)
  • Разделенное глобальное адресное пространство
  • HiperDispatch

Ссылки [ править ]

  1. ^ a b Накул Манчанда; Каран Ананд (04.05.2010). «Неравномерный доступ к памяти (NUMA)» (PDF) . Нью-Йоркский университет. Архивировано из оригинального (PDF) 28 декабря 2013 года . Проверено 27 января 2014 .
  2. ^ Сергей Благодуров; Сергей Журавлев; Мохаммад Дашти; Александра Федорова (02.05.2011). «Пример использования NUMA-совместимого управления конфликтами в многоядерных системах» (PDF) . Университет Саймона Фрейзера . Проверено 27 января 2014 .
  3. ^ a b Золтан Майо; Томас Р. Гросс (2011). «Производительность системы памяти в многоядерном мультипроцессоре NUMA» (PDF) . ACM. Архивировано из оригинального (PDF) 12 июня 2013 года . Проверено 27 января 2014 .
  4. ^ "Официальный документ по архитектуре двухканальной памяти DDR Intel" (PDF) (ред. 1.0). Infineon Technologies North America и Kingston Technology. Сентября 2003 года Архивировано из оригинала (PDF, 1021  Кб ) на 2011-09-29 . Проверено 6 сентября 2007 .
  5. Intel Corp. (2008). Архитектура Intel QuickPath [Белая книга]. Получено с http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf.
  6. ^ Корпорация Intel. (18 сентября 2007 г.). Гелсинджер обращается к Intel и кадену по быстрым технологиям в сфере высоких технологий [пресс-релиз]. Получено с http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm
  7. ^ "ccNUMA: Кэш-когерентный неоднородный доступ к памяти" . slideshare.net. 2014 . Проверено 27 января 2014 .
  8. ^ Per Stenstromt; Трумэн Джо; Ануп Гупта (2002). «Сравнительная оценка производительности кэш-согласованных архитектур NUMA и COMA» (PDF) . ACM . Проверено 27 января 2014 .
  9. Дэвид Б. Густавсон (сентябрь 1991 г.). «Масштабируемый последовательный интерфейс и проекты связанных стандартов» (PDF) . Публикация SLAC 5656 . Стэнфордский центр линейных ускорителей . Проверено 27 января 2014 года .
  10. ^ «NumaChip позволяет использовать кеш-согласованную недорогую разделяемую память» . Numascale.com. Архивировано из оригинала на 2014-01-22 . Проверено 27 января 2014 .
  11. ^ Поддержка NUMA (MSDN)
  12. ^ Улучшения производительности виртуальной машины Java HotSpot ™
  13. ^ «Усилия по масштабированию Linux: домашняя страница группы NUMA» . sourceforge.net . 2002-11-20 . Проверено 6 февраля 2014 .
  14. ^ «Ядро Linux 3.8, раздел 1.8. Автоматическая балансировка NUMA» . kernelnewbies.org . 2013-02-08 . Проверено 6 февраля 2014 .
  15. Джонатан Корбет (14 ноября 2012 г.). «НУМА спешит» . LWN.net . Проверено 6 февраля 2014 .
  16. ^ «Ядро Linux 3.13, раздел 1.6. Повышена производительность в системах NUMA» . kernelnewbies.org . 2014-01-19 . Проверено 6 февраля 2014 .
  17. ^ «Документация ядра Linux: Documentation / sysctl / kernel.txt» . kernel.org . Проверено 6 февраля 2014 .
  18. ^ Джонатан Корбет (2013-10-01). «Прогресс планирования NUMA» . LWN.net . Проверено 6 февраля 2014 .
  19. ^ "numa (4)" . www.freebsd.org . Проверено 3 декабря 2020 .
  • Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.

Внешние ссылки [ править ]

  • NUMA FAQ
  • Распределенная разделяемая память на основе страниц
  • Проект OpenSolaris NUMA
  • Вводное видео по архитектуре системы Alpha EV7
  • Еще видео о системах EV7: ЦП, ввод-вывод и т. Д.
  • Оптимизация NUMA в приложениях Windows
  • Поддержка NUMA в Linux в SGI
  • Intel Tukwila
  • Intel QPI (CSI) объяснил
  • текущие системы Itanium NUMA