Неравномерный доступ к памяти

редактировать
HP Z820 с двумя CPUS и NUMA

неоднородный доступ к памяти (NUMA ) - это конструкция компьютерной памяти, используемая в многопроцессорной обработке, где время доступа к памяти de ожидает расположения в памяти относительно процессора. В соответствии с 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.

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

Содержание

  • 1 Базовая концепция
  • 2 Когерентный NUMA кэш (ccNUMA)
  • 3 Сравнение NUMA и кластерных вычислений
  • 4 Поддержка программного обеспечения
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки

Базовая концепция

Одна возможная архитектура системы 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, пытаются уменьшить обмен данными, необходимыми для поддержания когерентности кэша. Scalable Coherent Interface (SCI) - это стандарт IEEE, определяющий протокол согласованности кэша на основе каталогов, чтобы избежать ограничений масштабируемости, обнаруженных в более ранних многопроцессорных системах. Например, SCI используется в качестве основы для технологии NumaConnect.

По состоянию на 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.

Программная поддержка

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

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

См. также

Ссылки

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

Последняя правка сделана 2021-05-31 12:04:36
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте