1

Я верю, что это подходящее место для этого вопроса. Это не связано с программированием, или я мог бы спросить о Stackoverflow вместо этого. Тем не менее, вот в чем вопрос. Я делаю некоторые тесты пропускной способности сети. В настоящее время у меня есть две сетевые карты 40GbE, напрямую проверяющие пропускную способность. (Для этого я использую iperf3).

Мои тестовые системы - двойной Xeon E5 2667 (из /proc /cpuinfo model name : Intel(R) Xeon(R) CPU E5-2667 0 @ 2.90GHz) с 24 логическими процессорами. Существует гиперкуб NUMA из двух узлов с половиной процессоров, прикрепленных к каждому. Имеется 32 ГБ оперативной памяти в виде не-ECC DDR3. В каждом случае 40GbE NIC подключается к слоту PCIe Gen 3 x8, который связан с узлом NUMA 0.

Когда я выполняю тест с iperf3 с минимальным количеством опций (в основном, с использованием значений по умолчанию, которых достаточно для моих целей), я не могу видеть пропускную способность для теста TCP, превышающую 21.x Гбит / с (хорошо, поэтому иногда она становится выше 21 но обычно это 21.x). Однако, если я использую опцию iperf3 -A n которая ограничивает iperf3 процессором <n> , я вижу ~ 36 Гбит / с, что намного больше, чем я ожидал. Я хотел бы понять почему.

Я экспериментировал с numactl для привязки выделения памяти, процессорных узлов и физического процессора для iperf3 . Как ни странно, я не могу достичь той же пропускной способности с помощью numactl что и при использовании опции iperf3 -A . Работа с различными вещами / опциями (см. Man-страницу numactl для более подробной информации), главным образом --physcpubind=<n> , --cpunodebind=<n> и --membind=<n> я не могу достичь скорости больше чем ~ 31 Гбит / с тестовое задание. Я хотел бы понять почему.

С этой целью я начал использовать пакет perf , предоставляемый linux. Однако я не нахожу в гору документации, доступной ни Linux, ни Intel, о доступных вещах PMU. О, это объясняет, как запустить его, но мало что сказано о том, что на самом деле означает. В качестве примера, bus-cycles появляются как в "Аппаратных событиях", так и в "Событиях ядра PMU". Какая разница? perf list описывает "события", которые можно отслеживать; это долго. Документация, которую я нашел от Intel для Xeon E5 2667 (которую я считаю установкой Haswell), показывает, что поддерживаются различные вещи, связанные с NUMA, и perf list перфектов показывает uncore_imc_0/cas_count_read/ и uncore_qpi_0/drs_data/ (среди многих других), которые должны быть связано с этим. Тем не менее, когда я запускаю iperf3 пытаясь контролировать это, я понимаю, что это не поддерживается. Например:

$ perf stat -e uncore_qpi_0/drs_data/ -- iperf3 -c 192.168.0.244 -A 0
.... program output ....
Performance counter stats for 'iperf3 -c 192.168.0.244 -A 0':

  <not supported>      uncore_qpi_0/drs_data/   

Тем не менее, документы показывают, что это должно быть. Есть ли какой-нибудь способ узнать, что поддерживается моим процессором, без запуска программы, только чтобы узнать послесловие, что это не так? Есть ли у кого-нибудь предложения для метрик, которые важны для понимания несоответствия? (Тег с RHEL, потому что это целевая платформа для решения.)

0