Влияет ли NUMA на пропускную способность памяти или только на задержку?

У меня проблема с ограниченной пропускной способностью памяти - мне нужно последовательно прочитать много (много ГБ) данных из ОЗУ, выполнить некоторую быструю обработку и последовательно записать их в другое место в ОЗУ. Задержка памяти не является проблемой.

Есть ли польза от разделения работы между двумя или более ядрами в разных зонах NUMA? Аналогичным образом, снижает ли работа в разных зонах доступную полосу пропускания?


person Steve Linton    schedule 30.04.2020    source источник
comment
Ответ заключается в том, что это зависит от вашей реальной рабочей нагрузки, чтобы ответить на этот вопрос.   -  person Maxim Egorushkin    schedule 30.04.2020
comment
@MaximEgorushkin, а можно еще какую-нибудь информацию. Например, от чего это может зависеть?   -  person Steve Linton    schedule 30.04.2020


Ответы (1)


Для многопоточного кода с ограниченной полосой пропускания поведение в системе NUMA в первую очередь будет зависеть от того, насколько «локальным» является доступ к данным каждого потока, и, во вторую очередь, от деталей удаленного доступа.

В типичной серверной системе с 2 сокетами пропускная способность локальной памяти, доступная для двух узлов NUMA, в два раза больше, чем для одного узла. (Но помните, что для достижения асимптотической пропускной способности для каждого сокета может потребоваться много потоков, работающих на многих ядрах.)

Например, тест STREAM обычно запускается в конфигурации, которая разрешает почти любой доступ из каждый поток должен быть "локальным". Это реализовано путем предположения о размещении NUMA «первого касания» - когда выделенная память впервые записывается, ОС должна создать сопоставления из виртуального адресного пространства процесса с физическими адресами, и (по умолчанию) ОС выбирает физические адреса, которые находятся в тот же узел NUMA, что и ядро, выполнившее инструкцию сохранения.

«Локальная» пропускная способность (для DRAM) в большинстве систем примерно симметрична (для чтения и записи) и относительно проста для понимания. «Удаленная» полоса пропускания гораздо более асимметрична для чтения и записи, и обычно существует значительный конфликт между командами чтения/записи, передаваемыми между чипами, и данными, перемещающимися между чипами. Общее соотношение локальной и удаленной пропускной способности также значительно варьируется в зависимости от поколения процессоров. Для некоторых процессоров (например, Xeon E5 v3 и, возможно, v4) межсоединение относительно быстрое, поэтому задания с плохой локализацией часто могут выполняться со всей памятью, чередующейся между двумя сокетами. С тех пор локальная пропускная способность значительно увеличилась, и более поздние процессоры обычно сильно отдают предпочтение локальному доступу.

Пример для Intel Xeon Platinum 8160 (2 канала UPI между чипами):

  • Локальная пропускная способность для чтения (каждый сокет) ~112 ГБ/с
  • Удаленная пропускная способность для чтения (в одном направлении за раз) ~34 ГБ/с
  • Локальная пропускная способность отлично масштабируется в системах с двумя сокетами, а удаленная пропускная способность также очень хорошо масштабируется при использовании обоих сокетов (каждый сокет считывает данные с другого сокета).

С комбинированным трафиком чтения и записи между сокетами ситуация усложняется, потому что трафик чтения с узла 0 на узел 1 конкурирует с трафиком записи с узла 1 на узел 0 и т. д.

  • Локальная пропускная способность для 1R:1W (каждый сокет) ~101 ГБ/с (уменьшена из-за накладных расходов на планирование чтения/записи)
  • Удаленная пропускная способность для 1R:1W (одновременно работает один сокет) ~ 50 ГБ/с — доступна большая пропускная способность, поскольку используются оба направления, но это также означает, что если оба сокета делают одно и то же, возникнут конфликты. . Я вижу совокупную скорость менее 60 ГБ / с, когда оба сокета одновременно работают с удаленным режимом 1R: 1 Вт.

Конечно, различное соотношение локального и удаленного доступа изменит масштабирование. Время также может быть проблемой — если потоки одновременно выполняют локальный доступ, а затем удаленный доступ, в части удаленного доступа будет больше конфликтов (по сравнению со случаем, когда потоки выполняют свои функции). удаленный доступ в разное время).

person John D McCalpin    schedule 22.05.2020