stringtranslate.com

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

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

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

Архитектуры 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.

Обзор

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

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

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

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

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

Реализации

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

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

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

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

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

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

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

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

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

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

Поддержка оборудования

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

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

Ссылки

  1. ^ Статья основана на материале, взятом из Non-uniform+memory+access в Free On-line Dictionary of Computing до 1 ноября 2008 года и включенном в соответствии с условиями «перелицензирования» GFDL версии 1.3 или более поздней.
  2. ^ ab Nakul Manchanda; Karan Anand (2010-05-04). "Non-Uniform Memory Access (NUMA)" (PDF) . New York University. Архивировано из оригинала (PDF) 2013-12-28 . Получено 2014-01-27 .
  3. ^ Сергей Благодуров; Сергей Журавлёв; Мохаммад Дашти; Александра Федорова (2 мая 2011 г.). «Обоснование управления конфликтами с поддержкой NUMA в многоядерных системах» (PDF) . Университет Саймона Фрейзера . Проверено 27 января 2014 г.
  4. ^ ab Zoltan Majo; Thomas R. Gross (2011). "Производительность системы памяти в многоядерном мультипроцессоре NUMA" (PDF) . ACM. Архивировано из оригинала (PDF) 2013-06-12 . Получено 2014-01-27 .
  5. ^ "Intel Dual-Channel DDR Memory Architecture White Paper" (PDF) (ред. 1.0). Infineon Technologies North America и Kingston Technology. Сентябрь 2003 г. Архивировано из оригинала (PDF, 1021  КБ ) 29-09-2011 . Получено 06-09-2007 .
  6. ^ Корпорация Intel (2008). Архитектура Intel QuickPath [Белая книга]. Получено с http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf
  7. ^ Корпорация Intel. (18 сентября 2007 г.). Гелсингер беседует с Intel и компанией High-Tech Industry's Rapid Technology Caden [Пресс-релиз]. Взято с http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm
  8. ^ "ccNUMA: Кэш-когерентный неоднородный доступ к памяти". slideshare.net. 2014 . Получено 27.01.2014 .
  9. ^ Пер Стенстромт; Трумэн Джо; Ануп Гупта (2002). "Сравнительная оценка производительности архитектур NUMA и COMA с когерентным кэшем" (PDF) . ACM . Получено 27.01.2014 .
  10. ^ Дэвид Б. Густавсон (сентябрь 1991 г.). «Масштабируемый когерентный интерфейс и связанные с ним проекты стандартов» (PDF) . Публикация SLAC 5656 . Стэнфордский центр линейных ускорителей . Архивировано (PDF) из оригинала 2022-10-09 . Получено 27 января 2014 г. .
  11. ^ "NumaChip обеспечивает когерентную кэш-память с низкой стоимостью". Numascale.com. Архивировано из оригинала 2014-01-22 . Получено 2014-01-27 .
  12. ^ Поддержка NUMA (MSDN)
  13. ^ Улучшения производительности виртуальной машины Java HotSpot
  14. ^ "Linux Scalability Effort: Домашняя страница группы NUMA". SourceForge.net . 2002-11-20 . Получено 06.02.2014 .
  15. ^ "Ядро Linux 3.8, Раздел 1.8. Автоматическая балансировка NUMA". kernelnewbies.org . 2013-02-08 . Получено 2014-02-06 .
  16. ^ Джонатан Корбет (14.11.2012). "NUMA в спешке". LWN.net . Получено 06.02.2014 .
  17. ^ "Linux kernel 3.13, раздел 1.6. Улучшенная производительность в системах NUMA". kernelnewbies.org . 2014-01-19 . Получено 2014-02-06 .
  18. ^ "Документация ядра Linux: Documentation/sysctl/kernel.txt". kernel.org . Получено 2014-02-06 .
  19. ^ Джонатан Корбет (2013-10-01). "Прогресс планирования NUMA". LWN.net . Получено 2014-02-06 .
  20. ^ "numa(4)". www.freebsd.org . Получено 2020-12-03 .

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