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