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