NUMA

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

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

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

В книге «Компьютерные науки и технологии, материалы международной конференции (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 20 21 22 23
размер узла 0: 8157 МБ
узел 0 бесплатно: 88 МБ
узел 1 процессор: 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
размер узла 1: 8191 МБ
узел 1 бесплатно: 5176 МБ
расстояния между узлами:
узел 0 1
0: 10 20
1:20 10

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

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

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

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

Заключение

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

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

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

Спасибо

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

Об авторах

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

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

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

Как установить League Of Legends на Ubuntu 14.04
Если вы поклонник League of Legends, то это возможность для вас протестировать League of Legends. Обратите внимание, что LOL поддерживается в PlayOnLi...
Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...
Установите последнюю версию эмулятора Dolphin для Gamecube и Wii в Linux
Эмулятор Dolphin позволяет вам играть в выбранные вами игры Gamecube и Wii на персональных компьютерах (ПК) Linux. Являясь свободно доступным игровым...