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 确认一下端口状态。
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-essential、linux-headers-$(uname -r) 等依赖包。否则编译失败,你会看到一堆红色报错。我曾经在CentOS上忘了装kernel-devel,折腾了半小时才发现。
3.2.3 安装后验证
装完别急着高兴,先跑几个命令验证一下。
# 检查驱动模块是否加载
lsmod | grep mlx5
# 查看网卡状态
ibstat
# 查看设备详细信息
ibv_devinfo
正常输出应该能看到端口状态是 Active,物理状态是 LinkUp。如果看到 Down 或者 Polling,别慌,先检查线缆是否插好,或者对端设备是否开机。
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_core 再 modprobe mlx5_core,结果固件没生效,白忙活。
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 知识体系图
下面这张图概括了本章的核心逻辑,从网卡识别到驱动安装,再到固件升级,每一步都有对应的验证手段。
这张图把三个核心步骤串起来了。你从左边开始,先识别网卡,然后装驱动,最后升固件。每一步都有对应的验证手段,形成一个闭环。我在项目里就是按这个流程走的,基本没出过问题。
lspci 和 ibstat,驱动安装用 mlnxofedinstall --force,固件升级用 mlxfwmanager。每一步做完都要验证,别跳步。记住,IB网络的性能,从驱动和固件就开始决定了。