Понимание архитектуры NUMA

Understanding Numa Architecture



Проектирование компьютеров - это всегда компромисс. Четыре основных компонента компьютера - центральный процессор (ЦП) или процессор, память, хранилище и плата для соединения компонентов (система шины ввода-вывода) - объединены настолько умно, насколько это возможно, чтобы создать машину, которая является одновременно экономичным и мощным. Процесс проектирования в основном включает оптимизацию процессоров (сопроцессоры, многоядерная установка), типа и объема памяти, хранилища (диски, файловая система), а также цены. Идея сопроцессоров и многоядерной архитектуры заключается в распределять операции по как можно большему количеству отдельных вычислительных блоков в минимально возможном пространстве и сделать параллельное выполнение вычислительных инструкций более доступным и доступным. Что касается памяти, это вопрос о количестве или размере, который может быть адресован отдельным вычислительным блоком, и о том, какой тип памяти работает с наименьшей возможной задержкой. Хранилище принадлежит внешней памяти, и его производительность зависит от типа диска, используемой файловой системы, потоковой передачи, протокола передачи, структуры связи и количества подключенных устройств памяти.

Конструкция шин ввода-вывода представляет собой компьютерные артерии и в значительной степени определяет, сколько и насколько быстро данные могут передаваться между отдельными компонентами, перечисленными выше. В высшей категории находятся компоненты, используемые в области высокопроизводительных вычислений (HPC). По состоянию на середину 2020 года среди современных представителей HPC присутствуют ускорители на базе графических процессоров Nvidia Tesla и DGX, Radeon Instinct и Intel Xeon Phi (см. [1,2] для сравнения продуктов).







Понимание NUMA

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



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



Локальная память - это память, которую ЦП использует в конкретном узле NUMA. Внешняя или удаленная память - это память, которую ЦП берет от другого узла NUMA. Термин отношение NUMA описывает отношение стоимости доступа к внешней памяти к стоимости доступа к локальной памяти. Чем больше коэффициент, тем выше стоимость и, следовательно, больше времени требуется для доступа к памяти.





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

Оглядываясь назад: эволюция мультипроцессоров с общей памятью

Франк Деннеманн [8] утверждает, что современные системные архитектуры не позволяют по-настоящему унифицированный доступ к памяти (UMA), даже несмотря на то, что эти системы специально разработаны для этой цели. Проще говоря, идея параллельных вычислений заключалась в том, чтобы иметь группу процессоров, которые взаимодействуют для вычисления данной задачи, тем самым ускоряя в остальном классические последовательные вычисления.



Как объяснил Франк Деннеманн [8], в начале 1970-х годов потребность в системах, которые могли бы обслуживать несколько одновременных пользовательских операций и избыточное генерирование данных, стала основной с появлением систем реляционных баз данных. Несмотря на впечатляющую производительность однопроцессорных систем, многопроцессорные системы лучше справлялись с этой нагрузкой. Чтобы обеспечить экономичную систему, адресное пространство с общей памятью стало предметом исследований. Раньше предлагались системы с перекрестным переключателем, однако эта сложность конструкции увеличивалась вместе с увеличением количества процессоров, что сделало систему на основе шины более привлекательной. Процессоры в шинной системе [могут] получить доступ ко всему пространству памяти, посылая запросы по шине, что является очень экономичным способом максимально оптимального использования доступной памяти.

Однако компьютерные системы на базе шины имеют узкое место - ограниченную полосу пропускания, которая приводит к проблемам масштабируемости. Чем больше ЦП добавлено в систему, тем меньше пропускная способность для каждого узла. Кроме того, чем больше добавляется ЦП, тем длиннее шина и, как следствие, выше задержка.

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

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

Повышение эффективности доступа к данным - одна из основных целей современной конструкции ЦП. Каждое ядро ​​ЦП было наделено малым кешем первого уровня (32 КБ) и большим (256 КБ) кешем второго уровня. Позже различные ядра будут совместно использовать кэш 3-го уровня размером в несколько МБ, размер которого со временем значительно вырос.

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

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

Есть две меры оптимизации программного обеспечения, которые могут улучшить производительность системы, поддерживающей архитектуру NUMA, - привязка процессора и размещение данных. Как объяснено в [19], привязка к процессору […] позволяет связывать и отменять привязку процесса или потока к одному ЦП или диапазону ЦП, так что процесс или поток будет выполняться только на указанном ЦП или ЦП, а не любой процессор. Термин «размещение данных» относится к модификациям программного обеспечения, в которых код и данные хранятся как можно ближе к памяти.

Различные операционные системы UNIX и UNIX поддерживают NUMA следующими способами (список ниже взят из [14]):

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

В книге Computer Science and Technology, Proceedings of the International Conference (CST2016) Нин Цай предполагает, что изучение архитектуры NUMA было в основном сосредоточено на высокопроизводительной вычислительной среде, и предложил NUMA-совместимое Radix Partitioning (NaRP), которое оптимизирует производительность. общих кешей в узлах NUMA для ускорения работы приложений бизнес-аналитики. Таким образом, NUMA представляет собой золотую середину между системами с общей памятью (SMP) с несколькими процессорами [6].

NUMA и Linux

Как указано выше, ядро ​​Linux поддерживает NUMA начиная с версии 2.5. И Debian GNU / Linux, и Ubuntu предлагают поддержку NUMA для оптимизации процессов с помощью двух программных пакетов numactl [16] и numad [17]. С помощью команды numactl вы можете составить список доступных узлов NUMA в вашей системе [18]:

# numactl --hardware
доступный:2узлы(0-1)
узел0процессор:0 1 2 3 4 5 6 7 16 17 18 19 двадцать 21 22 2. 3
узел0размер:8157МБ
узел0бесплатно:88МБ
узел1процессор:8 9 10 одиннадцать 12 13 14 пятнадцать 24 25 26 год 27 28 год 29 30 31 год
узел1размер:8191МБ
узел1бесплатно:5176МБ
расстояния между узлами:
узел0 1
0:10 двадцать
1:двадцать 10

NumaTop - полезный инструмент, разработанный Intel для мониторинга локализации памяти во время выполнения и анализа процессов в системах NUMA [10,11]. Этот инструмент может определить потенциальные узкие места производительности, связанные с NUMA, и, следовательно, помочь перебалансировать выделение памяти / ЦП, чтобы максимизировать потенциал системы NUMA. См. [9] для более подробного описания.

Сценарии использования

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

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

Заключение

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

Ссылки и ссылки

  1. Сравните NVIDIA Tesla с Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-tesla_vs_radeon-instinct
  2. Сравните NVIDIA DGX-1 с Radeon Instinct, https://www.itcentralstation.com/products/comparisons/nvidia-dgx-1_vs_radeon-instinct
  3. Согласованность кеша, Википедия, https://en.wikipedia.org/wiki/Cache_coherence
  4. Слежение за автобусом, Википедия, https://en.wikipedia.org/wiki/Bus_snooping
  5. Протоколы согласования кеша в многопроцессорных системах, Компьютерщики для компьютерных фанатов, https://www.geeksforgeeks.org/cache-coherence-protocols-in-multiprocessor-system /
  6. Компьютерные науки и технологии - Материалы международной конференции (CST2016), Нинг Кай (ред.), World Scientific Publishing Co Pte Ltd, ISBN: 9789813146419
  7. Дэниел П. Бове и Марко Чезати: «Понимание архитектуры NUMA в понимании ядра Linux», 3-е издание, O’Reilly, https://www.oreilly.com/library/view/understanding-the-linux/0596005652/
  8. Франк Деннеманн: «Глубокое погружение в NUMA, часть 1: от UMA к NUMA», https://frankdenneman.nl/2016/07/07/numa-deep-dive-part-1-uma-numa/
  9. Колин Ян Кинг: NumaTop: инструмент для мониторинга системы NUMA, http://smackerelofopinion.blogspot.com/2015/09/numatop-numa-system-monitoring-tool.html
  10. Нуматоп, https://github.com/intel/numatop
  11. Пакет numatop для Debian GNU / Linux, https://packages.debian.org/buster/numatop
  12. Джонатан Кехайас: Общие сведения о неоднородном доступе к памяти / архитектурах (NUMA), https://www.sqlskills.com/blogs/jonathan/understanding-non-uniform-memory-accessarchitectures-numa/
  13. Новости ядра Linux для ядра 3.8, https://kernelnewbies.org/Linux_3.8
  14. Неравномерный доступ к памяти (NUMA), Википедия, https://en.wikipedia.org/wiki/Non-uniform_memory_access
  15. Документация по управлению памятью Linux, NUMA, https://www.kernel.org/doc/html/latest/vm/numa.html
  16. Пакет numactl для Debian GNU / Linux, https://packages.debian.org/sid/admin/numactl
  17. Номер пакета для Debian GNU / Linux, https://packages.debian.org/buster/numad
  18. Как узнать, включена или отключена конфигурация NUMA ?, https://www.thegeekdiary.com/centos-rhel-how-to-find-if-numa-configuration-is-enabled-or-disabled/
  19. Связь с процессором, Википедия, https://en.wikipedia.org/wiki/Processor_affinity

Спасибо

Авторы хотели бы поблагодарить Герольда Рупрехта за поддержку при подготовке этой статьи.

Об авторах

Плакседес Неханда - многопрофильный, целеустремленный разносторонний человек, который носит множество шляп, в том числе планировщик мероприятий, виртуальный помощник, транскрибер, а также заядлый исследователь из Йоханнесбурга, Южная Африка.

Принц К. Неханда - инженер по контрольно-измерительным приборам (метрология) в компании Paeflow Metering в Хараре, Зимбабве.

Франк Хофманн работает в дороге - предпочтительно из Берлина (Германия), Женевы (Швейцария) и Кейптауна (Южная Африка) - в качестве разработчика, инструктора и автора таких журналов, как Linux-User и Linux Magazine. Он также является соавтором книги по управлению пакетами Debian ( http://www.dpmb.org ).