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, либо один из твердотельных накопителей).