Сетевые функции в Linux традиционно выполняются в ядре на CPU: маршрутизация, NAT, балансировка нагрузки. С ростом трафика процессор становится узким местом, и на помощь приходят SmartNIC — сетевые карты с программируемым ускорителем (ASIC или FPGA). Mellanox ConnectX-6 Lx — один из представителей этого класса. В статье разберём, как с помощью OVS-DOCA перенести обработку пакетов на карту, какие шаги нужны для тестирования и на что обратить внимание.
Что такое OVS-DOCA и зачем он нужен
Open vSwitch (OVS) — популярный виртуальный коммутатор, который может работать в программном режиме (на CPU) или использовать аппаратное ускорение. DOCA (Data Center On-a-Chip Architecture) — фреймворк NVIDIA для программирования SmartNIC. OVS-DOCA — это реализация OVS, которая выгружает потоки (flows) на ASIC карты ConnectX. В результате операции коммутации, маршрутизации, NAT и балансировки выполняются в железе, разгружая CPU.
Основные преимущества: снижение нагрузки на процессор, потенциально более высокая пропускная способность и низкая задержка. Однако есть и ограничения: не все функции OVS поддерживаются в аппаратном режиме, а настройка требует понимания архитектуры DOCA и драйверов.
Подготовка стенда и настройка окружения
Для тестирования потребуется сервер с установленной картой Mellanox ConnectX-6 Lx (или аналогичной из серии ConnectX-6), поддерживаемой OVS-DOCA. Проверьте совместимость версий: DOCA, драйвера OFED, OVS и прошивки карты. Обычно используются последние стабильные релизы.
Шаги по настройке:
- Установите драйвер MLNX_OFED и DOCA SDK согласно документации NVIDIA.
- Убедитесь, что прошивка карты обновлена и поддерживает нужные offload-функции (проверьте через mlxconfig и ethtool -k).
- Соберите OVS с поддержкой DOCA (или установите готовый пакет).
- Создайте мост OVS и добавьте порты, привязанные к карте (representor ports).
- Активируйте аппаратное ускорение, например: ovs-vsctl set Open_vSwitch . other_config:hw-offload=true.
Важно: для работы OVS-DOCA可能需要 включить SR-IOV и создать виртуальные функции (VF). Каждая VF имеет representor-порт, который добавляется в OVS. Проверьте, что все порты в состоянии UP.
Тестирование маршрутизации, NAT и балансировки
После настройки стенда можно приступать к проверке функций. Для начала убедитесь, что OVS работает в аппаратном режиме: выполните ovs-appctl dpctl/dump-flows и посмотрите, есть ли потоки с атрибутом offloaded:yes. Если потоки не выгружаются, проверьте логи и настройки.
Далее настройте правила:
- Маршрутизация: добавьте маршруты через OVS (например, с помощью ovs-ofctl add-flow или через контроллер). Убедитесь, что пакеты между подсетями проходят, а CPU не загружен.
- NAT: настройте SNAT/DNAT в OVS. Обратите внимание, что не все виды NAT поддерживаются аппаратно; проверьте таблицу поддерживаемых функций в документации DOCA.
- L4-балансировка: создайте группу с несколькими бэкендами и правило балансировки. Проверьте распределение трафика и отсутствие ошибок.
Для измерения производительности используйте генератор трафика (например, iperf3, trex или pktgen). Сравните пропускную способность и загрузку CPU в двух конфигурациях: с аппаратным ускорением и без (OVS в программном режиме).
Типичные ошибки и критерии выбора
При работе с OVS-DOCA новички часто сталкиваются с проблемами:
- Несовпадение версий DOCA, драйвера и OVS — приводит к ошибкам при выгрузке потоков.
- Неправильная настройка representor-портов: забыли добавить в мост или не включили SR-IOV.
- Ожидание полной поддержки всех функций OVS в железе — некоторые действия (например, сложные ACL) могут выполняться на CPU.
- Игнорирование ограничений ASIC: таблицы потоков имеют ограниченный размер, при переполнении потоки уходят в программный путь.
Критерии выбора: если ваш профиль нагрузки включает простые L3/L4-операции с высокими требованиями к пропускной способности и низкой задержке, OVS-DOCA на ConnectX-6 Lx может дать выигрыш. Если же требуется сложная обработка (многоуровневые ACL, глубокая инспекция пакетов), возможно, стоит рассмотреть гибридный подход или более мощные модели SmartNIC.
В заключение: OVS-DOCA — рабочий инструмент для разгрузки CPU, но требует тщательной подготовки и понимания ограничений. Тестируйте на своём стенде, измеряйте реальные показатели и не полагайтесь на маркетинговые обещания.