Неравномерный доступ к памяти - Non-uniform memory access

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

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

Архитектуры 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 значительно усугубляют проблему. Теперь система может использовать несколько процессоров одновременно, особенно потому, что только один процессор может получить доступ к памяти компьютера одновременно.

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

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

Реализации

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

Кеш-когерентный NUMA (ccNUMA)

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

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

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

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

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

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

Поддержка программного обеспечения

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

  • В Microsoft Windows 7 и Windows Server 2008 R2 добавлена ​​поддержка архитектуры NUMA для 64 логических ядер.
  • В Java 7 добавлена ​​поддержка распределителя памяти с учетом NUMA и сборщика мусора .
  • Ядро Linux :
    • Версия 2.5 обеспечивала базовую поддержку NUMA, которая была улучшена в последующих выпусках ядра.
    • Версия 3.8 ядра Linux принесла новую основу NUMA, которая позволила разработать более эффективные политики NUMA в более поздних выпусках ядра.
    • В версии 3.13 ядра Linux появилось множество политик, нацеленных на размещение процесса рядом с его памятью, вместе с обработкой таких случаев, как совместное использование страниц памяти между процессами или использование прозрачных огромных страниц ; Новые настройки sysctl позволяют включать или отключать балансировку NUMA, а также настраивать различные параметры балансировки памяти NUMA.
  • OpenSolaris моделирует архитектуру NUMA с помощью lgroups.
  • FreeBSD добавила поддержку архитектуры NUMA в версии 9.0.
  • Поддержка 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).

Смотрите также

использованная литература

внешние ссылки