Для соединения пары домашних серверов мне захотелось выйти за пределы привычных 1Гбит/с и при этом сильно не переплачивать за сетевое оборудование. На известном сайте были приобретены недорогие серверные адаптеры HP 764285-B21, по сути являющиеся ОЕМ аналогами Mellanox ConnectX-3 Pro, и QSFP+ медный кабель (DAC). Эти двухпортовые адаптеры могут работать на скоростях 10 и 40 Гбит/с в режиме Ethernet портов и до 56 Гбит/с в режиме InfiniBand. Низкая цена на вторичном рынке обусловлена нестандартным интерфейсом HP FlexibleLOM, разъем которого хотя и похож на стандартный PCIe x8, но имеет иное расположение линий PCIe и поэтому может использоваться только в совместимых серверах HP. Тем не менее выход есть - Tobias Schramm спроектировал специальный адаптер для установки карт HP FlexibleLOM в обычный слот PCIe. Я заказал платы адаптера на jlcpcb.com и 8х коннекторы на алиэкспресс. После монтажа коннектора на плату адаптера и установки всей конструкции в слот она успешно определилась как устройство на шине PCIe:
lspci | grep Mellanox
23:00.0 Ethernet controller: Mellanox Technologies MT27520 Family [ConnectX-3 Pro]
Однако после установки Ethernet драйвера Mellanox (я использовал Ubuntu 16.04 и 20.04, предполагаю для других версий и для Windows порядок действий будет аналогичен) Ethernet интерфейсы не появились в системе. Это означало, что драйвер по какой-либо причине не смог распознать адаптер и скорее всего потребуется перепрошивка. Изучая вывод dmesg можно примерно установить причину ошибки, в моём случае в прошивке адаптеров была включена опция SR-IOV, несовместимая с используемой материнской платой.
Для перепрошивки адаптера скачиваем и распаковываем Mellanox firmware tools для вашей ОС. Установку производим с ключом --oem (sudo ./install --oem), это позволит сразу установить дополнительные утилиты для сборки новой прошивки.
После установки MFT определяем текущую версию прошивки:
mlxfwmanager -d 23:00.0
Querying Mellanox devices firmware ...
Device #1:
----------
Device Type: ConnectX3Pro
Part Number: 764285-B21_Ax
Description: HP InfiniBand FDR/Ethernet 10Gb/40Gb 2-port 544+FLR-QSFP Adapter
PSID: HP_1380110017
PCI Device Name: 23:00.0
Port1 MAC: 24be05c557c1
Port2 MAC: 24be05c557c2
Versions: Current Available
FW 2.42.5700 N/A
Status: No matching image found
...и делаем бэкап текущей прошивки и конфигурации адаптера:
flint -d 23:00.0 ri original_firmware.bin
flint -d 23:00.0 dc original_config.ini
Изучив раздел [HCA] файла конфигурации находим требуемый параметр sriov_en и, предварительно скопировав конфигурацию в новый файл new_config.ini, выставляем ему нулевое значение. Также проверяем, что eth_xfi_en равен единице - это позволит активировать Ethernet режим портов:
[HCA]
...
eth_xfi_en = 1
sriov_en = 0
...
Далее нам потребуется исходный файл прошивки .mlx для нашего чипсета (в моём случае это ConnectX-3 Pro), как выяснилось раньше их можно было свободно скачать с сайта Mellanox, однако сейчас лавочку прикрыли, оставив только готовые бинарные прошивки, которые, к сожалению, нам не подходят. В результате поисков мне удалось найти прямую ссылку на скачивание исходной прошивки предыдущей версии 2.36:
wget http://www.mellanox.com/downloads/firmware/ConnectX3Pro-rel-2_36_5000-web.tgz
Распаковываем архив и извлекаем искомый fw-ConnectX3Pro-rel.mlx, затем собираем новую прошивку с помощью mlxburn:
mlxburn -fw fw-ConnectX3Pro-rel.mlx -conf new_config.ini -wrimage new_firmware.bin
На всякий случай проверяем новую прошивку:
flint -i new_firmware.bin verify
FS2 failsafe image. Start address: 0x0. Chunk size 0x80000:
NOTE: The addresses below are contiguous logical addresses. Physical addresses on
flash may be different, based on the image start address and chunk size
/0x00000038-0x0000065b (0x000624)/ (BOOT2) - OK
/0x0000065c-0x00002b9b (0x002540)/ (BOOT2) - OK
/0x00002b9c-0x00003b27 (0x000f8c)/ (Configuration) - OK
/0x00003b28-0x00003b6b (0x000044)/ (GUID) - OK
/0x00003b6c-0x00003cc3 (0x000158)/ (Image Info) - OK
/0x00003cc4-0x00010fc3 (0x00d300)/ (DDR) - OK
/0x00010fc4-0x00012027 (0x001064)/ (DDR) - OK
/0x00012028-0x000123f7 (0x0003d0)/ (DDR) - OK
/0x000123f8-0x0005008b (0x03dc94)/ (DDR) - OK
/0x0005008c-0x00054f0f (0x004e84)/ (DDR) - OK
/0x00054f10-0x00059103 (0x0041f4)/ (DDR) - OK
/0x00059104-0x00059bfb (0x000af8)/ (DDR) - OK
/0x00059bfc-0x0008915f (0x02f564)/ (DDR) - OK
/0x00089160-0x0008cd0b (0x003bac)/ (DDR) - OK
/0x0008cd0c-0x000a1d7f (0x015074)/ (DDR) - OK
/0x000a1d80-0x000a1e87 (0x000108)/ (DDR) - OK
/0x000a1e88-0x000a6a8b (0x004c04)/ (DDR) - OK
/0x000a6a8c-0x000a827b (0x0017f0)/ (Configuration) - OK
/0x000a827c-0x000a82ef (0x000074)/ (Jump addresses) - OK
/0x000a82f0-0x000a8e03 (0x000b14)/ (FW Configuration) - OK
/0x00000000-0x000a8e03 (0x0a8e04)/ (Full Image) - OK
-I- FW image verification succeeded. Image is bootable.
...и затем прошиваем в адаптер:
flint -d 23:00.0 -i new_firmware.bin -allow_psid_change burn
Current FW version on flash: 2.42.5700
New FW version: 2.36.5000
Note: The new FW version is older than the current FW version on flash.
Do you want to continue ? (y/n) [n] : y
Burning FS2 FW image without signatures - OK
Restoring signature - OK
После перепрошивки адаптера обязательно перезагружаем сервер.
В моём случае после всех вышеперечисленных манипуляций драйвер mlx4_core успешно распознал адаптер и сетевые интерфейсы появились в системе. Для ускорения процесса загрузки я дополнительно отключил boot options:
mlxconfig -d 23:00.0 set BOOT_OPTION_ROM_EN_P1=false
mlxconfig -d 23:00.0 set BOOT_OPTION_ROM_EN_P2=false
mlxconfig -d 23:00.0 set LEGACY_BOOT_PROTOCOL_P1=0
mlxconfig -d 23:00.0 set LEGACY_BOOT_PROTOCOL_P2=0
...и удалил BootROM:
flint -d 23:00.0 --allow_rom_change drom
Кроме того, если не планируется использование интерфейсов InfiniBand, можно принудительно перевести оба порта в режим Ethernet:
mlxconfig -d 23:00.0 set LINK_TYPE_P1=2
mlxconfig -d 23:00.0 set LINK_TYPE_P2=2
Vovanys
Все в сумме во сколько обошлось? Длину кабеля какую брал?
needbmw Автор
Две карты и кабель обошлись около 8000р, кабель метр (мне больше не нужно пока).
BasilioCat
На известном аукционе можно взять пару 10Gb карт (с кабелем) Mellanox ConnectX-3 на стандартный PCI-e за 5000р. Не думаю, что домашний комп без хорошей NVMe ssd способен выдать 40Гбит. Ну и даже с nvme, что с этими 40Гбит делать — как внешний диск через iSCSI использовать? Все равно задержки будут через ethernet
needbmw Автор
10Gb тоже с большой долей вероятности придётся перешивать. Всё точно так же как описано выше, возможно версия прошивки будет без суффикса Pro (смотря какая карта попадётся). Ну а вопрос зачем дома 40Gb явно выходит за рамки данного howto :)
Firz
Если 10 гигабит достаточно, Mellanox CX311A на али валом, по 35-45$, SFP+ DAC кабель еще 7-10$, включил и забыл, даже под xpenology(загрузчик под проприетарную операционку для NAS-ов от Synology) драйвера есть.
needbmw Автор
И для 10 гигабит FlexLOM дешевле будут, навскидку 647581-B21 (SFP+ 2-порт 10Gb Ethernet) всего 1400р с бесплатной доставкой из Поднебесной
Firz
Ну тут уже вопрос разницы в ценах и стоит ли эта разница возни. То есть если с 40 гигабитными вариантами разница ощутима, то для 10 гигабитной, как по мне, проще чуть-чуть доплатить и получить много где работающий из коробки вариант, плюс сеть на SFP+ проще будет дальше расширить, свичи 10-гигабитные от 150$ продаются уже.
JPEGEC
Это те где 10G аплинком? Это ж все равно не то.
bvbr
микротик CRS305-1G-4S+IN на 4 порта — 12-13к рублей всего
для дома в принципе больше не надо
JPEGEC
Маловато конечно портов, но уже интересно. Спасибо.
А ну там же MikroTik CRS309-1G-8S+IN. 20тр. Вполне себе вариант.
sizziff
Уже не первый раз слышу про задержки в 10GBaseT, но так и не понял почему это должно отрицательно влиять на iSCSI СХД. Пусть 10GBaseT(2.6us) имеет в 26 раз большие задержки чем SFP+(0,1us), но ведь речь идет о микросекундах.
А мой опыт подсказывает, что большинство корпоративных сервисов нормально относятся к задержке не более 10ms (миллисекунд, что в 1000 раз больше).
Понятно что для построения SAN сети для ALLFLASH с миллионами IOPS 10GBaseT вряд ли подойдет, но насколько критична данная задержка для среднего офиса или каких нибудь не критичных к задержкам сервисов?
Если честно, у меня нет опыта построения iSCSI СХД, возможно я не учитываю какие то факторы, хотелось бы их услышать, но желательно аргументированно с цифрами.
BasilioCat
Изначально задача-то была не про коммерческие решения, для которых all-flash дает возможность конкурентного доступа без задержек со стороны десятков/сотен приложений. Тут как с десктопными vs серверными процами — нужно меньше ядер, но более быстрых для дома, и наоборот — для сервера. Потребитель как правило один, играть в игру с локального nvme или с диска через iSCSI — будет заметна разница