Сетевые функции в 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, но требует тщательной подготовки и понимания ограничений. Тестируйте на своём стенде, измеряйте реальные показатели и не полагайтесь на маркетинговые обещания.