3、IB网卡与驱动安装:Mellanox ConnectX系列网卡识别、MLNX_OFED驱动安装与验证、固件升级

好,咱们进入实战环节。这一章聊的是IB网络最基础、也最容易翻车的一步——网卡识别、驱动安装和固件升级。你别看这些操作听起来简单,我在项目里见过太多人在这栽跟头。有的是驱动版本不对,有的是固件没升,结果跑起来性能惨不忍睹。咱们一步步来。

3.1 网卡识别:先搞清楚你手里拿的是什么

拿到一台服务器,第一件事不是插网线,而是先确认网卡型号。我习惯用 lspci 命令扫一遍。

# 查看所有PCI设备,过滤Mellanox
lspci | grep -i mellanox

# 更详细的信息
lspci -vvv -s [设备地址] | grep -i "Subsystem"

输出大概长这样:

82:00.0 Network controller: Mellanox Technologies MT28908 Family [ConnectX-6]
Subsystem: Mellanox Technologies ConnectX-6 VPI HDR100

嗯,这里要注意。你看到的是 ConnectX-6,但具体是单口还是双口?是HDR100还是HDR200?这些信息决定了你后面选什么驱动、用什么线缆。我建议你再用 ibstat 或者 ibv_devinfo 确认一下端口状态。

我的小习惯: 拿到新卡,先拍照记录标签上的PN号。有些OEM厂商会定制网卡,比如Dell、HPE的机器,标签上的型号和标准Mellanox型号可能对不上。我曾经被一块“定制版ConnectX-5”坑过,驱动装不上,最后发现是固件锁了。

3.2 MLNX_OFED驱动安装:版本匹配是王道

驱动安装,说白了就是选对版本、下对包、跑对命令。MLNX_OFED是Mellanox官方的驱动套件,包含了内核模块、用户态库和管理工具。

3.2.1 版本选择

我个人强烈建议:不要用系统自带的驱动。Ubuntu的apt源里虽然有,但版本往往落后半年。你想想看,IB网卡的性能优化很多都在新驱动里,用旧版本等于自废武功。

去官网下载对应你内核版本的MLNX_OFED。怎么查内核版本?

uname -r

比如输出是 5.15.0-91-generic,那你就找支持这个内核的OFED版本。官网有兼容性矩阵,别偷懒,看一眼。

3.2.2 安装步骤

下载下来的包是个 .tgz 文件。解压、运行安装脚本,就这么简单。但有几个坑我得提前说。

# 解压
tar xzf MLNX_OFED_LINUX-5.8-3.0.7.0-ubuntu22.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-3.0.7.0-ubuntu22.04-x86_64

# 运行安装
sudo ./mlnxofedinstall --force

--force 参数是我建议加的。为什么?因为系统里可能残留旧驱动,不加这个参数安装脚本会报错退出。我刚开始用的时候也犹豫,怕强制覆盖出问题。后来发现,Mellanox的安装脚本很成熟,强制安装反而最稳。

警告: 安装过程中会编译内核模块,确保你的系统已经安装了 build-essentiallinux-headers-$(uname -r) 等依赖包。否则编译失败,你会看到一堆红色报错。我曾经在CentOS上忘了装kernel-devel,折腾了半小时才发现。

3.2.3 安装后验证

装完别急着高兴,先跑几个命令验证一下。

# 检查驱动模块是否加载
lsmod | grep mlx5

# 查看网卡状态
ibstat

# 查看设备详细信息
ibv_devinfo

正常输出应该能看到端口状态是 Active,物理状态是 LinkUp。如果看到 Down 或者 Polling,别慌,先检查线缆是否插好,或者对端设备是否开机。

避坑指南: 我曾经遇到一次,ibstat显示端口状态是Active,但ibv_devinfo显示端口数为0。查了半天,发现是固件配置把端口禁用了。用 mlxconfig 工具进去一看,果然 NUM_OF_VFS 设置有问题。所以,验证的时候别只看一个命令,多个角度交叉确认。

3.3 固件升级:别忽视这个“隐形”步骤

驱动装好了,网卡也能认了,但性能可能还是上不去。为什么?固件版本太老。Mellanox的固件更新很频繁,修复了很多硬件bug和性能问题。我个人的习惯是:新卡到手,先升固件

3.3.1 查看当前固件版本

# 用flint工具查看
flint -d [设备地址] query

# 或者用mlxfwmanager
mlxfwmanager

输出里找 FW Version 那一行。比如 20.35.1010。然后去Mellanox官网查一下,这个版本是不是最新的。

3.3.2 升级步骤

固件升级有两种方式:在线升级和离线升级。我推荐离线升级,更安全。

# 下载固件包(.bin文件)
# 使用mlxfwmanager升级
sudo mlxfwmanager -d [设备地址] -u -f [固件文件.bin]

升级完成后,必须重启服务器才能生效。注意,是重启,不是重载驱动。我见过有人只做了 modprobe -r mlx5_coremodprobe mlx5_core,结果固件没生效,白忙活。

我的经验: 固件升级过程中绝对不能断电。一旦中断,网卡就变砖了。虽然Mellanox有恢复模式,但操作起来很麻烦。所以,升级前确保UPS正常,或者至少别在雷雨天搞。

3.3.3 升级后验证

重启后,再次用 flint query 确认固件版本已经更新。然后跑一下性能测试,比如 ib_write_bw,看看带宽和延迟是否达标。

# 服务端
ib_write_bw -d mlx5_0

# 客户端
ib_write_bw -d mlx5_0 [服务端IP]

如果带宽接近理论值(比如HDR100单口约100Gbps),延迟在微秒级,那就说明固件和驱动都工作正常。

3.4 知识体系图

下面这张图概括了本章的核心逻辑,从网卡识别到驱动安装,再到固件升级,每一步都有对应的验证手段。

IB网卡与驱动安装知识体系 1. 网卡识别 2. MLNX_OFED安装 3. 固件升级 lspci 查看型号 ibstat 确认端口状态 ibv_devinfo 查看详细信息 下载匹配内核版本的OFED ./mlnxofedinstall --force lsmod / ibstat 验证 flint query 查看当前版本 mlxfwmanager 升级固件 重启后 ib_write_bw 测试 验证闭环:ibstat + ibv_devinfo + 性能测试 每个步骤完成后,必须验证才能进入下一步 关键工具:lspci, ibstat, ibv_devinfo, flint, mlxfwmanager, ib_write_bw

这张图把三个核心步骤串起来了。你从左边开始,先识别网卡,然后装驱动,最后升固件。每一步都有对应的验证手段,形成一个闭环。我在项目里就是按这个流程走的,基本没出过问题。

总结一下: 网卡识别用 lspciibstat,驱动安装用 mlnxofedinstall --force,固件升级用 mlxfwmanager。每一步做完都要验证,别跳步。记住,IB网络的性能,从驱动和固件就开始决定了。

专注资料整理