Работа с картами Mellanox требует последней версии драйвера и прошивки устройства Mellanox OFED. Стандартный драйвер Linux может не работать.
По указанной ссылке в разделе Download в таблице выбрать драйвер для нужного дистрибутива операционной системы. Проверена работа на Debian (stable) и Ubuntu LTS.
Загрузить драйвер последней версии (.tgz
-архив).
Распаковать архив и запустить установку. В процессе установки произойдёт обновление прошивки всех сетевых карт Mellanox, обнаруженных в системе.
Установка с дополнительными утилитами для управления:
./mlnxofedinstall --upstream-libs --dpdk --basic --without-neohost-backend --without-neohost-sdk
Обновление прошивки сетевых карт без установки:
./mlnxofedinstall --fw-update-only
Перезагрузить систему после завершения при необходимости.
Важно: при установке на Debian может не пройти проверка версии
ОС. В таком случае нужно добавить опцию --skip-distro-check
.
Особенностью работы с драйвером 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:
gateway:
environment:
GATEWAY_RULES: "8888:${MITIGATOR_HOST_ADDRESS}:8888"
extra_hosts:
- "data-plane.mitigator:${MITIGATOR_HOST_ADDRESS}"
Переменная MITIGATOR_HOST_ADDRESS
должна быть задана в .env
и равна реальному адресу хостовой машины
(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-интерфейс.
Эти правила должны применяться при запуске системы.
Оптимизация параметров прошивки сетевых карт. Применяется через скрипт для нужной платформы один раз при установке новой сетевой карты (требуется перезагрузка системы):
Оптимизация настроек сетевых карт для текущей сессии. Применяется при старте системы через автоматизированный скрипт, прописанный в автозагрузку.
Включение режима pass-through для IOMMU. Увеличивает производительность (параметр ядра Linux):
iommu=pt
Включение Extended APIC. Рекомендация AMD для серверных CPU:
Local APIC mode: x2APIC
Режим максимальной производительности CPU:
Determinism Control: Enable
Determinism Slider: Power
Отключение энергосбережения на шине. Улучшает производительность:
APBDIS: 1
Fixed SOC P-State: P0
Приоритетный режим работы I/O PCI-устройства. Существенно улучшает производительность. Включается для одной сетевой карты указанием номера её PCI-шины. При наличии нескольких карт включается для той, где наблюдается пониженная производительность:
Preferred I/O: Manual
Preferred I/O Bus: $pci_bus_num
Включение поддержки 10-битного расширенного тэга для устройств PCIe Gen 4. Увеличивает пропускную способность шины:
PCIe Ten Bit Tag Support: Enable