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

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

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

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
        Identifier                                : 0x0d (QSFP+)
        Extended identifier                       : 0x00
        Extended identifier description           : 1.5W max. Power consumption
        Extended identifier description           : No CDR in TX, No CDR in RX
        Extended identifier description           : High Power Class (> 3.5 W) not enabled
        Connector                                 : 0x23 (No separable connector)
        Transceiver codes                         : 0x08 0x00 0x30 0x00 0x40 0x00 0x80 0xd5
        Transceiver type                          : 40G Ethernet: 40G Base-CR4
        Transceiver type                          : SAS 6.0G
        Transceiver type                          : SAS 3.0G
        Transceiver type                          : FC: short distance (S)
        Transceiver type                          : FC: Twin Axial Pair (TW)
        Transceiver type                          : FC: 1200 MBytes/sec
        Transceiver type                          : FC: 800 MBytes/sec
        Transceiver type                          : FC: 400 MBytes/sec
        Transceiver type                          : FC: 200 MBytes/sec
        Transceiver type                          : FC: 100 MBytes/sec
        Encoding                                  : 0x00 (unspecified)
        BR, Nominal                               : 10300Mbps
        Rate identifier                           : 0x00
        Length (SMF,km)                           : 0km
        Length (OM3 50um)                         : 0m
        Length (OM2 50um)                         : 0m
        Length (OM1 62.5um)                       : 0m
        Length (Copper or Active cable)           : 1m
        Transmitter technology                    : 0xa0 (Copper cable unequalized)
        Attenuation at 2.5GHz                     : 8db
        Attenuation at 5.0GHz                     : 11db
        Attenuation at 7.0GHz                     : 0db
        Attenuation at 12.9GHz                    : 0db
        Vendor name                               : FS
        Vendor OUI                                : 00:40:20
        Vendor PN                                 : QSFP-PC01
        Vendor rev                                : A
        Vendor SN                                 : MT1422VS08180
        Date code                                 : 190228
        Revision Compliance                       : Revision not specified
        Module temperature                        : 0.00 degrees C / 32.00 degrees F
        Module voltage                            : 0.0000 V

Выход ethtool:

root@testserver:/home/test# ethtool enp1s0
Settings for enp1s0:
        Supported ports: [ FIBRE ]
        Supported link modes:   1000baseKX/Full
                                10000baseKX4/Full
                                10000baseKR/Full
                                40000baseCR4/Full
                                40000baseSR4/Full
                                56000baseCR4/Full
                                56000baseSR4/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  1000baseKX/Full
                                10000baseKX4/Full
                                10000baseKR/Full
                                40000baseCR4/Full
                                40000baseSR4/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: Unknown!
        Duplex: Unknown! (255)
        Port: FIBRE
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: off
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000014 (20)
                               link ifdown
        Link detected: no
3
задан 28 June 2021 в 11:03
1 ответ

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

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

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

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

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

После того, как это провалилось, я предположил, что виноваты кабели / приемопередатчики (один блок). Я поменял местами кабели, которые изначально купил для пары ( 56G 10m AOC + 56G 2m DAC > 40G 11m AOC + 40G 1m DAC ) индивидуальных кабелей, которые были разработаны для конкретного переключателя 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 Мбит / с. Я продолжил расспрашивать, и я пришел к выводу, что коммутатор не имеет размера буфера для снижения 10 Гбайт до 1 Гбит / с.Эта теория подкрепляется переключением восходящего канала 1 Гбит / с моего маршрутизатора на порт 10 Гбит / с и попыткой загрузки на гигабит из системы 40 Гбит / с (только 4-кратное падение вместо 10-кратного) снизило скорость до ~ 1 Мбит / с. Это говорит о том, что 48 портов 1G имеют общий буфер.

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

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

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

Это моя текущая конфигурация / etc / network / interfaces , мне пришлось добавить команды post-up к моим сетевым адаптерам, чтобы добавить маршруты;

auto ens18              # 1 Gigabit NIC
iface ens18 inet static
        ...
        post-up /usr/sbin/route add -net 192.168.0.0/24 metric 1000 ens18

auto ens19              # 40 Gigabit NIC
iface ens19 inet static
        ...
        post-up /usr/sbin/route add -net 0.0.0.0/0 gw 192.168.0.1 metric 1000 ens19
        post-up /usr/sbin/route add -net 192.168.0.0/24 metric 1 ens19
        post-up /usr/sbin/route del -net 192.168.0.0/24 metric 0 ens19

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

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use 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 NIC, для чего-либо локального. Если что-то нужно перенаправить, используйте гигабитную сетевую карту. Можно использовать локально гигабитную сетевую карту, если вы не отправляете более 100 МБ за раз.Эта маршрутизация может работать, если вы отправляете локальные данные со скоростью 40 гигабит / с на IP-адрес, привязанный к гигабитному порту, однако это не всегда согласованно.

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

Вот и все! Я наконец-то завершил настройку с желаемой скоростью. Я могу передавать на свой сервер примерно 1,7 ГБ / с и примерно 1 ГБ / с (ограничение - NTFS или один из SSD).

1
ответ дан 28 July 2021 в 11:55

Теги

Похожие вопросы