前言

最近在部署 Ceph 集群时,遇到一个比较典型但又容易误判的问题:openEuler 系统上,Intel 网卡做 Bond 正常,但 Mellanox 网卡做 Bond 后无法正常聚合,业务网和后端网都不通。最终通过升级 Mellanox 网卡固件并同步升级 OFED 驱动后,问题得到解决。

这篇文章记录一下完整的排查和处理过程,供类似场景参考。

一、检查固件版本

先确认网卡型号:

[root@localhost mft-4.26.1-3-x86_64-rpm]# lspci | grep -i net

输出中可以看到两张 Mellanox 双口卡:

0000:18:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:18:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:3d:00.0 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
0000:3d:00.1 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
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]

通过 devlink 查看固件版本:

[root@localhost mft-4.26.1-3-x86_64-rpm]# devlink dev info pci/0000:18:00.0
[root@localhost mft-4.26.1-3-x86_64-rpm]# devlink dev info pci/0000:86:00.0

结果显示两张 Mellanox 网卡当前运行固件版本均为:

fw.psid     H3C0010110034
fw.version  14.27.4062

现场准备的软件包为:

  • 固件包:fw-nic-mellanox-H3C-CX4(14.32.1010).zip
  • 驱动包:driver-nic-mellanox-MLNX-OFED-23.10-1.1.9.0 openEuler 22.03 LTS for x86_64.zip

我们的服务是华三的,固件也用华三提供的,如果你也是这种情况最好不要直接用 Mellanox 官网的
https://www.h3c.com/cn/BizPortal/DownLoadAccessory/DownLoadAccessoryFilt.aspx

二、升级 Mellanox 固件

2.1 安装 MFT 工具

先解压 Mellanox 固件工具包并安装 MFT:

[root@localhost ~]# ls
'driver-nic-mellanox-MLNX-OFED-23.10-1.1.9.0 openEuler 22.03 LTS for x86_64.zip'  'fw-nic-mellanox-H3C-CX4(14.32.1010).zip'
[root@localhost ~]# unzip fw-nic-mellanox-H3C-CX4\(14.32.1010\).zip
[root@localhost ~]# cd /root/fw/tools/linux_x64
[root@localhost linux_x64]# tar -xf mft-4.26.1-3-x86_64-rpm.tgz
[root@localhost linux_x64]# cd mft-4.26.1-3-x86_64-rpm/
[root@localhost mft-4.26.1-3-x86_64-rpm]# ./install.sh
-E- There are missing packages that are required for installation of MFT.
-I- You can install missing packages using: yum install rpm-build kernel-devel-5.10.0-216.0.0.115.oe2203sp4.x86_64

首次安装时提示缺少依赖:

[root@localhost linux_x64]# yum install rpm-build kernel-devel-5.10.0-216.0.0.115.oe2203sp4.x86_64

补齐依赖后重新安装:

[root@localhost mft-4.26.1-3-x86_64-rpm]# ./install.sh
-I- Removing any old MFT file if exists...
-I- Building the MFT kernel binary RPM...
-I- Installing the MFT RPMs...
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-mft-4.26.1-5.10.0_216.0.0.################################# [100%]
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:mft-4.26.1-3                     ################################# [100%]
-I- In order to start mst, please run "mst start".

安装完成后启动 mst:

[root@localhost mft-4.26.1-3-x86_64-rpm]# 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

2.2 升级固件

lspci命令可以看网卡 PCI 域(Domain) 编号,0000:18:00.0 和 0000:18:00.1 是通一张网卡,选其中一个升级就行,0000:86:00.0 和 0000:86:00.1也是同一张网卡,也是选其中一个升级就行了。

[root@localhost ~]# lspci | grep -i net
0000:18:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:18:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
0000:3d:00.0 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
0000:3d:00.1 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)
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]

可以看到多个 .bin 固件文件。然后使用 mlxfwmanager 检查并升级:

[root@localhost ~]# cd /root/fw/
[root@localhost fw]# unzip fw.zip
[root@localhost fw]# ls
fw.zip                                          RS4NXP2A0314.32.1010_NIC-ETH540F-3S-2P.bin
RS3N25GP2A0114.32.1010_NIC-620F-B2-25Gb-2P.bin  RS4NXP2LP0114.32.1010_NIC-ETH540F-LP-2P.bin
RS4N25XP20114.32.1010_NIC-ETH640F-3S-2P.bin     tools
[root@localhost fw]# mlxfwmanager -u -D /root/fw
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX4LX
  Part Number:      H3C_RS33N25GP2A_CX4LX_2P_25G_Ax
  Description:      H3C RS33N25GP2A ConnectX-4 Lx 25GigE dual-port SFP+; NCSI; PCIe3.0 x8 8GTs
  PSID:             H3C0010110034
  PCI Device Name:  /dev/mst/mt4117_pciconf1
  Base MAC:         380423000001
  Versions:         Current        Available
     FW             14.27.4062     14.32.1010
     PXE            3.5.0903       3.6.0502
     UEFI           14.20.0025     14.25.0017

  Status:           Update required

---------
Found 1 device(s) requiring firmware update...

Perform FW update? [y/N]: y
Device #1: Updating FW ...
FSMST_INITIALIZE -   OK
Writing Boot image component -   OK                                                                                             Done

Restart needed for updates to take effect.

这一步先更新到其中一张卡。随后对另一张卡单独指定设备升级:

[root@localhost fw]# mlxfwmanager -u -d 18:00.0 -i /root/fw/RS3N25GP2A0114.32.1010_NIC-620F-B2-25Gb-2P.bin
Querying Mellanox devices firmware ...

Device #1:
----------

  Device Type:      ConnectX4LX
  Part Number:      H3C_RS33N25GP2A_CX4LX_2P_25G_Ax
  Description:      H3C RS33N25GP2A ConnectX-4 Lx 25GigE dual-port SFP+; NCSI; PCIe3.0 x8 8GTs
  PSID:             H3C0010110034
  PCI Device Name:  18:00.0
  Base MAC:         380423000001
  Versions:         Current        Available
     FW             14.27.4062     14.32.1010
     PXE            3.5.0903       3.6.0502
     UEFI           14.20.0025     14.25.0017

  Status:           Update required

---------
Found 1 device(s) requiring firmware update...

Perform FW update? [y/N]: y
Device #1: Updating FW ...
FSMST_INITIALIZE -   OK
Writing Boot image component -   OK                                                                                             Done

Restart needed for updates to take effect.

升级完成后再次确认:

[root@localhost mft-4.26.1-3-x86_64-rpm]# devlink dev info pci/0000:18:00.0
[root@localhost mft-4.26.1-3-x86_64-rpm]# devlink dev info pci/0000:86:00.0

此时会看到一个很关键的现象:

[root@localhost mft-4.26.1-3-x86_64-rpm]#  running fw.version 14.27.4062
[root@localhost mft-4.26.1-3-x86_64-rpm]#  stored  fw.version 14.32.1010

这说明:

  • 新固件已经成功写入 Flash
  • 但当前仍在运行旧固件
  • 必须重启,或者重新加载设备后,固件升级才会真正生效

这也是很多人容易忽略的一点。

[root@localhost mft-4.26.1-3-x86_64-rpm]# ethtool -i ens3f0np0
driver: mlx5_core
version: 5.10.0-216.0.0.115.oe2203sp4.x8
firmware-version: 14.27.4062 (H3C0010110034)
expansion-rom-version:
bus-info: 0000:18:00.0

三、升级 Mellanox OFED 驱动

仅升级固件还不够,同时升级了 Mellanox OFED 驱动,最好用配套的。
先解压驱动包:

[root@localhost ~]# unzip driver-nic-mellanox-MLNX-OFED-23.10-1.1.9.0\ openEuler\ 22.03\ LTS\ for\ x86_64.zip
[root@localhost ~]# tar -xf MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64.tgz
[root@localhost ~]# cd MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64/

直接安装会报当前内核无匹配驱动包,因此需要增加内核支持:

[root@localhost MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64]# ./mlnxofedinstall --without-fw-update --force --add-kernel-support

安装过程中先后遇到以下依赖缺失:

createrepo
libtool
elfutils-devel
automake
autoconf
tk
fuse-devel
pciutils-devel

可以按提示补齐,或者如果不需要本地生成 repo,可以直接带 --skip-repo

[root@localhost MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64]# yum install libtool elfutils-devel automake autoconf tk fuse-devel pciutils-devel -y
[root@localhost MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64]# ./mlnxofedinstall --without-fw-update --force --add-kernel-support --skip-repo

安装完成后,重启 OFED 服务:

[root@localhost MLNX_OFED_LINUX-23.10-1.1.9.0-openeuler22.03-x86_64]# /etc/init.d/openibd restart

四、重启并验证

由于前面固件已经处于 stored 状态,此时重启系统是必要步骤:

[root@localhost ~]# reboot

重启后再检查 Bond 速率:

[root@localhost ~]# ethtool bond0 | grep Speed
[root@localhost ~]# ethtool bond1 | grep Speed
[root@localhost ~]# ethtool bond2 | grep Speed

结果恢复正常:

    Speed: 20000Mb/s
    Speed: 20000Mb/s
    Speed: 20000Mb/s

至此,问题解决。

五、根因分析

对于在 openEuler 上部署 Ceph、存储或高性能网络场景的同学,如果遇到 Bond 配置看起来没问题,但 Mellanox 口就是无法正常聚合,建议优先从以下方向排查:

lspci | grep -i net
devlink dev info pci/<BDF>
ethtool -i <nic>
ethtool bondX | grep Speed

如果发现 Mellanox 固件版本较老,或者 stored 与 running 不一致,就要重点考虑固件和驱动的兼容性问题。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐