Рейтинг:1

Не удалось заставить Mellanox ConnectX-3 работать с трансивером/кабелем

флаг cn

Я пытаюсь обновить свою локальную сеть до 40G, но, похоже, я столкнулся с проблемой. У меня есть сетевые карты Mellanox ConnectX-3 VPI CX353A. ебэй, обновили прошивку и установили драйвера. После переключения приемопередатчиков/кабеля и покупки инструмента для перекодирования кабелей я все еще не могу найти проблему. Я считаю, что проблема заключается в драйверах, они видят, что трансивер подключен, но, похоже, не хотят его использовать.

Мое оборудование:

https://pastebin.com/ucdYv1rb

Версия драйвера MLNX OFED: 4.9-3.1.5

Сетевые кабели/трансиверы:

https://www.fs.com/products/30775.html

https://www.fs.com/products/69907.html

Настроен для работы с моим коммутатором MikroTik CRS354-48G-4S+2Q+RM. Я могу изменить поставщика, с которым должны работать кабели, у меня есть инструмент перекодирования для кабелей FS.

Результаты различных команд InfiniBand, которые я нашел: https://pastebin.com/8ZWb7wjb

Вывод ethtool -m

root@testserver:/home/test# ethtool -m enp1s0
        Идентификатор: 0x0d (QSFP+)
        Расширенный идентификатор: 0x00
        Расширенное описание идентификатора: макс. 1,5 Вт. Потребляемая мощность
        Расширенное описание идентификатора: нет CDR в TX, нет CDR в RX
        Расширенное описание идентификатора: класс высокой мощности (> 3,5 Вт) не включен
        Разъем: 0x23 (без разъема)
        Коды приемопередатчика: 0x08 0x00 0x30 0x00 0x40 0x00 0x80 0xd5
        Тип трансивера: 40G Ethernet: 40G Base-CR4
        Тип трансивера: SAS 6.0G
        Тип трансивера: SAS 3.0G
        Тип трансивера: FC: короткое расстояние (S)
        Тип трансивера: FC: Twin Axial Pair (TW)
        Тип трансивера: FC: 1200 Мбайт/сек
        Тип трансивера: FC: 800 МБ/с
        Тип трансивера: FC: 400 Мбайт/с
        Тип трансивера: FC: 200 Мбайт/с
        Тип трансивера: FC: 100 Мбайт/с
        Кодировка: 0x00 (не указано)
        BR, Номинал: 10300 Мбит/с
        Идентификатор скорости: 0x00
        Длина (SMF, км): 0 км
        Длина (OM3 50 мкм): 0 м
        Длина (OM2 50 мкм): 0 м
        Длина (OM1 62,5 мкм): 0 м
        Длина (медный или активный кабель): 1 м
        Технология передатчика: 0xa0 (некомпенсированный медный кабель)
        Затухание на частоте 2,5 ГГц: 8 дБ
        Затухание на частоте 5,0 ГГц: 11 дБ
        Затухание на частоте 7,0 ГГц: 0 дБ
        Затухание на частоте 12,9 ГГц: 0 дБ
        Название производителя: ФС
        OUI поставщика: 00:40:20
        Номер поставщика: QSFP-PC01
        Версия поставщика: A
        Серийный номер поставщика: MT1422VS08180
        Код даты: 190228
        Соответствие редакции: редакция не указана
        Температура модуля: 0,00 градусов C / 32,00 градусов F
        Напряжение модуля: 0,0000 В

Вывод ethtool:

root@testserver:/home/test# ethtool enp1s0
Настройки для enp1s0:
        Поддерживаемые порты: [FIBER]
        Поддерживаемые режимы связи: 1000baseKX/Full
                                10000baseKX4/полный
                                10000 базовых крон/полный
                                40000baseCR4/полный
                                40000baseSR4/полный
                                56000baseCR4/полный
                                56000baseSR4/полный
        Поддерживаемое использование кадра паузы: симметричный только для приема
        Поддерживает автосогласование: Да
        Поддерживаемые режимы FEC: не сообщается
        Рекламируемые режимы ссылок: 1000baseKX/Full
                                10000baseKX4/полный
                                10000 базовых крон/полный
                                40000baseCR4/полный
                                40000baseSR4/полный
        Рекламируемое использование кадра паузы: Симметричный
        Рекламируемое автосогласование: Да
        Заявленные режимы FEC: не сообщается
        Скорость: Неизвестно!
        Дуплекс: Неизвестно! (255)
        Порт: ВОЛОКНО
        ПЬЯД: 0
        Приемопередатчик: внутренний
        Автосогласование: выключено
        Поддерживает пробуждение: d
        Пробуждение: д
        Текущий уровень сообщения: 0x00000014 (20)
                               ссылка еслидаун
        Ссылка обнаружена: нет
Рейтинг:1
флаг cn

TL;DR Автосогласование было отключено на моем коммутаторе и имело рекомендуемые производителем настройки для соединения 40G. Включение автосогласования решило проблему.

Я хочу ответить на свой вопрос подробностями моего приключения на этом пути по настройке моей 40-гигабитной сети. Таким образом, у любого, кто попробует это в будущем, будут ориентиры.

Я думаю, важно отметить, что я использовал свою сетевую карту 40G в режиме Ethernet, а не Infiniband. Драйверы Ethernet, похоже, работали, но я остановился на драйверах OFED, потому что они работали, и я не хотел больше возиться с ними. Если вы планируете получить такую ​​​​настройку, убедиться ваша карта поддерживает режим Ethernet!

Что я пробовал

Получив коммутатор, сетевые карты и кабели, я установил драйверы/программное обеспечение OFED (OpenFabrics Enterprise Distribution), предоставленные Mellanox/Nvidia. Когда им не удалось установить связь, я использовал встроенные в программное обеспечение инструменты для обновления их прошивки. Это было довольно просто, единственная проблема, с которой я столкнулся, заключалась в том, чтобы найти последнюю версию прошивки .bin для моих конкретных карт. Прошивка, которую я использовал, была 2.33.5000, еще довольно старая, но более новая, чем та, что была на картах.

После того, как это не удалось, я предположил, что виновниками были кабели/трансиверы (один блок). Я заменил кабели, которые я изначально получил, на пару (56G 10м АОС + 56G 2м ЦАП > 40G 11м АОС + 40G 1м ЦАП) специальных кабелей, которые были разработаны для конкретного коммутатора Mikrotik, который я купил. Поскольку они были изготовлены по индивидуальному заказу, их доставка заняла месяц. Как только они прибыли и не работали, я был в тупике и начал искать помощь на различных форумах. Вскоре мне предложили купить инструмент с FS.com, что позволило бы мне перекодировать поставщика на приемопередатчиках, чтобы заставить сетевую карту работать.

Поскольку кабели были настроены для коммутатора, я предположил, что это сетевая карта не сотрудничает. Настройка трансивера на IBM или Mellanox не сработала.После обращения за дополнительной помощью несколько человек предложили мне найти документацию по сетевым адаптерам и найти совместимые кабели/трансиверы. Я нашел PDF-файл (хотя и не предоставленный и не созданный IBM/Mellanox), в котором перечислены некоторые совместимые номера деталей, предоставленные FS.com. Итак, я приобрел ЦАП IBM 49Y7890 1м с FS.com.

Как только он прибыл, я обнаружил, что это тоже не решение. От безысходности нашел несколько веток людей, которые прошивали свои карты на настоящую прошивку Mellanox. Я решил попробовать свои силы в этом. После некоторого устранения неполадок, связанных с запуском программы обновления, я успешно прошил прошивку версии 2.42.5000 с новым PSID MT_1100120019 (подробности о том, как это может все испортить, см. в параграфе 4 «Это еще не конец». Смотрите здесь, как перекрестить вспышку). После того, как эта попытка потерпела неудачу, по этому вопросу состоялись дальнейшие обсуждения, и в конце концов я пришел к выводу, что мне следует протестировать сетевые карты, напрямую подключенные друг к другу. После того, как я соединил сетевые карты вместе и настроил их подсеть, я увидел скорость 36,5 Гбит/с, используя несколько тестов iperf (поскольку iperf и iperf3 являются однопоточными, вам нужно будет настроить несколько для этих скоростей. Я устанавливаю 16 для каждого набора для использования 10 нитей). После того, как я исключил сетевые карты из списка виновников, я начал задаваться вопросом, была ли проблема с настройкой автоматического согласования на коммутаторе. Включив его, я сразу увидел «ссылка в порядке».

Это был не конец

Я наладил настройку, оказалось, что проблем с совместимостью не было, и мне, вероятно, никогда не приходилось менять кабели или покупать кабель IBM. Я был в восторге, но это было далеко не конец. Я намеревался запустить эту установку с Proxmox на моем сервере и Windows в качестве клиентской машины. Обе эти системы будут оснащены 40G.

Поскольку я знал, что несколько раз испорчу установку Proxmox, я сначала сделал резервную копию всего на другом диске. После этого я приступил к установке драйверов Mellanox OFED на Proxmox.Есть пара проблем с попыткой этого, драйверы OFED пытаются удалить очень важные пакеты из Proxmox, так как они «мешают» драйверам (а они этого не делают). Поэтому я отредактировал сценарий mlnxofedinstaller и закомментировал все вызовы функции «remove_old_packages». Это помешало установщику сделать Proxmox лоботомию.

На этом этапе большинство вещей работало, единственная проблема, с которой я столкнулся, заключалась в отправке данных на сервер. Он принимал не более нескольких мегабайт в секунду, намного меньше, чем я должен был получать. Я пробовал много разных версий программного обеспечения, попытка Ubuntu 20.04, 19.XX не сработала из-за зависимостей, которых нет у Proxmox, но есть у этих двух установок. Я был вынужден установить драйверы Ubuntu 18.04, так как это были последние драйверы без проблем с зависимостями. Установка драйверов обычно не решала проблему скорости. Поэтому я попытался установить пакеты ядра только с помощью --kernel-only флаг на установщике. В какой-то момент я получил те скорости, которые искал, но это была случайность, так как я не смог воспроизвести их позже. Я решил попробовать какой-нибудь вариант драйверов Debian 10, и получил немного лучшую скорость — 20 МБ/с. Через некоторое время, обмениваясь идеями с кем-то еще, я попытался установить для сети 40G значение 9000 MTU. Это привело к очень странным результатам. Скорость едва 1 гигабит, хотя у всей установки было MTU 9000. Я переключил его обратно на 1500, чтобы провести дальнейшее тестирование на Ubuntu вместо Proxmox, так как у меня были хорошие скорости на Ubuntu. Это не удалось, тесты скорости, которые я провел изначально, должны были быть случайностью.

Я решил поменять местами сетевые карты в системах, пометив их 1 и 2 после того, как вынул их, чтобы не перепутать. После проведения дополнительных тестов скорости выясняется, что проблема заключалась в плате в системе Proxmox. Я смог отправить на полной скорости, но не смог получить на полной скорости. Я вспомнил, что драйверы обновляли прошивку на этой сетевой карте, и не особо задумывался об этом, так как использовал последнюю версию.Поэтому я перепрошил кросс-прошитую версию, которую я изначально установил. После дальнейшего тестирования мы пришли к выводу, что ограниченные скорости 22 Гбит/с входящего и 11 Гбит/с входящего трафика являются результатом различных узких мест между системами. В частности, тестируя RAM-диски с файлом размером 30 гигабайт, мы пришли к выводу, что сервер с удвоенным количеством модулей DIMM мог записывать с удвоенной скоростью. Попытка использовать NVMe с файловой системой NTFS в тестовой системе оказалась неудачной из-за того, что уровень совместимости был однопоточным. После запуска еще дюжины тестов iperf все работало гладко, даже с сервером, на котором работал Proxmox.

Предостережение: при использовании драйверов OFED вы потеряете возможность подключения к общим сетевым ресурсам CIFS. Драйверы OFED выгружают этот модуль до тех пор, пока драйвер не перестанет работать. Драйверы Ethernet работают, но может потребоваться перекрестная прошивка Mellanox.

Маршрут впереди

Поскольку у меня был бюджет около 1500 долларов, мне пришлось использовать самое дешевое оборудование, которое я смог найти. Отсюда и сетевые карты за 60 долларов. Когда я нашел этот переключатель Mikrotik новым за 500 долларов, я был в восторге. В нем было все, что мне нужно, по лучшей цене, которую я мог найти, даже лучше, чем у некоторых бывших в употреблении устройств. У него не было лицензии на порт, и он поставлялся с одной из лицензий на программное обеспечение высшего уровня. Это было действительно трудно победить. Конечно, все идет с компромиссами.

Хотя я на самом деле не собирался использовать порты 10G SFP+, я хотел их для будущего расширения. Я получил адаптер SFP+ на RJ45 и сетевую карту 10G, поэтому мне было что протестировать, пока оборудование 40G было в пути. Я смог получить в общей сложности 2 гигабита в секунду на сетевом адаптере 10G. Это были все данные, которые я мог передать между моим 1-гигабитным интернет-соединением и моим 1-гигабитным сервером. Но попытка запустить гигабитную загрузку в Интернет с карты 10G привела к гораздо более низким скоростям, чем я ожидал. У меня было только около 300 Мбит/с, несмотря на то, что я вполне уверенно мог достигать 900 Мбит/с.Я начал спрашивать, и теория о том, что у коммутатора нет размера буфера, чтобы сбросить 10G до 1G, была выводом. Эта теория подкрепляется переключением восходящей линии связи 1G моего маршрутизатора на порт 10G и попыткой загрузки на гигабитной скорости из системы 40G (только 4-кратное падение вместо 10-кратного), что снизило скорость до ~ 1 Мбит / с. Это говорит о том, что 48 портов 1G имеют общий буфер.

На самом деле это не проблема для моей машины с Windows, так как я все равно никогда не загружаю файлы на таких скоростях. Но для моего сервера это очень важно. Сокращение пропускной способности загрузки до трети может стать реальной проблемой. Покопавшись в некоторых, я обнаружил, что могу использовать метрики маршрутизации, чтобы направить трафик либо через сетевую карту 40G, либо через сетевую карту 1G, в зависимости от того, куда он направляется. Хотя это решение не идеально на 100%, оно все же работает достаточно хорошо.

С использованием маршрут -n команда, я могу видеть мои текущие пути маршрута. Цель состоит в том, чтобы изменить маршруты, чтобы 40G предпочтительнее для локальных подключений, а 1G — для интернет-соединений. Чем выше метрика на маршруте, тем дороже его использование, поэтому система будет использовать наименее дорогой маршрут.

Proxmox поставляется с ifupdown по умолчанию, он более стабилен и имеет больше возможностей. Netplan может добавлять маршруты, но не может удалять или изменять их. Он также не позволяет запускать команды до, во время или после запуска интерфейса. Ты может используйте netplan, но вам нужно будет настроить отдельную службу для удаления/изменения дополнительных маршрутов.

это мой текущий /etc/сеть/интерфейсы config, мне пришлось добавить команды post-up в свои сетевые карты, чтобы добавить маршруты;

auto ens18 # 1 Gigabit NIC
iface ens18 инет статический
        ...
        post-up /usr/sbin/route add -net 192.168.0.0/24 метрика 1000 ens18

auto ens19 # 40-гигабитная сетевая карта
iface ens19 инет статический
        ...
        post-up /usr/sbin/route add -net 0.0.0.0/0 gw 192.168.0.1 метрика 1000 ens19
        post-up /usr/sbin/route add -net 192.168.0.0/24 метрика 1 ens19
        post-up /usr/sbin/route del -net 192.168.0.0/24 метрика 0 ens19

Ваши маршруты должны выглядеть так;

Таблица IP-маршрутизации ядра
Шлюз назначения Флаги Генмаски Метрика Ссылка Использование Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 1 0 0 ens18
0.0.0.0 192.168.0.1 0.0.0.0 UG 1000 0 0 ens19
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 ens19
192.168.0.0 0.0.0.0 255.255.255.0 U 1000 0 0 ens18

Очевидно, что эти интерфейсы должны находиться на разных локальных IP-адресах, я предлагаю использовать IP-адрес, установленный для сетевого адаптера 40G для чего-либо локального. Если что-то нужно перенаправить, используйте гигабитную сетевую карту. Можно использовать локально гигабитную сетевую карту, если вы не отправляете более 100 МБ за раз. Эта маршрутизация может работать, если вы отправляете локальные данные со скоростью 40 гигабит / с на IP-адрес, привязанный к гигабитному порту, хотя это не всегда согласовано.

Важно отметить, что если вы изменяете маршрут, вы должны добавить измененную версию, прежде чем удалять старую версию. Также важно отметить, что вашей настройке может не потребоваться точно такая же, как я написал выше. Например, моя установка Proxmox уже добавляет маршрут для ens18, поэтому мне нужно будет удалить его после того, как я добавлю тот, который хочу.

И это все! Наконец-то я получил свою настройку с желаемыми скоростями. Я могу передавать на свой сервер со скоростью около 1,7 ГБ / с и со скоростью около 1 ГБ / с (ограничение либо NTFS, либо один из твердотельных накопителей).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.