Производительность 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, предварительным условием для достижения наилучшей производительности является наличие включённым в инфраструктуре 6 кБ MTU.
Для автоматического включения установок MTU 8KB:
-
Внесите исправления в свой файл
/etc/sysconfig/network-scripts/ifcfg-ib0
. -
Замените следующие настройки:
ONBOOT=yes NM_CONTROLLED=no MTU=65520 CONNECTED_MODE=yes
-
Если в вашей системе имеются два порта OPA, исполните шаги 1 и 2 для своего файла
ifcfgib1
.
Совет | |
---|---|
Если ваши названия интерфейсов не стандартные (не применяют соглашения |
Хотя режим соединений (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:
-
Измените свой файл настроек 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>
-
Для принятия большего размера 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
-
Остановите 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, 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.
Следующая регулировка показала свою работоспособность в системах с двумя процессорами поколений семейства 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
чтобы сделать все приведённые выше
регулировки неизменными после перезагрузки.
Для узлов продуктов семейства процессоров Intel® Xeon Phi™ x200 рекомендуется применять следующие регулировки для улучшения пропускной способности при использовании множества потоков обмена IPoFabric (IPoIB) для каждого из имеющихся узлов.
Применяя полномочия root выполните следующие шаги:
-
Обеспечьте настройку драйверов OPA hfi1 driver и ipoib для автоматического запускаю
-
В свой файл
/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
-
Убедитесь, что файл сценария
/etc/rc.local
является исполнимым, запустив:# chmod +x /etc/rc.local
-
Для активации сделанных изменений выполните перезагрузку.
Установленные по умолчанию параметры 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
Замечание | |
---|---|
Приведённые выше команды установят эти параметры и окажут воздейтсвие на производительность только до следующей перезагрузки.. Чтобы сделать приведённые изменения постоянными, выполните следующее:
|
qperf
Чтобы выполнить тест qperf:
-
Выполните тестирование
ping
с тем, чтобы убедиться что ib_ipoib исполняется. -
Если вы интересуетесь производительностью, выполните быстрый и полезный предварительны тест 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 мегабайт.
-
Нажмите
sysctl -p
в сценарии запуска системы, например в<Ctrl+C>
на стороне сервера для прекращения данного теста.
iperf является инструментом для активного измерения достигаемого максимума полосы пропускания в сетевой среде, которая обслуживает обмен IP. Он поддерживает регулировку различных параметров, относящихся к замерам времени, протоколам, а также буферам. Для каждого теста iperf выдаёт отчёт о полосе пропускания, потерях, а также прочих параметрах.
Чобы улучшить пропускную способность архитектуры IPoIB Intel® Omni-Path выполните следующие командные строки iperf:
-
Для сервера определите:
iperf3 -s -1 -f G -A 6
-
На клиенте задайте:
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/. |