Содержание
Производительность и оптимизация: Настройка 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 это критично. Чтобы решить проблему, используются два механизма:
- PFC (Priority Flow Control, IEEE 802.1Qbb): Работает на уровне L2. Позволяет приостанавливать трафик не на всем физическом порту, а только для конкретного класса обслуживания (CoS/Priority), отправляя специальный кадр PAUSE (PAUSE frame) источнику. Обычно под RoCE выделяют приоритет 3.
- ECN (Explicit Congestion Notification): Работает на уровне L3. Вместо дропа пакета при заполнении буферов коммутатор маркирует заголовки пакетов (биты ECN), сообщая отправителю, что скорость передачи нужно снизить.
Шаг 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, чтобы убедиться, что механизмы оптимизации работают, а дропы отсутствуют:
- [X] Проверка счетчиков PFC: Кадры паузы (PAUSE Frames) должны появляться только при реальных перегрузках. Если счетчик растет непрерывно и лавинообразно, пороги ECN или буферы требуют увеличения.
Switch # show interfaces ethernet 1/1 counters pfc
- [X] Проверка отсутствия дропов (Discards): Главный показатель успешной настройки — нулевые значения в строках дропов на портах RoCE.
Switch # show interfaces ethernet 1/1 counters | grep -E "discard|drop"
- [X] Проверка статуса ECN: Убеждаемся, что коммутатор успешно маркирует пакеты при достижении порогов, а не сбрасывает их.
Switch # show qos wred-ecn-counters interface ethernet 1/1
