Неравномерный доступ к памяти
Неравномерный доступ к памяти ( 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 , теперь Dell Technologies ), Digital (позже Compaq , затем HP , теперь HPE ) и ICL . Методы, разработанные этими компаниями, позже использовались во многих Unix-подобных операционных системах и, в некоторой степени, в Windows NT .
Первая коммерческая реализация системы Unix на базе NUMA была [ где? ] [ когда? ] семейство серверов Symmetrical Multi Processing XPS-100, разработанное Дэном Гиланом из корпорации VAST для Honeywell Information Systems Italy.
Обзор
[ редактировать ]Современные процессоры работают значительно быстрее, чем используемая ими основная память. На заре вычислений и обработки данных ЦП обычно работал медленнее, чем собственная память. Линии производительности процессоров и памяти пересеклись в 1960-х годах с появлением первых суперкомпьютеров . С тех пор процессоры все чаще обнаруживают, что им «не хватает данных» и им приходится останавливаться в ожидании поступления данных из памяти (например, для компьютеров на основе архитектуры фон Неймана см. « Узкое место фон Неймана» ). Многие разработки суперкомпьютеров 1980-х и 1990-х годов были ориентированы на обеспечение высокоскоростного доступа к памяти в отличие от более быстрых процессоров, позволяя компьютерам работать с большими наборами данных на скоростях, к которым другие системы не могли приблизиться.
Ограничение количества обращений к памяти стало ключом к достижению высокой производительности современного компьютера. Для обычных процессоров это означало установку все большего объема высокоскоростной кэш-памяти и использование все более сложных алгоритмов для предотвращения промахов кэша . Однако резкое увеличение размера операционных систем и приложений, работающих на них, в целом свело на нет эти улучшения в обработке кэша. Многопроцессорные системы без NUMA значительно усугубляют проблему. Теперь система может одновременно отключать несколько процессоров, в частности потому, что только один процессор может одновременно обращаться к памяти компьютера. [2]
NUMA пытается решить эту проблему, предоставляя отдельную память для каждого процессора, избегая снижения производительности, когда несколько процессоров пытаются обратиться к одной и той же памяти. Для проблем, связанных с распространением данных (обычных для серверов и подобных приложений), NUMA может повысить производительность одной общей памяти примерно в раз, равный количеству процессоров (или отдельных банков памяти). [3] Другим подходом к решению этой проблемы является многоканальная архитектура памяти , в которой линейное увеличение количества каналов памяти линейно увеличивает параллелизм доступа к памяти. [4]
Конечно, не все данные ограничиваются одной задачей, а это означает, что одни и те же данные могут потребоваться более чем одному процессору. Чтобы справиться с этими случаями, системы NUMA включают дополнительное оборудование или программное обеспечение для перемещения данных между банками памяти. Эта операция замедляет работу процессоров, подключенных к этим банкам, поэтому общее увеличение скорости благодаря NUMA сильно зависит от характера выполняемых задач. [3]
Реализации
[ редактировать ]AMD реализовала NUMA в своем процессоре Opteron (2003 г.), используя HyperTransport . Intel объявила о совместимости NUMA для своих серверов x86 и Itanium В конце 2007 года со своими процессорами Nehalem и Tukwila . [5] Оба семейства процессоров Intel используют общий набор микросхем ; это соединение называется Intel QuickPath Interconnect (QPI), которое обеспечивает чрезвычайно высокую пропускную способность для обеспечения высокой встроенной масштабируемости и было заменено новой версией под названием Intel UltraPath Interconnect с выпуском Skylake (2017). [6]
Когерентный кэш NUMA (ccNUMA)
[ редактировать ]Почти все архитектуры ЦП используют небольшой объем очень быстрой отдельной памяти, известной как кэш, для использования локальности ссылок при доступе к памяти. При использовании NUMA поддержание согласованности кэша в общей памяти сопряжено со значительными издержками. Несмотря на то, что NUMA-системы без кэш-когерентности проще проектировать и создавать, их программирование в стандартной модели программирования архитектуры фон Неймана становится непомерно сложным . [7]
Обычно ccNUMA использует межпроцессорную связь между контроллерами кэша для поддержания согласованного образа памяти, когда одна и та же ячейка памяти хранится в нескольких кэшах. По этой причине ccNUMA может работать плохо, когда несколько процессоров пытаются быстро получить доступ к одной и той же области памяти. Поддержка NUMA в операционных системах пытается снизить частоту такого доступа, распределяя процессоры и память NUMA-дружественными способами и избегая алгоритмов планирования и блокировки, которые делают необходимым недружественный NUMA доступ. [8]
Альтернативно, протоколы согласованности кэша, такие как протокол MESIF, пытаются уменьшить объем связи, необходимый для поддержания согласованности кэша. Масштабируемый когерентный интерфейс (SCI) — это стандарт IEEE, определяющий протокол согласованности кэша на основе каталогов, позволяющий избежать ограничений масштабируемости, обнаруженных в более ранних многопроцессорных системах. Например, SCI используется в качестве основы для технологии NumaConnect. [9] [10]
NUMA против кластерных вычислений
[ редактировать ]NUMA можно рассматривать как тесно связанную форму кластерных вычислений . Добавление подкачки виртуальной памяти в кластерную архитектуру может позволить полностью реализовать NUMA программно. Однако задержка между узлами программного NUMA остается на несколько порядков больше (медленнее), чем у аппаратного NUMA. [1]
Поддержка программного обеспечения
[ редактировать ]Поскольку NUMA в значительной степени влияет на производительность доступа к памяти, необходимы определенные оптимизации программного обеспечения, чтобы позволить планировать потоки и процессы, близкие к их данным в памяти.
- В Microsoft Windows 7 и Windows Server 2008 R2 добавлена поддержка архитектуры NUMA с более чем 64 логическими ядрами. [11]
- В Java 7 с поддержкой NUMA добавлена поддержка распределителя памяти и сборщика мусора . [12]
- Ядро Linux :
- Версия 2.5 обеспечивала базовую поддержку 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]
- Поддержка Silicon Graphics IRIX (прекращение производства с 2021 г.) для архитектуры ccNUMA с процессором более 1240 процессоров серии Origin.
Аппаратная поддержка
[ редактировать ]По состоянию на 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).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ↑ Перейти обратно: Перейти обратно: а б Накул Манчанда; Каран Ананд (4 мая 2010 г.). «Неравномерный доступ к памяти (NUMA)» (PDF) . Нью-Йоркский университет. Архивировано из оригинала (PDF) 28 декабря 2013 г. Проверено 27 января 2014 г.
- ^ Сергей Благодуров; Сергей Журавлёв; Мохаммад Дашти; Александра Федорова (2 мая 2011 г.). «Обоснование управления конфликтами с поддержкой NUMA в многоядерных системах» (PDF) . Университет Саймона Фрейзера . Проверено 27 января 2014 г.
- ↑ Перейти обратно: Перейти обратно: а б Золтан Майо; Томас Р. Гросс (2011). «Производительность системы памяти в многоядерном мультипроцессоре NUMA» (PDF) . АКМ. Архивировано из оригинала (PDF) 12 июня 2013 г. Проверено 27 января 2014 г.
- ^ «Информационный документ по архитектуре двухканальной памяти Intel DDR» (PDF) (ред. 1.0). Infineon Technologies North America и Kingston Technology. Сентябрь 2003 г. Архивировано из оригинала (PDF, 1021 КБ ) 29 сентября 2011 г. Проверено 6 сентября 2007 г.
- ^ Корпорация Intel (2008). Архитектура Intel QuickPath [Информационный документ]. Получено с http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf.
- ^ Корпорация Intel. (18 сентября 2007 г.). Гелсингер беседует с Intel и компанией Rapid Technology Caden [пресс-релиз]. Получено с http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm.
- ^ «ccNUMA: когерентный неравномерный доступ к памяти» . SlideShare.net. 2014 . Проверено 27 января 2014 г.
- ^ Пер Стенстремт; Трумэн Джо; Ануп Гупта (2002). «Сравнительная оценка производительности архитектур NUMA и COMA с когерентным кэшем» (PDF) . АКМ . Проверено 27 января 2014 г.
- ^ Дэвид Б. Густавсон (сентябрь 1991 г.). «Масштабируемый когерентный интерфейс и связанные с ним проекты стандартов» (PDF) . Публикация SLAC 5656 . Стэнфордский центр линейных ускорителей . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 27 января 2014 г.
- ^ «NumaChip обеспечивает когерентное кэширование недорогой общей памяти» . Numascale.com. Архивировано из оригинала 22 января 2014 г. Проверено 27 января 2014 г.
- ^ Поддержка NUMA (MSDN)
- ^ Улучшения производительности виртуальной машины Java HotSpot
- ^ «Усилия по масштабированию Linux: домашняя страница группы NUMA» . SourceForge.net . 20 ноября 2002 г. Проверено 6 февраля 2014 г.
- ^ «Ядро Linux 3.8, раздел 1.8. Автоматическая балансировка NUMA» . kernelnewbies.org . 08 февраля 2013 г. Проверено 6 февраля 2014 г.
- ^ Джонатан Корбет (14 ноября 2012 г.). «НУМА спешит» . LWN.net . Проверено 6 февраля 2014 г.
- ^ «Ядро Linux 3.13, раздел 1.6. Улучшена производительность в NUMA-системах» . kernelnewbies.org . 19 января 2014 г. Проверено 6 февраля 2014 г.
- ^ «Документация по ядру Linux: Documentation/sysctl/kernel.txt» . ядро.орг . Проверено 6 февраля 2014 г.
- ^ Джонатан Корбет (01 октября 2013 г.). «Ход планирования NUMA» . LWN.net . Проверено 6 февраля 2014 г.
- ^ "нума(4)" . www.freebsd.org . Проверено 3 декабря 2020 г.
Внешние ссылки
[ редактировать ]- НУМА Часто задаваемые вопросы
- Распределенная общая память на основе страниц
- Проект OpenSolaris NUMA
- Вводное видео по архитектуре системы Alpha EV7
- Больше видеороликов, связанных с системами EV7: ЦП, ввод-вывод и т. д.
- Оптимизация NUMA в приложениях Windows
- Поддержка NUMA в Linux в SGI
- Интел Туквила
- Объяснение Intel QPI (CSI)
- текущие системы Itanium NUMA