stringtranslate.com

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

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

Неравномерный доступ к памяти ( 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.

Обзор

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

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

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

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

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

Реализации

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

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

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

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

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

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

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

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

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

Поскольку 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. ^ аб Накул Манчанда; Каран Ананд (4 мая 2010 г.). «Неравномерный доступ к памяти (NUMA)» (PDF) . Нью-Йоркский университет. Архивировано из оригинала (PDF) 28 декабря 2013 г. Проверено 27 января 2014 г.
  2. ^ Сергей Благодуров; Сергей Журавлёв; Мохаммад Дашти; Александра Федорова (2 мая 2011 г.). «Обоснование управления конфликтами с поддержкой NUMA в многоядерных системах» (PDF) . Университет Саймона Фрейзера . Проверено 27 января 2014 г.
  3. ^ аб Золтан Майо; Томас Р. Гросс (2011). «Производительность системы памяти в многоядерном мультипроцессоре NUMA» (PDF) . АКМ. Архивировано из оригинала (PDF) 12 июня 2013 г. Проверено 27 января 2014 г.
  4. ^ «Информационный документ по архитектуре двухканальной памяти Intel DDR» (PDF) (ред. 1.0). Infineon Technologies North America и Kingston Technology. Сентябрь 2003 г. Архивировано из оригинала (PDF, 1021  КБ ) 29 сентября 2011 г. Проверено 6 сентября 2007 г.
  5. ^ Корпорация Intel (2008). Архитектура Intel QuickPath [Информационный документ]. Получено с http://www.intel.com/pressroom/archive/reference/whitepaper_QuickPath.pdf.
  6. ^ Корпорация Intel. (18 сентября 2007 г.). Гелсингер беседует с Intel и компанией Rapid Technology Caden [пресс-релиз]. Получено с http://www.intel.com/pressroom/archive/releases/2007/20070918corp_b.htm.
  7. ^ «ccNUMA: когерентный неравномерный доступ к памяти кеширования» . SlideShare.net. 2014 . Проверено 27 января 2014 г.
  8. ^ Пер Стенстремт; Трумэн Джо; Ануп Гупта (2002). «Сравнительная оценка производительности архитектур NUMA и COMA с когерентным кэшем» (PDF) . АКМ . Проверено 27 января 2014 г.
  9. ^ Дэвид Б. Густавсон (сентябрь 1991 г.). «Масштабируемый когерентный интерфейс и связанные с ним проекты стандартов» (PDF) . Публикация SLAC 5656 . Стэнфордский центр линейных ускорителей . Архивировано (PDF) из оригинала 9 октября 2022 г. Проверено 27 января 2014 г.
  10. ^ «NumaChip обеспечивает когерентное кэширование недорогой общей памяти» . Numascale.com. Архивировано из оригинала 22 января 2014 г. Проверено 27 января 2014 г.
  11. ^ Поддержка NUMA (MSDN)
  12. ^ Улучшения производительности виртуальной машины Java HotSpot
  13. ^ «Усилия по масштабированию Linux: домашняя страница группы NUMA» . SourceForge.net . 20 ноября 2002 г. Проверено 6 февраля 2014 г.
  14. ^ «Ядро Linux 3.8, Раздел 1.8. Автоматическая балансировка NUMA» . kernelnewbies.org . 08 февраля 2013 г. Проверено 6 февраля 2014 г.
  15. ^ Джонатан Корбет (14 ноября 2012 г.). «НУМА спешит». LWN.net . Проверено 6 февраля 2014 г.
  16. ^ «Ядро Linux 3.13, раздел 1.6. Улучшена производительность в системах NUMA» . kernelnewbies.org . 19 января 2014 г. Проверено 6 февраля 2014 г.
  17. ^ «Документация по ядру Linux: Documentation/sysctl/kernel.txt» . ядро.орг . Проверено 6 февраля 2014 г.
  18. ^ Джонатан Корбет (01 октября 2013 г.). «Ход планирования NUMA». LWN.net . Проверено 6 февраля 2014 г.
  19. ^ "numa (4)" . www.freebsd.org . Проверено 3 декабря 2020 г.

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