Установка драйверов Mellanox ConnectX-4 Lx

Исходные данные

product: MT27710 Family [ConnectX-4 Lx]

Адаптер, который выбрал для прошивки: enp216 расположен на шине pci@0000:d8:00.0 Важно понимать, что мы будем обновлять драйвер адаптера, на котором сейчас НЕ установлено наше ssh-соединение - иными словами - на свободном. Как вариант, можно производить обновление через web-панель IPMI.

Вывод команды lshw -C network следующий:

Copy
*-network:1 description: Ethernet interface product: MT27710 Family [ConnectX-4 Lx] vendor: Mellanox Technologies physical id: 0.1 bus info: pci@0000:86:00.1 logical name: enp134s0f1 version: 00 serial: 98:03:9b:62:77:c9 width: 64 bits clock: 33MHz capabilities: pciexpress vpd msix pm bus_master cap_list rom ethernet physical tp autonegotiation configuration: autonegotiation=on broadcast=yes driver=mlx5_core driverversion=5.0-0 firmware=14.23.1020 (MT_2420110004) latency=0 link=no multicast=yes port=twisted pair resources: iomemory:385f0-385ef irq:126 memory:385ffa000000-385ffbffffff memory:f0d00000-f0dfffff memory:385ffe000000-385ffe7fffff *-network:0 description: Ethernet interface product: MT27710 Family [ConnectX-4 Lx] vendor: Mellanox Technologies physical id: 0 **bus info: pci@0000:d8:00.0** logical name: **enp216s0f0** version: 00 serial: 98:03:9b:62:35:38 size: 10Gbit/s width: 64 bits clock: 33MHz capabilities: pciexpress vpd msix pm bus_master cap_list rom ethernet physical fibre autonegotiation configuration: autonegotiation=on broadcast=yes driver=mlx5_core driverversion=5.0-0 duplex=full firmware=14.23.1020 (MT_2420110004) latency=0 link=yes multicast=yes port=fibre speed=10Gbit/s resources: iomemory:387f0-387ef irq:144 memory:387ffc000000-387ffdffffff memory:fbe00000-fbefffff memory:387ffe800000-387ffeffffff

Firmware

Видим версию firmware: 14.23.1020 (MT_2420110004): driverversion=5.0-0
Версия модуля mlx5_core:

Copy
# lsmod | grep mlx5_core mlx5_core 831488 0 mlxfw 24576 1 mlx5_core pci_hyperv_intf 16384 1 mlx5_core tls 77824 1 mlx5_core

Modinfo

Вывод команды modinfo:

Copy
# modinfo mlx5_core filename: /lib/modules/5.4.17-2011.6.2.el7uek.x86_64/kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko.xz version: 5.0-0 license: Dual BSD/GPL description: Mellanox 5th generation network adapters (ConnectX series) core driver author: Eli Cohen <eli@mellanox.com> srcversion: 9807DEDCCDAB6BCCE0C5289 alias: pci:v000015B3d0000A2D6sv*sd*bc*sc*i* alias: pci:v000015B3d0000A2D3sv*sd*bc*sc*i* alias: pci:v000015B3d0000A2D2sv*sd*bc*sc*i* alias: pci:v000015B3d00001021sv*sd*bc*sc*i* alias: pci:v000015B3d0000101Fsv*sd*bc*sc*i* alias: pci:v000015B3d0000101Esv*sd*bc*sc*i* alias: pci:v000015B3d0000101Dsv*sd*bc*sc*i* alias: pci:v000015B3d0000101Csv*sd*bc*sc*i* alias: pci:v000015B3d0000101Bsv*sd*bc*sc*i* alias: pci:v000015B3d0000101Asv*sd*bc*sc*i* alias: pci:v000015B3d00001019sv*sd*bc*sc*i* alias: pci:v000015B3d00001018sv*sd*bc*sc*i* alias: pci:v000015B3d00001017sv*sd*bc*sc*i* alias: pci:v000015B3d00001016sv*sd*bc*sc*i* alias: pci:v000015B3d00001015sv*sd*bc*sc*i* alias: pci:v000015B3d00001014sv*sd*bc*sc*i* alias: pci:v000015B3d00001013sv*sd*bc*sc*i* alias: pci:v000015B3d00001012sv*sd*bc*sc*i* alias: pci:v000015B3d00001011sv*sd*bc*sc*i* depends: tls,pci-hyperv-intf,mlxfw retpoline: Y intree: Y name: mlx5_core vermagic: 5.4.17-2011.6.2.el7uek.x86_64 SMP mod_unload modversions parm: debug_mask:debug mask: 1 = dump cmd data, 2 = dump cmd exec time, 3 = both. Default=0 (uint) parm: prof_sel:profile selector. Valid range 0 - 2 (uint)

Lspci

Вывод команды lspci

Copy
lspci | grep Mellanox 0000:18:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5] 0000:18:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5] 0000:86:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 0000:86:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 0000:d8:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 0000:d8:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]

Подготовка к установке

Пакеты, которые надо установить для сборки:

Copy
yum install libdtrace-ctf pciutils usbutils yum install gcc make patch gcc-c++ redhat-rpm-config rpm-build yum install python-devel python-docutils valgrind-devel libdb-devel glib2-devel lsof zlib-devel flex bison numactl-devel libmnl-devel iptables-devel openssl-devel libselinux-devel cmake libtool elfutils-devel libnl3-devel rpm -i kernel-uek-devel-5.4.17-2011.6.2.el7uek.x86_64.rpm

Установка пакета systemd-devel вызвала трудности:

Copy
yum install systemd-devel Error: Package: systemd-devel-219-62.el7_6.5.x86_64 (updates) Requires: systemd = 219-62.el7_6.5 Removing: systemd-219-62.el7.x86_64 (@anaconda) systemd = 219-62.el7 Updated By: systemd-219-78.el7.x86_64 (salt) systemd = 219-78.el7 Available: systemd-219-62.el7_6.5.x86_64 (updates) systemd = 219-62.el7_6.5 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest

Обновление firmware (MFT)

Чтобы обновить драйвер на последний, необходимо сначала обновить firmware сетевых адаптеров. Может возникнуть вопрос - почему нельзя было сразу установить новый драйвер, не обновляя firmware? Ответ прост - новая версия драйвера может быть использована только с определенной (относительно новой) версией прошивки.

Установка mft

Сначала необходимо установить утилиту mft-4.20.1-14-x86_64-rpm.tgz (Mellanox Firmware Tools). Для сборки потребуется kernel-devel для нашего ядра.

Ставим mft:

Copy
tar xvf mft-4.20.1-14-x86_64-rpm.tgz cd mft-4.20.1-14-x86_64-rpm ./install.sh

Запускаем эмулятор устройств Mellanox:

Copy
mst start Starting MST (Mellanox Software Tools) driver set Loading MST PCI module - Success [warn] mst_pciconf is already loaded, skipping Create devices Unloading MST PCI module (unused) - Success

Смотрим устройства:

Copy
# ls -l /dev/mst total 0 crw------- 1 root root 511, 0 Nov 19 13:31 mt4117_pciconf0 crw------- 1 root root 511, 1 Nov 19 13:31 mt4117_pciconf0.1 crw------- 1 root root 511, 2 Nov 19 13:31 mt4117_pciconf1 crw------- 1 root root 511, 3 Nov 19 13:31 mt4117_pciconf1.1 crw------- 1 root root 511, 4 Nov 19 13:31 mt4119_pciconf0 crw------- 1 root root 511, 5 Nov 19 13:31 mt4119_pciconf0.1

Смотрим статус:

Copy
# mst status MST modules: ------------ MST PCI module is not loaded MST PCI configuration module loaded MST devices: ------------ /dev/mst/mt4117_pciconf0 - PCI configuration cycles access. domain:bus:dev.fn=0000:86:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1 Chip revision is: 00 **/dev/mst/mt4117_pciconf1** - PCI configuration cycles access. domain:bus:dev.fn=0000:d8:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1 Chip revision is: 00 /dev/mst/mt4119_pciconf0 - PCI configuration cycles access. domain:bus:dev.fn=0000:18:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1 Chip revision is: 00

Таким образом, по шине данных PCI установили, что имя нашего устройства - /dev/mst/mt4117_pciconf1.
Скачиваем здесь прошивку и распаковываем:

Copy
unzip fw-ConnectX4Lx-rel-14_31_1014-MCX4121A-XCA_Ax-UEFI-14.24.13-FlexBoot-3.6.403.bin.zip

Резервная копия

Делаем резервную копию текущей версии firmware:

Copy
/usr/bin/flint -d /dev/mst/mt4117_pciconf1 ri fw-ConnectX4Lx-backup.bin

Прошивка

Запускаем прошивку под screen:

Copy
screen -S burn /usr/bin/flint -d /dev/mst/mt4117_pciconf1 -i fw-ConnectX4Lx-rel-14_31_1014-MCX4121A-XCA_Ax-UEFI-14.24.13-FlexBoot-3.6.403.bin burn Current FW version on flash: 14.23.1020 New FW version: 14.31.1014 FSMST_INITIALIZE - OK Writing Boot image component - OK -I- To load new FW run mlxfwreset or reboot machine.

Прошивка идет 2-3 минуты. После окончания - перегружаем сервер.

Контроль

Смотрим версию firmware:

Copy
# lshw -c network | grep enp216 -B 6 -A 8 *-network:0 description: Ethernet interface product: MT27710 Family [ConnectX-4 Lx] vendor: Mellanox Technologies physical id: 0 bus info: pci@0000:d8:00.0 logical name: enp216s0f0 version: 00 serial: 98:03:9b:62:35:38 size: 10Gbit/s width: 64 bits clock: 33MHz capabilities: pciexpress vpd msix pm bus_master cap_list rom ethernet physical fibre autonegotiation configuration: autonegotiation=on broadcast=yes driver=mlx5_core driverversion=5.0-0 duplex=full firmware=14.31.1014 (MT_2420110004) latency=0 link=yes multicast=yes port=fibre speed=10Gbit/s resources: iomemory:387f0-387ef irq:144 memory:387ffc000000-387ffdffffff memory:fbe00000-fbefffff memory:387ffe800000-387ffeffffff *-network:1 description: Ethernet interface product: MT27710 Family [ConnectX-4 Lx] vendor: Mellanox Technologies physical id: 0.1 bus info: pci@0000:d8:00.1 logical name: enp216s0f1 version: 00 serial: 98:03:9b:62:35:39 size: 10Gbit/s width: 64 bits clock: 33MHz capabilities: pciexpress vpd msix pm bus_master cap_list rom ethernet physical fibre autonegotiation configuration: autonegotiation=on broadcast=yes driver=mlx5_core driverversion=5.0-0 duplex=full firmware=14.31.1014 (MT_2420110004) latency=0 link=yes multicast=yes port=fibre speed=10Gbit/s resources: iomemory:387f0-387ef irq:162 memory:387ffa000000-387ffbffffff memory:fbd00000-fbdfffff memory:387ffe000000-387ffe7fffff

Видим, что на указанном адаптере обновилась версия прошивки до 14.31.1014

Прошивка при несовпадении PSID

В некоторых случаях невозможно найти прошивку с таким-же PSID, как текущая прошивка. В частности, был случай с сервером Gigabyte, на котором сетевые адаптеры Mellanox ConnectX-4 Lx были прошиты firmware от компании Baidu: BAI0000000005.
Эти сетевые адаптеры не работали в режиме бонда с коммутатрами Huawei.
Соответствующий образ не удалось найти, а утилита flint не позволяет записать образ в котором PSID отличается от текущего:

Copy
flint -d /dev/mst/mt4117_pciconf0 -i MT_2470112034.bin burn Current FW version on flash: 14.27.4000 New FW version: 14.32.1010 -E- PSID mismatch. The PSID on flash (BAI0000000005) differs from the PSID in the given image (MT_2470112034).
Детальное изучение ключей утилиты flint --help не принесло желаемого результата, а попытка “подменить” значение PSID в bin-файле привела к сообщению об ошибке контрольной суммы (CRC Error). Решить проблему удалось, применив недокументированный ключ -allow_psid_change.
Прошивку в подобном случае можно сделать следующей командой:
Copy
flint -d /dev/mst/mt4117_pciconf0 -i MT_2470112034.bin -allow_psid_change burn
В ответ на предупреждение об опасности подобной операции необходимо ответить Y.
После перезвгрузки сервера - сетевой адаптер начал нормально работать.

Обновление драйвера

Теперь можно приступать к собственно обновлению драйвера. Получили последнюю версию драйвера, распаковываем и устанавливаем:

Copy
tar xvf MLNX_OFED_SRC-5.8-1.0.1.1.tgz cd MLNX_OFED_SRC-5.8-1.0.1.1 ./install.pl 1) View OFED Installation Guide 2) Install OFED Software 3) Show Installed Software 4) Configure IPoIB 5) Uninstall OFED Software Q) Exit OFED Distribution Software Installation Menu 1) Basic (OFED modules and basic user level libraries) 2) HPC (OFED modules and libraries, MPI and diagnostic tools) 3) All packages (all of Basic, HPC) 4) Customize 5) Packages required by VMA (IB and Eth) 6) Packages required by VMA IB 7) Packages required by VMA Eth 8) Packages required by Guest OS 9) Packages required by Hypervisor OS 10) Packages required by Bluefield OS 11) Packages required by XLIO Q) Exit

Выбираем 1.

Copy
.... Running rpmbuild --rebuild --define '_topdir /var/tmp/OFED_topdir' --define '_sourcedir %{_topdir}/SOURCES' --define '_specdir %{_topdir}/SPECS' --define '_srcrpmdir %{_topdir}/SRPMS' --define '_rpmdir %{_topdir}/RPMS' --define 'src_release OFED.5.8.0.4.8.1.kver.5.4.17_2011.6.2.el7uek.x86_64' --define 'KVERSION 5.4.17-2011.6.2.el7uek.x86_64' --define 'K_SRC /lib/modules/5.4.17-2011.6.2.el7uek.x86_64/build' --define '_prefix /usr' '/home/centos/mellanox/MLNX_OFED_SRC-5.8-1.0.1.1/SRPMS/isert-5.8-OFED.5.8.0.4.8.1.src.rpm' Install isert 5.8 RPM: Running rpm -iv --nodeps '/home/centos/mellanox/MLNX_OFED_SRC-5.8-1.0.1.1/RPMS/centos-release-7-6.1810.2.el7.centos/x86_64/isert-5.8-OFED.5.8.0.4.8.1.kver.5.4.17_2011.6.2.el7uek.x86_64.x86_64.rpm' Build mlnx-nvme 5.8 RPM Running rpmbuild --rebuild --define '_topdir /var/tmp/OFED_topdir' --define '_sourcedir %{_topdir}/SOURCES' --define '_specdir %{_topdir}/SPECS' --define '_srcrpmdir %{_topdir}/SRPMS' --define '_rpmdir %{_topdir}/RPMS' --define 'src_release OFED.5.8.0.4.8.1.kver.5.4.17_2011.6.2.el7uek.x86_64' --define 'KVERSION 5.4.17-2011.6.2.el7uek.x86_64' --define 'K_SRC /lib/modules/5.4.17-2011.6.2.el7uek.x86_64/build' --define '_prefix /usr' '/home/centos/mellanox/MLNX_OFED_SRC-5.8-1.0.1.1/SRPMS/mlnx-nvme-5.8-OFED.5.8.0.4.8.1.src.rpm' Install mlnx-nvme 5.8 RPM: Running rpm -iv --nodeps '/home/centos/mellanox/MLNX_OFED_SRC-5.8-1.0.1.1/RPMS/centos-release-7-6.1810.2.el7.centos/x86_64/mlnx-nvme-5.8-OFED.5.8.0.4.8.1.kver.5.4.17_2011.6.2.el7uek.x86_64.x86_64.rpm' The default IPoIB interface configuration is based on DHCP. Note that a special patch for DHCP is required for supporting IPoIB. The patch is available under docs/dhcp If you do not have DHCP, you must change this configuration in the following steps. IPoIB interfaces configured successfully Press any key to continue ... Device (0000:18:00.0): 0000:18:00.0 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5] Link Width: x8 PCI Link Speed: 8GT/s Device (0000:18:00.1): 0000:18:00.1 Ethernet controller: Mellanox Technologies MT27800 Family [ConnectX-5] Link Width: x8 PCI Link Speed: 8GT/s Device (0000:86:00.0): 0000:86:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] Link Width: x8 PCI Link Speed: 8GT/s Device (0000:86:00.1): 0000:86:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] Link Width: x8 PCI Link Speed: 8GT/s Device (0000:d8:00.0): 0000:d8:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] Link Width: x8 PCI Link Speed: 8GT/s Device (0000:d8:00.1): 0000:d8:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] Link Width: x8 PCI Link Speed: 8GT/s You may need to update your initramfs before next boot. To do that, run: dracut -f Installation finished successfully.

Проверяем версию драйвера:

Copy
# modinfo mlx5_core filename: /lib/modules/5.4.17-2011.6.2.el7uek.x86_64/extra/mlnx-ofa_kernel/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko alias: auxiliary:mlx5_core.eth-rep alias: auxiliary:mlx5_core.eth basedon: Korg 5.17-rc4 **version: 5.8-1.0.1** license: Dual BSD/GPL description: Mellanox 5th generation network adapters (ConnectX series) core driver author: Eli Cohen <eli@mellanox.com> srcversion: D17275D2A03B7CB08491355 alias: pci:v000015B3d0000A2DFsv*sd*bc*sc*i* alias: pci:v000015B3d0000A2DCsv*sd*bc*sc*i* alias: pci:v000015B3d0000A2D6sv*sd*bc*sc*i* alias: pci:v000015B3d0000A2D3sv*sd*bc*sc*i* alias: pci:v000015B3d0000A2D2sv*sd*bc*sc*i* alias: pci:v000015B3d00001023sv*sd*bc*sc*i* alias: pci:v000015B3d00001021sv*sd*bc*sc*i* alias: pci:v000015B3d0000101Fsv*sd*bc*sc*i* alias: pci:v000015B3d0000101Esv*sd*bc*sc*i* alias: pci:v000015B3d0000101Dsv*sd*bc*sc*i* alias: pci:v000015B3d0000101Csv*sd*bc*sc*i* alias: pci:v000015B3d0000101Bsv*sd*bc*sc*i* alias: pci:v000015B3d0000101Asv*sd*bc*sc*i* alias: pci:v000015B3d00001019sv*sd*bc*sc*i* alias: pci:v000015B3d00001018sv*sd*bc*sc*i* alias: pci:v000015B3d00001017sv*sd*bc*sc*i* alias: pci:v000015B3d00001016sv*sd*bc*sc*i* alias: pci:v000015B3d00001015sv*sd*bc*sc*i* alias: pci:v000015B3d00001014sv*sd*bc*sc*i* alias: pci:v000015B3d00001013sv*sd*bc*sc*i* depends: mlx_compat,tls,auxiliary,mlxdevm,pci-hyperv-intf,mlxfw,psample retpoline: Y name: mlx5_core vermagic: 5.4.17-2011.6.2.el7uek.x86_64 SMP mod_unload modversions parm: guids:charp parm: node_guid:guids configuration. This module parameter will be obsolete! parm: num_of_groups:Eswitch offloads number of big groups in FDB table. Valid range 1 - 1024. Default 15 (uint) parm: debug_mask:debug mask: 1 = dump cmd data, 2 = dump cmd exec time, 3 = both. Default=0 (uint) parm: prof_sel:profile selector. Valid range 0 - 3 (uint) parm: probe_vf:probe VFs or not, 0 = not probe, 1 = probe. Default = 1 (bool)

Видим, что версия обновилась до 5.8-1.0.1

Источники

  1. https://network.nvidia.com/support/firmware/nic/
  2. https://www.xmodulo.com/install-device-driver-mellanox-ethernet-card-linux.html
  3. https://docs.nvidia.com/networking/display/MLNXENv490170/Introduction
  4. Драйвер: https://network.nvidia.com/products/ethernet-drivers/linux/mlnx_en/
  5. https://developer.nvidia.com/networking/ethernet-software
  6. Linux driver sources: https://linux.mellanox.com/public/repo/mlnx_ofed/latest/