В следующих командах $pciaddr
— PCI-адрес устройства (например, 01:00.0
),
$netdev
— имя устройства в Linux (например, enp1s0f0
).
Работа с картами Mellanox требует последней версии драйвера и прошивки устройства Mellanox OFED. Стандартный драйвер Linux может не работать.
По указанной ссылке в разделе Download в таблице выбрать драйвер для нужного дистрибутива операционной системы. Проверена работа на Ubuntu 18.04, Ubuntu 20.04, Debian 10.
Загрузить драйвер последней версии (.tgz
-архив).
Распаковать архив и запустить установку. В процессе установки произойдёт обновление прошивки всех сетевых карт Mellanox, обнаруженных в системе.
Вариант A. Если достаточно драйвера и минимального набора утилит:
./mlnxofedinstall --upstream-libs --dpdk
Нажать y
. Перезагрузить систему после завершения.
Важно: при установке на Debian 10 для указания конкретной
версии дистрибутива может потребоваться правка файла distro
в корне архива.
Вариант B. Если требуется установка с дополнительными утилитами для управления картами Mellanox:
./mlnxofedinstall --upstream-libs --dpdk --basic --without-neohost-backend --without-neohost-sdk
Нажать y
. Перезагрузить систему после завершения.
Вариант C. Если Mellanox OFED уже установлен, но требуется обновление прошивки сетевых карт:
./mlnxofedinstall --fw-update-only
Перезагрузить систему после завершения при необходимости.
Особенностью работы с драйвером Mellanox является то, что они остаются под управлением Linux, то есть сетевые интерфейсы остаются в системе. Однако передавать через них трафик, когда работает Mitigator, нельзя.
Дальнейшие действия предполагают знакомство с Compose-файлами.
Убедиться, что не происходит попытки привязки PCI-адресов к другому драйверу (например, адреса НЕ встречаются в nics.conf)
Убрать секцию networks
для сервиса data-plane
в файле docker-compose.yml
.
Добавить параметр network_mode: host
сервису data-plane
в файле docker-compose.override.yml
.
Добавить адрес хостовой машины для сервисов
backend
и fwstats
в файле docker-compose.override.yml
:
services:
backend:
extra_hosts:
- data-plane.mitigator: <addr>
fwstats:
extra_hosts:
- data-plane.mitigator: <addr>
где <addr>
— адрес хостовой машины (127.0.0.1 и localhost не подходят).
С настройками выше к обработчику пакетов может подключиться кто угодно.
Рекомендуется запретить на сервере весь входящий трафик, кроме необходимого для управления (обычно SSH, HTTP и HTTPS). В этом случае дополнительных действий ниже не нужно.
Требуется запретить доступ к TCP-портам 8888 и 8889 с внешних интерфейсов. При этом должен сохраниться доступ из контейнеров, адреса и интерфейсы которых меняются при перезапуске.
Одно из решений на основе iptables — выполнить команды:
iptables -A INPUT --protocol tcp --in-interface eno1 --dport 8888 -j DROP
iptables -A INPUT --protocol tcp --in-interface eno1 --dport 8889 -j DROP
Здесь eno1
— management-интерфейс.
Эти правила должны применяться при запуске системы.
В Debian и Ubuntu можно сделать это через cron
:
cat >/etc/cron.d/mitigator <<END
@reboot /usr/sbin/iptables -A INPUT --protocol tcp --in-interface eno1 --dport 8888 -j DROP
@reboot /usr/sbin/iptables -A INPUT --protocol tcp --in-interface eno1 --dport 8889 -j DROP
END
chmod +x /etc/cron.d/mitigator
Все команды, где встречается $pciaddr
или $netdev
,
нужно выполнять для каждого порта Mellanox.
Отключение Ethernet pause frames:
ethtool -A $netdev rx off tx off
Увеличение параметра PCI Max Read Request до 1K. Оптимизирует передачу данных по PCI-шине для больших пакетов:
setpci -s $pciaddr 68.w
результатом будет 4 цифры ABCD
, выполнить
setpci -s $pciaddr 68.w=3BCD
(первая цифра заменяется тройкой).
Включение компрессии данных при приеме пакетов. Оптимизирует передачу данных по PCI-шине (параметр прошивки порта, указывается один раз, требуется перезагрузка):
mstconfig -d $pciaddr s CQE_COMPRESSION=1
Включение Multi-Packet Rx Queue. Оптимизирует передачу данных по PCI-шине для маленьких пакетов на больших скоростях.
Важно: требуется для работы с портом в direct-режиме; в обычном режиме включать не рекомендуется.
В docker-compose.override.yml
для сервиса data-plane
добавить
переменную окружения DATA_PLANE_DPDK_EXTRA_ARGS
со значением
-w $pciaddr,mprq_en=1
для каждого используемого порта,
например, для портов af:00.0
и af:00.1
:
services:
data-plane:
network: host
environment:
DATA_PLANE_DPDK_EXTRA_ARGS: >
-w af:00.0,mprq_en=1
-w af:00.1,mprq_en=1
Включение Extended APIC, рекомендация AMD для серверных CPU:
Local APIC mode: x2APIC
Режим максимальной производительности CPU:
Determinism Control: Enable
Determinism Slider: Power
Отключение энергосбережения на шине. Убирает потери трафика на байпасе:
APBDIS: 1
Fixed SOC P-State: P0
Особый режим работы PCI-устройства. Существенно улучшает производительность, убирает потери трафика на байпасе. Включается для одной сетевой карты указанием номера её PCI-шины. При наличии нескольких карт включается для той, где наблюдается пониженная производительность:
Preferred I/O: Manual
Preferred I/O Bus: $pci_bus_num
Включение поддержки 10-битного расширенного тэга для устройств PCIe Gen 4. Увеличивает пропускную способность шины:
PCIe Ten Bit Tag Support: Enable
Включение режима pass-through для IOMMU. Увеличивает производительность:
iommu=pt
Указываются один раз для каждого порта, требуется перезагрузка.
Включение PCIe Relaxed Write Ordering. Необходимо для достижения максимальной производительности на этих платформах:
mstconfig -d $pciaddr s PCI_WR_ORDERING=1