Настройка системы для карт Mellanox 100G

Подготовка системы

Работа с картами Mellanox требует последней версии драйвера и прошивки устройства Mellanox OFED. Стандартный драйвер Linux может не работать.

  1. По указанной ссылке в разделе Download в таблице выбрать драйвер для нужного дистрибутива операционной системы. Проверена работа на Debian (stable) и Ubuntu LTS.

  2. Загрузить драйвер последней версии (.tgz-архив).

  3. Распаковать архив и запустить установку. В процессе установки произойдёт обновление прошивки всех сетевых карт Mellanox, обнаруженных в системе.

    Установка с дополнительными утилитами для управления:

    ./mlnxofedinstall --upstream-libs --dpdk --basic --without-neohost-backend --without-neohost-sdk
    

    Обновление прошивки сетевых карт без установки:

    ./mlnxofedinstall --fw-update-only
    

    Перезагрузить систему после завершения при необходимости.

    Важно: при установке на Debian может не пройти проверка версии ОС. В таком случае нужно добавить опцию --skip-distro-check.

Настройка Mitigator´а

Особенностью работы с драйвером Mellanox является то, что они остаются под управлением Linux, то есть сетевые интерфейсы остаются в системе. Однако передавать через них трафик, когда работает Mitigator, нельзя.

Дальнейшие действия предполагают знакомство с Compose-файлами.

  1. Убедиться, что не происходит попытки привязки PCI-адресов к другому драйверу (например, адреса НЕ встречаются в nics.conf)

  2. Убрать секцию networks для сервиса data-plane в файле docker-compose.yml.

  3. Добавить параметр network_mode: host сервису data-plane в файле docker-compose.override.yml.

  4. Добавить адрес хостовой машины для сервисов backend и fwstats в файле docker-compose.override.yml:

    services:
      backend:
        extra_hosts:
        - "data-plane.mitigator:192.0.2.1"
    
      fwstats:
        extra_hosts:
        - "data-plane.mitigator:192.0.2.1"
    

    Вместо 192.0.2.1 пишется реальный адрес хостовой машины (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-интерфейс.

Эти правила должны применяться при запуске системы.

Оптимизация производительности

  1. Оптимизация параметров прошивки сетевых карт. Применяется через скрипт для нужной платформы один раз при установке новой сетевой карты (требуется перезагрузка системы):

  2. Оптимизация настроек сетевых карт для текущей сессии. Применяется при старте системы через автоматизированный скрипт, прописанный в автозагрузку.

  3. Включение режима pass-through для IOMMU. Увеличивает производительность (параметр ядра Linux):

    iommu=pt

Оптимизация производительности для AMD EPYC и Ryzen Threadripper

Настройка BIOS

  1. Включение Extended APIC. Рекомендация AMD для серверных CPU:

    Local APIC mode: x2APIC

  2. Режим максимальной производительности CPU:

    Determinism Control: Enable
    Determinism Slider: Power

  3. Отключение энергосбережения на шине. Улучшает производительность:

    APBDIS: 1
    Fixed SOC P-State: P0

  4. Приоритетный режим работы I/O PCI-устройства. Существенно улучшает производительность. Включается для одной сетевой карты указанием номера её PCI-шины. При наличии нескольких карт включается для той, где наблюдается пониженная производительность:

    Preferred I/O: Manual
    Preferred I/O Bus: $pci_bus_num

  5. Включение поддержки 10-битного расширенного тэга для устройств PCIe Gen 4. Увеличивает пропускную способность шины:

    PCIe Ten Bit Tag Support: Enable