这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Mellanox cx4121a 25G网卡

Mellanox MCX4121A 25g双头网卡

1 - cx4121a刷新固件

给Mellanox MCX4121A 网卡刷新固件

背景

Mellanox MCX4121A 网卡全系通过固件和固件配置进行了型号划分,还有其他厂家的oem型号,都可以通过刷新固件的方式来升级。

使用ConnectX-4 lx核心的网卡 作者:

cx4121a

主要是将10g刷新为25g,或者将dell等oem型号刷新为原厂。

刷新固件

准备mft工具

从官网下载 mft 工具,安装:

https://network.nvidia.com/products/adapter-software/firmware-tools/

下载固件

原厂固件下载地址:

https://network.nvidia.com/support/firmware/connectx4lxen/

型号选择 MCX4121A-ACUT ,具体看上面的型号列表, 2x25g uefi enable 的型号就是 MCX4121A-ACUT。

下载得到文件:fw-ConnectX4Lx-rel-14_32_1010-MCX4121A-ACU_Ax-UEFI-14.25.17-FlexBoot-3.6.502.bin.zip

windows下刷新固件

MFT 中的 flint工具用于刷新网卡的固件。注意: 有权限要求,在 windows 下打开 cmd 时必须选择以管理员身份运行 cmd ,linux下需要用到 sudo。

用管理员方式打开 cmd,windows 下可以将要刷新的固件文件(如 fw-ConnectX4Lx-rel-14_32_1010-MCX4121A-ACU_Ax-UEFI-14.25.17-FlexBoot-3.6.502.bin ) 放在mft的安装目录下,如 C:\Program Files\Mellanox\WinMFT

执行:

cd C:\Program Files\Mellanox\WinMFT

flint -d mt4103_pci_cr0 -i fw-ConnectX4Lx-rel-14_32_1010-MCX4121A-ACU_Ax-UEFI-14.25.17-FlexBoot-3.6.502.bin -allow_psid_change burn

实测

  • dell cx4121c

    dell cx4121c 刷新 MCX4121A-ACUT 固件成功。

  • MCX4121A-XCAT 10G

    刷新25g MCX4121A-ACUT 固件成功。

参考资料

附录

debian 12 下安装 mft

Debian 12 下安装 mft 会稍微麻烦一些。下载之后,首先要安装一些基础包才能安装:

su root
export all_proxy=socks5://192.168.0.1:7891
apt-get install gcc make dkms

安装过程中会自动安装 linux header。或者参考这个文章安装 linux header:

How to Install Linux Kernel Headers on Debian 12 (linuxhint.com)

安装完成执行 ./install.sh,会继续报错,日志显示:

dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin

这时一个普遍问题,主要是 PATH 路径不对,不够齐全。参考文章:

ubuntu - dpkg cannot find ldconfig/start-stop-daemon in the PATH variable - Unix & Linux Stack Exchange

解决方法就是补全 PATH

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

然后再执行 ./install.sh 就可以完成安装。

$ ./install.sh 

-I- Removing mft external packages installed on the machine
-I- Installing package: /home/sky/temp/mft-4.26.1-3-x86_64-deb/SDEBS/kernel-mft-dkms_4.26.1-3_all.deb
-I- Installing package: /home/sky/temp/mft-4.26.1-3-x86_64-deb/DEBS/mft_4.26.1-3_amd64.deb
-I- In order to start mst, please run "mst start".

执行 mst start:

$ mst start
Starting MST (Mellanox Software Tools) driver set
Loading MST PCI module - Success
Loading MST PCI configuration module - Success
Create devices
Unloading MST PCI module (unused) - Success

然后看一下情况,目前我插了两块网卡:

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:05: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:06:00.0 addr.reg=88 data.reg=92 cr_bar.gw_offset=-1
                                   Chip revision is: 00

我要删除他们的 flexboot ,避免影响启动速度:

flint -d /dev/mst/mt4117_pciconf0 --allow_rom_change drom
flint -d /dev/mst/mt4117_pciconf1 --allow_rom_change drom

执行过程很慢:

-I- Preparing to remove ROM ...
Removing ROM image    - OK  # 这一步要1分钟
Restoring signature  - OK

2 - cx4121a 驱动

为 Mellanox MCX4121A 网卡安装驱动

2.1 - debian 12 安装驱动

在 debian 12 上安装 Mellanox MCX4121A 网卡的驱动

debian12

下载驱动

下载地址:https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/

debian12-download

下载得到 MLNX_OFED_LINUX-23.10-1.1.9.0-debian12.1-x86_64.tgz 文件, scp 传到 debian 12 下:

su root
tar xvf MLNX_OFED_LINUX-23.10-1.1.9.0-debian12.1-x86_64.tgz
cd MLNX_OFED_LINUX-23.10-1.1.9.0-debian12.1-x86_64

# 设置 PATH 否则默认 PATH 会找不到某些重要的命令而失败
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

./mlnxofedinstall --without-fw-update --with-nvmf --with-nfsrdma --ovs-dpdk --distro debian12.1

注意要加 --distro debian12.1, 否则可能会报错:

Error: The current MLNX_OFED_LINUX is intended for debian12.1

这是因为我安装debian12时版本已经是 12.4了:

./mlnxofedinstall --print-distro
debian12.4

--with-nvmf --with-nfsrdma --ovs-dpdk 这三个参数是可选的,我增加这三个参数主要是为了要学习测试这几个功能。

2.2 - PVE 8.1 驱动

在 PVE 8.1 上安装 Mellanox MCX4121A 网卡的驱动

安装驱动

pve8.1 是基于 debian12 的,因此驱动安装方式和 debian 12 非常类似。同样下载驱动,然后执行:

./mlnxofedinstall --without-fw-update --with-nvmf --with-nfsrdma --ovs-dpdk --distro debian12.1

......
Do you want to continue?[y/N]:y

Checking SW Requirements...
One or more required packages for installing MLNX_OFED_LINUX are missing.
Attempting to install the following missing packages:
pkg-config libnl-3-dev libgfortran5 flex m4 graphviz tcl ifupdown libltdl-dev uuid-runtime libnl-route-3-dev swig bison autoconf quilt gfortran lsb-base autotools-dev debhelper chrpath libipsec-mb1 automake tk
Failed command: apt-get install -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' pkg-config libnl-3-dev libgfortran5 flex m4 graphviz tcl ifupdown libltdl-dev uuid-runtime libnl-route-3-dev swig bison autoconf quilt gfortran lsb-base autotools-dev debhelper chrpath libipsec-mb1 automake tk
See /tmp/MLNX_OFED_LINUX.60098.logs/general.log# 

会遇到失败,按照提示打开 /tmp/MLNX_OFED_LINUX.60098.logs/general.log

单独执行 apt install 命令看看:

apt-get install -y -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold' pkg-config libnl-3-dev libgfortran5 flex m4 graphviz tcl ifupdown libltdl-dev uuid-runtime libnl-route-3-dev swig bison autoconf quilt gfortran lsb-base autotools-dev debhelper chrpath libipsec-mb1 automake tk

......
W: (pve-apt-hook) !! WARNING !!
W: (pve-apt-hook) You are attempting to remove the meta-package 'proxmox-ve'!
W: (pve-apt-hook) 
W: (pve-apt-hook) If you really want to permanently remove 'proxmox-ve' from your system, run the following command
W: (pve-apt-hook) 	touch '/please-remove-proxmox-ve'
W: (pve-apt-hook) run apt purge proxmox-ve to remove the meta-package
W: (pve-apt-hook) and repeat your apt invocation.

按照提示,执行命令手工删除 proxmox-ve:

$ touch '/please-remove-proxmox-ve'
$ apt purge proxmox-ve

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
  proxmox-ve*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
After this operation, 27.6 kB disk space will be freed.
Do you want to continue? [Y/n] y
W: (pve-apt-hook) '/please-remove-proxmox-ve' exists, proceeding with removal of package 'proxmox-ve'
(Reading database ... 121504 files and directories currently installed.)
Removing proxmox-ve (8.1.0) ...
(Reading database ... 121498 files and directories currently installed.)
Purging configuration files for proxmox-ve (8.1.0) ...

然后再次执行前面的 apt install 命令,就可以正常安装了。

再次执行 ./mlnxofedinstall 命令,提示需要加 --force,最后执行的命令是:

./mlnxofedinstall --without-fw-update --with-nvmf --with-nfsrdma --ovs-dpdk --distro debian12.1 --force

成功安装好驱动。

不幸的是看到了这个一个提示,NFSoRDMA 不支持 6.5.11-7-pve 内核。

WARNING: NFSoRDMA is not supported over kernel 6.5.11-7-pve, will continue installation without it.

故障

但是,重启之后发现驱动不可用:

➜  ~ lsmod | grep mlx
mlxdevm               184320  0
mlxfw                  36864  0
mlx_compat             20480  6 ib_ipoib,mlxdevm,ib_umad,ib_core,ib_uverbs,ib_cm
➜  ~ /etc/init.d/openibd

Usage: openibd {start|force-start|stop|force-stop|restart|force-restart|status}

➜  ~ /etc/init.d/openibd restart
Unloading HCA driver:                                      [  OK  ]
Failed loading kernel module mlx5_ib:                      [FAILED]
Loading Mellanox MLX5_IB HCA driver:                       [FAILED]
Failed loading kernel module mlx5_core:                    [FAILED]
Loading Mellanox MLX5 HCA driver:                          [FAILED]
Loading HCA driver and Access Layer:                       [FAILED]

Please run /usr/sbin/sysinfo-snapshot.py to collect the debug information
and open an issue in the http://support.mellanox.com/SupportWeb/service_center/SelfService

google了一下,发现这个讨论:

https://forum.proxmox.com/threads/upgrade-7-to-8-connect-4-dkms-module-installed.139297/

看样子似乎不需要安装额外的驱动,用内核自带的就好了。

2.3 - windows 驱动

在 windows 上安装 Mellanox MCX4121A 网卡的驱动

经过验证,适用于 windows 10 和 windows server 2022。

物理机安装

下载地址: https://network.nvidia.com/products/adapter-software/ethernet/windows/winof-2/

直接安装即可。

虚拟机安装

在虚拟机下安装驱动,如果只有一个网卡则会遇到死结:没有网卡驱动就无法从网上下载驱动,因此无法安装网卡驱动。

解决的方案是提前准备一个包含驱动的 iso 文件,然后以 cd 载入 iso 文件的方式将驱动文件传入虚拟机。

各个操作系统下制作 iso 文件的方式如下。

macos 下制作iso

参考:

步骤如下:

  • 将驱动文件放在一个文件夹下

  • 用系统自带的 Disk Utility 创建一个装载该驱动文件所在目录的镜像文件, image format 选 DVD/CD master 格式,得到 cdr 文件

  • 将 cdr 文件转为 iso 文件

    hdiutil makehybrid -iso -joliet -o yourname.iso yourname.cdr
    
  • 上传 iso 文件到 pve 下。