Содержание

Производительность и оптимизация: Настройка QoS, RoCE и буферов на Mellanox SX6036

При использовании высокоскоростных адаптеров ConnectX и коммутатора Mellanox SX6036 в режиме Ethernet стандартные механизмы передачи пакетов (Best Effort) могут приводить к потерям данных при пиковых нагрузках. Для задач, критичных к задержкам — таких как работа систем хранения (NVMe-oF, iSER), миграция виртуальных машин или распределенные вычисления — используется технология RoCE (RDMA over Converged Ethernet).

Чтобы RoCE работал эффективно, фабрика должна стать «Lossless» (без потерь пакетов). В этой статье мы разберем, как настроить приоритизацию трафика (QoS), включить управление потоком (PFC) и явное уведомление о перегрузках (ECN), а также оптимизировать буферы портов на коммутаторе SX6036 под управлением MLNX-OS.

Теория: Как сделать Ethernet сетью без потерь (Lossless)

В отличие от InfiniBand, который изначально спроектирован как сеть без потерь на аппаратном уровне, стандартный Ethernet при перегрузках просто отбрасывает (дропает) пакеты. Для RoCEv2 это критично. Чтобы решить проблему, используются два механизма:

Шаг 1. Настройка QoS и PFC на коммутаторе SX6036

Заходим в CLI MLNX-OS и настраиваем глобальные параметры качества обслуживания, а также включаем PFC для приоритета «3» на портах, куда подключены хосты виртуализации (или СХД).

Входим в режим конфигурации

Switch > enable
Switch # configure terminal

Включаем поддержку QoS глобально

Switch (config) # qos enable

Настраиваем trust-режим для доверия тегам приоритета из пакетов (802.1p / CoS)

Switch (config) # qos trust cos

Переходим к настройке интерфейсов (например, порты 1/1-1/4 или созданный ранее port-channel 1)

Switch (config) # interface ethernet 1/1-1/4

Включаем управление потоком на основе приоритетов (PFC)
Отключаем стандартный глобальный flow-control (admin) и включаем pfc

Switch (config interface ethernet 1/1-1/4) # flowcontrol control force-pfc
Switch (config interface ethernet 1/1-1/4) # qos pfc priority 3 enable

Проверяем установленные приоритеты: направляем priority 3 в соответствующий пул буфера (traffic class)
На архитектуре SwitchX-2 по умолчанию priority 3 привязан к TC3

Switch (config interface ethernet 1/1-1/4) # exit

Шаг 2. Настройка ECN (Управление перегрузками)

Маркировка ECN настраивается для пулов буферов (Traffic Classes). Мы укажем коммутатору начинать маркировку пакетов, когда глубина очереди для трафика RoCE (приоритет 3 / TC3) начинает превышать заданные пороги.

Настройка порогов WRED/ECN для трафика класса 3
Задаем минимальный порог, максимальный порог и вероятность маркировки

Switch (config) # qos wred-ecn c-mode am-threshold
Switch (config) # interface ethernet 1/1-1/4
Switch (config interface ethernet 1/1-1/4) # qos traffic-class 3 wred-ecn minimum-threshold 150 maximum-threshold 1500 probability 100
Switch (config interface ethernet 1/1-1/4) # exit

Примечание: Пороги измеряются в килобайтах или страницах буфера в зависимости от версии MLNX-OS. Значения 150КБ/1500КБ являются классическими стартовыми рекомендациями NVIDIA для предотвращения лавинообразных пауз.

Шаг 3. Оптимизация буферов портов (Buffer Tuning)

Коммутатор SX6036 обладает общим разделяемым пулом буферной памяти. Чтобы один «зафлудивший» порт не исчерпал весь буфер свитча, необходимо правильно распределить гарантированные и динамические лимиты для установленного Lossless-класса (TC3), увеличив так называемый Headroom — запас памяти, необходимый для приема пакетов, которые уже летят по кабелю после отправки кадра PAUSE.

Настройка пула буфера под Lossless трафик
Выделяем гарантированную часть памяти под Traffic Class 3 для предотвращения дропов

Switch (config) # qos pool default-pool dynamic-size 4
Switch (config) # interface ethernet 1/1-1/4
Switch (config interface ethernet 1/1-1/4) # qos share-buffer traffic-class 3 max-dynamic-buffer 4
Switch (config interface ethernet 1/1-1/4) # exit

Сохраняем изменения в память

Switch # configuration write

Шаг 4. Настройка RoCE и PFC на стороне хостов (Краткий обзор)

Настройка коммутатора — это лишь половина дела. Хосты также должны быть настроены на работу с приоритетом 3.

Для VMware vSphere (ESXi)

В настройках сетевых адаптеров ConnectX через консоль ESXi необходимо сопоставить трафик RoCE с тегом CoS 3 и активировать PFC:
Проверяем и включаем PFC приоритета «3» на стороне драйвера Mellanox

esxcli system module parameters set -m mlx5_core -p "pfctx=0x08 pfcrx=0x08"

(Параметр 0x08 — это битовая маска, соответствующая 3-му приоритету: 1 « 3 = 8 = 0x08)

Для Proxmox VE (Linux)

Используется утилита lldpad или ручная конфигурация через mlnx_qos:
\Включаем PFC для приоритета «3» на интерфейсе enp1s0f0

mlnx_qos -i enp1s0f0 --pfc 0,0,0,1,0,0,0,0

Мониторинг производительности

После запуска трафика выполняем диагностику на коммутаторе SX6036, чтобы убедиться, что механизмы оптимизации работают, а дропы отсутствуют:

Switch # show interfaces ethernet 1/1 counters pfc
Switch # show interfaces ethernet 1/1 counters | grep -E "discard|drop"
Switch # show qos wred-ecn-counters interface ethernet 1/1