Производительность IPoFabric

Обычным названием для обмена IP поверх инфраструктуры InfiniBand* является IP over IB или IPoIB. Инфраструктура Intel® Omni-Path не осуществляет реализацию InfiniBand*. Вместо этого реализация Intel поверх OPA именуется как IP over Fabric или IPoFabric. С точки зрения программного обеспечения IPoFabric ведёт себя так же как IPoIB и на самом деле применяет драйвер ib_ipoib для обмена IP через порты ib0 и/ или ib1. Таким образом мы будем в основном называть такой обмен как IPoFabric, но будем продолжать пользоваться терминами ib_ipoib и ссылаться на порты ib0/ ib1, а также измерять производительность традиционными ориентированными на IP эталонными тестами, такими как qperf и iperf.

Настройка режима соединений IPoFabric

Для эталонного тестирования полосы пропускания IPoFabric, предварительным условием для достижения наилучшей производительности является наличие включённым в инфраструктуре 6 кБ MTU.

Для автоматического включения установок MTU 8KB:

  1. Внесите исправления в свой файл /etc/sysconfig/network-scripts/ifcfg-ib0.

  2. Замените следующие настройки:

    
    ONBOOT=yes
    NM_CONTROLLED=no
    MTU=65520
    CONNECTED_MODE=yes
     	   
  3. Если в вашей системе имеются два порта OPA, исполните шаги 1 и 2 для своего файла ifcfgib1.

[Совет]Совет

Если ваши названия интерфейсов не стандартные (не применяют соглашения ib*), данные установки могут не примениться надлежащим образом из файлов ifcfg-ib*. Например, если ваш интерфейс имеет название opa_ib0, вам может понадобиться изменить все установки в ifcfg-opa_ib0 чтобы привести в соответствие все указанные выше настройки. Следуйте, пожалуйста, в своей системе названиям интерфейсов ib* чтобы применять такие установки.

Настройка режима датаграмм IPoFabric

Хотя режим соединений (Connected Mode} обычно предоставляет наилучшую производительность, могут возникать ситуации, при которых вы пожелаете установит режим датаграмм (Datagram mode), также именуемый как режим Unreliable Datagram (UD, режим без подтверждения).

Режим UD применяет одну пару очередей (QP) на узел, поэтому он будет иметь меньший отпечаток в памяти чем режим соединения (который имеет одну QP для каждого узла получателя для которого требуется взаимодействие IPoFabric).

Для установления режима UD:

Установите IPoIB в режим датаграмм, как это показано в примере ниже.


modprobe ib_ipoib
ifup ib0
echo datagram > /sys/class/net/ib0/mode
		

Когда вы просмотрите значение размера IP MTU для ib0, вы обнаружите, что он установлен в значение 2044 байт:


# cat /sys/class/net/ib0/mtu
2044
		

В дистрибутивах RHEL* вы можете удвоить значение размера MTU данного режима UD примерно до 4k байт чтобы улучшить пропускную способность.

Для увеличения значения размера MTU в режиме UD:

  1. Измените свой файл настроек FM чтобы разрешить MTU большего размера для широкого вещания..

    
    vi /etc/opa-fm/opafm.xml
     	   

    Замерите это:

    
    <MulticastGroup>
      <Create>1</Create>
      <MTU>2048</MTU>
      <Rate>25g</Rate>
     	   

    на следующее (заменены MTU и скорость)

    
    <MulticastGroup>
     <Create>1</Create>
     <MTU>4096</MTU>
     <Rate>100g</Rate>
     	   
  2. Для принятия большего размера MTU в RHEL сделайте доступным сценарий 'ifup-ib'.

    
    vi /etc/sysconfig/network-scripts/ifup-ib
     	   

    Замените это:

    
        else
            echo datagram > /sys/class/net/${DEVICE}/mode
            # накрывать значение MTU где мы должны основываться на режиме
            [ -z "$MTU" ] && MTU=2044
            [ "$MTU" -gt 2044 ] && MTU=2044
        fi
     	   

    на следующее (две последние строки экранированы комментарием с помощью #):

    
        else
            echo datagram > /sys/class/net/${DEVICE}/mode
            # накрывать значение MTU где мы должны основываться на режиме
    #       [ -z "$MTU" ] && MTU=2044
    #       [ "$MTU" -gt 2044 ] && MTU=2044
        fi
     	   
  3. Остановите ib_ipoib на всех хостах, перезапустите свой Диспетчер инфраструктуры комплекта Intel® Omni-Path Fabric и затем перезапустите ib_ipoib как показано ниже:

    
    modprobe -r ib_ipoib
    systemctl stop opafm
    systemctl start opafm
    opainfo | grep PortState
       PortState:     Active
    modprobe ib_ipoib
    ifup ib0
    ifconfig ib0
    ib0: flags=4163lt;UP,BROADCAST,RUNNING,MULTICAST> mtu 4092
            inet 10.228.216.150 netmask 255.255.255.0 broadcast 10.255.255.255
            inet6 fe80::211:7501:165:b0ec prefixlen 64 scopeid 0x20

Тюнинг RPS и GSO для производительности IPoFabric

Регулировка Управления приёмом пакетов (RPS, Receive Packet Steering) может улучшать производительность когда большее число узлов клиентов осуществляют доступ к службам на одном или более серверов при помощи транспорта IPoFabric. С логической точки зрения RPS является программной реализацией масштабирования принимающей стороны. Будучи реализованной программно, существует потребность в последствии осуществлять вызовы в имеющемся пути данных. RPS выбирает определённый ЦПУ для выполнения обработки протокола поверх имеющегося обработчика прерываний.

Для RPS требуется компиляция ядра с символом CONFIG_RPS kconfig (значение по умолчанию для SMP). Даже будучи скомпилированным, RPS остаётся отключённым пока не будет настроен в явном виде. Перечень ЦПУ, для которых RPS может переправлять обмен может быть настроен для каждой очереди приёма с помощью записи файла sysfs:


/sys/class/net//queues/rx-/rps_cpus
		

Общая разгрузка сегментации (GSO, Generic Segmentation Offload) применяет протокол TCP или UDP для отправки пакетов большого размера. GSO выполняет операции сегментации/ фрагментирования, обходя имеющееся оборудование NIC. Это достигается затягиванием сегментации до тех пор, пока это представляется возможным, например, в случае, когда данный пкет обрабатывается даннум драйвером устройства. Это стало определяемым по умолчанию поведением в RHEL 7.4.

Тюнинг RPS для узлов процессора Intel® Xeon®

Следующая регулировка показала свою работоспособность в системах с двумя процессорами поколений семейства Intel® Xeon® E5 v4, а также Intel® Xeon® Scalable для служб, получающих доступ через клиентов поверх устройств ib0:


echo ffffff00 > /sys/class/net/ib0/queues/rx-0/rps_cpus
		

Тестирование было проведено для конфигураций из одного сервера и до пяти или шести клиентов с потоками iperf между этим сервером и его клиентами. В случае когда пять или более клиентов осуществляли доступ к одному серверу наблюдались значительные улучшения полосы пропускания. В этих тестах параметр драйвера hfi1 krcvqs=3 был установлен для семейства процессоров Intel® Xeon® E5 v4 с 44 ядрами и krcvqs=4 был установлен для семейства процессоров Intel® Xeon® E5 v4 с 48 ядрами (см. Установка параметров драйвера HFI1 относительно подробностей настройки этого или иных параметров драйвера.)

Следующий раздел описывает метод использования файла /etc/rc.local чтобы сделать все приведённые выше регулировки неизменными после перезагрузки.

Тюнинг RPS и GSO для узлов семейства продукции Intel® Xeon Phi™ x200

Для узлов продуктов семейства процессоров Intel® Xeon Phi™ x200 рекомендуется применять следующие регулировки для улучшения пропускной способности при использовании множества потоков обмена IPoFabric (IPoIB) для каждого из имеющихся узлов.

Применяя полномочия root выполните следующие шаги:

  1. Обеспечьте настройку драйверов OPA hfi1 driver и ipoib для автоматического запускаю

  2. В свой файл /etc/rc.local добавьте следующие две строки:

    
    ethtool -K  gso off
    echo "00,00000000,ffff0000" > /sys/class/net//queues/rx-0/rps_cpus
     	   

    где <IPoIB-port-name> зачастую ib0,однако может быть и ib1, opa? opa_ib0 и т.п. поэтому для единого общеупотребимого случая команда такова:

    
    ethtool -K ib0 gso off
    echo "00,00000000,ffff0000" > /sys/class/net/ib0/queues/rx-0/rps_cpus
     	   
  3. Убедитесь, что файл сценария /etc/rc.local является исполнимым, запустив:

    
    # chmod +x /etc/rc.local
     	   
  4. Для активации сделанных изменений выполните перезагрузку.

Тюнинг параметра TCP для производительности IPoFabric

Установленные по умолчанию параметры TCP, применяемые в операционных системах Red Hat и SUSE предоставляют разумную производительность для инфраструктуры Intel® Omni-Path IPoFabric, поэтому обычно нет нужды выполнять их регулировки.

Если у вас есть узлы, в которых память не проблема или они взаимодействуют всего с несколькими прочими узлами, а также в которых имеется обмен в двух направлениях (одновременные чтение/ запись), следующие регулировки могут улучщить общую пропускную способность в двух направлениях до 10%.

Для улучшения производительности обмена IPoFabric примените следующие настройки:

  • Для процессоров Intel® Xeon® и Intel® Xeon Phi™ настройки таковы:

    
    sudo sysctl -w net.ipv4.tcp_rmem="16384 349520 16777216"
    sudo sysctl -w net.ipv4.tcp_wmem="16384 349520 16777216"
    sudo sysctl -w net.core.rmem_max=16777216
    sudo sysctl -w net.core.wmem_max=16777216
    		
  • Для узлов только с процессорами Intel® Xeon® (без процессоров Intel® Xeon Phi™), установки следующие:

    
    sudo sysctl -w net.core.somaxconn=2048
    sudo sysctl -w net.ipv4.tcp_mtu_probing=1
    sudo sysctl -w net.core.netdev_max_backlog=250000
    		
[Замечание]Замечание

Приведённые выше команды установят эти параметры и окажут воздейтсвие на производительность только до следующей перезагрузки..

Чтобы сделать приведённые изменения постоянными, выполните следующее:

  1. Измените свой файл /etc/sysctl.conf чтобы добавить в него все соответствующие установки, которые были упомянуты ранее в таком формате как: net.ipv4.tcp_rmem="16384 349520 16777216".

  2. Исполните sysctl -p в сценарии запуска системы, например в /etc/rc.local, для применения обозначенных регулировок.

qperf

Чтобы выполнить тест qperf:

  1. Выполните тестирование ping с тем, чтобы убедиться что ib_ipoib исполняется.

  2. Если вы интересуетесь производительностью, выполните быстрый и полезный предварительны тест qperf и на узле сервера, и на узле клиента.

    
    New-VM -Name VM01 -Generation 2qperf <server ipoib addr> -m 1M –ca 7 tcp_bw
     	   

    В приведённой выше командной строке:

    Таблица 8-1.
    Опция Описание

    <server ipoib addr>

    Определяет IP порта ib0 данного узла сервера.

    -ca 7

    Может рассматриваться как регулировка, которая прикрепляет и сторону сервера, и сторону клиента в процессе qperf к ядру 7, который обычно расположен в самом первом сокете. Вы не захотите определять ядро 0 или прочие ядра с низкими номерами, в которых прерывания будут оказывать воздействие на эталонное тестирование.

    -m

    Определяет размер сообщения. В приводимом выше примере 1M определяет размер сообщения в 1 мегабайт.

  3. Нажмите sysctl -p в сценарии запуска системы, например в <Ctrl+C> на стороне сервера для прекращения данного теста.

iperf

iperf является инструментом для активного измерения достигаемого максимума полосы пропускания в сетевой среде, которая обслуживает обмен IP. Он поддерживает регулировку различных параметров, относящихся к замерам времени, протоколам, а также буферам. Для каждого теста iperf выдаёт отчёт о полосе пропускания, потерях, а также прочих параметрах.

Чобы улучшить пропускную способность архитектуры IPoIB Intel® Omni-Path выполните следующие командные строки iperf:

  1. Для сервера определите:

    
    iperf3 -s -1 -f G -A 6
     	   
  2. На клиенте задайте:

    
    iperf3 -c  -f G -t 12 -O 2 --len 1M -A 6
     	   

    В приведённой выше командной строке:

    Таблица 8-2.
    Опция Описание

    -A 6

    Устанавливает родственность (affinity) ядру 6.

    -t 12 -O 2

    Исполняет данный тест 12 секунд, однако пропускает (omit) первые две секунды при вычислении результатов полосы пропускания с низким выводом. Обычно это улучшает производительность и делает результаты производительности более стабильными.

    -f G

    Указывает, что результат вывода полосы пропускания должен приводиться в единицах гигабайт (GB).

    --len

    Указывает размер применяемого сообщения в байтах, в данном случае 1M = 1 Мегабайту.

    <server ipoib addr>

    Определяет IPoIB адрес данного сервера.

[Замечание]Замечание

Самая последняя версия доступна для выгрузки по адресу http://software.es.net/iperf/.