Меш MCX516A-CCAT на 100G DAC: lshw пишет 40Gbit/s, а один поток iperf3 упирается в 21 Гбит/с
У нас трёхнодовый кластер, узлы соединены напрямую друг с другом по 100G DAC, без коммутатора в тракте, интерфейсы объединены в broadcast-бонд, чтобы трафик репликации имел свою собственную фабрику. Прежде чем давать реальную нагрузку, я хотел получить базовые цифры, и они не сходятся друг с другом.
- 3x Mellanox ConnectX-5 EN, MCX516A-CCAT, два порта QSFP28
- по одному 100G DAC между каждой парой узлов
- хосты AMD EPYC, Proxmox на всех трёх
ethtool вполне доволен:
# ethtool ens1
Settings for ens1:
Supported link modes: 100000baseCR4/Full
Advertised link modes: 100000baseCR4/Full
Speed: 100000Mb/s
Duplex: Full
Link detected: yes
lshw - нет:
# lshw -class network
*-network
description: Ethernet interface
vendor: Mellanox Technologies
capacity: 40Gbit/s
А iperf3 между двумя узлами держится на уровне примерно 21 Гбит/с, что не похоже ни на одну из двух цифр.
Уже сделано:
- переставил кабель на второй порт обеих карт - без изменений
- поменял на другой DAC того же типа - без изменений
- линк держится всё время, ошибки по счётчикам не растут
Так какой из двух инструментов мне врёт, и за что браться - за кабель, карту или драйвер?
Comments 5
Ничто из того, что вы выложили, не указывает на DAC. Здесь происходят две не связанные друг с другом вещи.
Первое - расхождение.
lshw -class networkпечатает показатель ёмкости, который вычисляет сам, и на этих картах он вполне спокойно напишетcapacity: 40Gbit/sпро линк, поднявшийся на 100G. Согласованную скорость показываетethtool, а у вас тамSpeed: 100000Mb/sс заявленным100000baseCR4/Full. Эта сторона в порядке, чинить тут нечего.Второе - пропускная способность. Прежде чем трогать что-то ещё, проверьте слот:
Если
LnkStaсогласовался на 2.5GT/s приLnkCapв 8GT/s, вы упёрлись в потолок далеко ниже провода, и никакая смена кабелей не поможет. Переустановите карту и убедитесь, что она сидит в слоте, реально разведённом на полную ширину.Затем перестаньте измерять одним потоком:
Около 21 Гбит/с - это примерно то, что даст одно ядро на хосте такого класса, так что само по себе это число почти ничего не говорит. Следите за загрузкой CPU во время прогона и посмотрите, что делают состояния простоя: ядра, уходящие в глубокие C-states между всплесками, реально отъедают полосу на такой скорости.
Прежде чем заказывать замену чему-либо, выложите строку
LnkStaизlspci -vvдля этой карты и точную команду iperf3, которую использовали. Один поток на 100G измеряет одно ядро CPU, а не линк, и на этом люди теряют дни. И подтвердите, что второй порт реально несёт другое плечо меша во время теста, а не простаивает: один слот, питающий два живых порта 100G, - это совсем другой бюджет по сравнению с одним. Я бы пока отложилlshw, это не тот инструмент для этого вопроса.Одна поправка насчёт C-states: если хосты на EPYC, ручки
intel_idle, которые копируют во все подобные темы, вам ничем не помогут, этот драйвер вообще не задействован на AMD. Рычаг, который сработал у меня -processor.max_cstate=2в командной строке ядра. Та же идея, другая платформа. Остальное в том сообщении верно, в частности насчёт того, что не стоит читать согласованную скорость изlshw.Немного другая неисправность, то же семейство железа, стоит исключить, как только слот приведён в порядок: прямой меш из портов ConnectX-5 QSFP28 очень легко испортить на уровне 3. У меня было три узла на MCX516A-CCA_Ax, прошивка 16.35.4030 с драйвером DOCA 2.8.0, соединены медным DAC MCP1600-C003E30L на 3 м. Каждый линк сообщал active на 100 Гбит/с, и ни один пинг не проходил. Все шесть интерфейсов меша имели адреса из одной и той же подсети 10.5.5.x без коммутатора где-либо в тракте, так что у ядра не было способа решить, к какому физическому порту относится данный адрес назначения. По одной подсети на пару узлов, 10.5.5.x, 10.5.6.x и 10.5.7.x, и всё заработало. Стоит прогнать
ip aиip routeна всех трёх коробках, прежде чем кто-то обвинит медь.Оба момента попали в цель.
lspci -vvпоказал, что карта согласовалась на 2.5GT/s противLnkCapв 8GT/s, так что это был подозреваемый номер один. Переставил карты в другие слоты на всех трёх коробках,LnkStaтеперь поднимается на 8GT/s, и сiperf3 -P 8та же пара узлов сразу превысила однопотоковую цифру.Я также отказался от broadcast-бонда и пересобрал меш на Open vSwitch с RSTP. При iperf, распределённом по трём потокам CPU и обоим портам, я теперь измеряю около 95 Гбит/с, что достаточно близко к линейной скорости для того, чем занимается этот кластер.
lshwвсё ещё настаивает на 40Gbit/s, и я перестал на него смотреть.