3、网卡固件与驱动:固件版本选择原则、驱动安装与升级(mlx5/irdma)、确认网卡工作模式(Eth/RoCE)

网卡固件和驱动,说白了就是网卡的「灵魂」和「大脑」。

固件是写在网卡硬件里的底层程序,驱动则是操作系统和固件之间的翻译官。这两样东西没配好,你上层再怎么调优都是白费力气。我见过太多团队,花了几周调参数,结果发现是固件版本太老,连 RoCE 的基本功能都不支持——嗯,这种坑我踩过不止一次。

3.1 固件版本选择原则:别追新,也别守旧

固件版本的选择,我个人习惯遵循一个原则:稳定优先,功能匹配

为什么会这样?因为网卡固件不像手机系统,新版本不一定适合你的场景。我遇到过 Mellanox ConnectX-5 网卡,升级到最新固件后,RoCE 的 PFC 流控反而出了问题。后来查了半天,发现是新固件改了默认的 buffer 分配策略。

固件版本选择的三条铁律:

  • 匹配硬件型号:不同型号的网卡(比如 ConnectX-5 和 ConnectX-6),固件不能混用。别问我怎么知道的——我曾经把 CX-6 的固件刷到 CX-5 上,结果网卡直接变砖。
  • 参考厂商推荐:Mellanox(现 NVIDIA)和 Intel 都会发布固件兼容性矩阵。我建议你直接去官网查「Firmware Release Notes」,里面会写明每个版本修复了哪些 bug、支持哪些新特性。
  • 不要追最新:新固件发布后,至少等 2-3 个月再升级。让「小白鼠」们先踩坑,你等稳定版出来再动。我一般会关注厂商的「Long Term Support (LTS)」版本。

我的个人经验:对于 RoCE 场景,我建议固件版本至少是厂商官方标注「RoCE Supported」的版本。有些早期固件虽然支持 RoCE,但性能有严重缺陷。比如 Mellanox 的某些旧固件,RoCE 的 PFC 死锁问题直到 v16.xx 才彻底修复。

3.2 驱动安装与升级:mlx5 和 irdma 的实战

驱动这块,主要分两大阵营:Mellanox/NVIDIA 的 mlx5 驱动,以及 Intel 的 irdma 驱动。我两个都用过,下面说说具体怎么搞。

3.2.1 mlx5 驱动(Mellanox/NVIDIA)

mlx5 驱动是 Mellanox 网卡的标配。我个人习惯用 MLNX_OFED 或者 NVIDIA Networking Driver 包来安装。

安装步骤(以 Ubuntu 22.04 为例):

# 1. 下载驱动包(从 NVIDIA 官网获取)
wget https://content.mellanox.com/ofed/MLNX_OFED-5.8-2.0.3.0/MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu22.04-x86_64.tgz

# 2. 解压并安装
tar -xzf MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu22.04-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-2.0.3.0-ubuntu22.04-x86_64
sudo ./mlnxofedinstall --force

# 3. 重启或重新加载驱动
sudo /etc/init.d/openibd restart

注意:安装驱动时,--force 参数会覆盖系统自带的驱动。如果你用的是内核自带的 mlx5_core 驱动,建议先备份。我曾经在升级内核后忘记重新安装 OFED,结果网卡直接不认了。

升级驱动:

升级驱动前,我建议先卸载旧版本:

# 卸载旧驱动
sudo /etc/init.d/openibd stop
sudo mlnxofedremove --force

# 然后安装新版本(步骤同上)

3.2.2 irdma 驱动(Intel)

Intel 的 irdma 驱动主要用于 Intel Ethernet 800 系列网卡。说实话,Intel 的驱动安装比 Mellanox 简单一些,因为它是内核自带的。

安装步骤:

# 1. 确认内核版本(建议 5.10+)
uname -r

# 2. 加载 irdma 模块
sudo modprobe irdma

# 3. 设置开机自动加载
echo "irdma" | sudo tee -a /etc/modules

如果你需要手动编译安装,可以从 Intel 官网下载 irdma-xxx.tar.gz

tar -xzf irdma-1.15.0.tar.gz
cd irdma-1.15.0
make
sudo make install

避坑指南:我曾经在 CentOS 7 上装 Intel irdma 驱动,发现内核版本太老(3.10),根本不支持 irdma。后来升级到 kernel 5.4 才搞定。所以,用 Intel 网卡做 RoCE,内核版本一定要够新。

3.3 确认网卡工作模式:Eth 还是 RoCE?

网卡装好驱动后,第一件事就是确认它工作在什么模式下。说白了,就是看它是在跑普通以太网,还是开启了 RoCE。

为什么重要? 因为有些网卡默认是纯 Eth 模式,RoCE 功能是关闭的。你想想看,如果没开 RoCE,上层配再多 RDMA 参数也是白搭。

3.3.1 使用 ethtool 查看

我最常用的工具就是 ethtool

# 查看网卡支持的特性
ethtool -k eth0 | grep rdma

# 输出示例(RoCE 已开启):
# rdma-nic: on
# roce: on

如果输出显示 roce: off,那就需要手动开启:

ethtool -K eth0 roce on

3.3.2 使用 ibdev2netdev 确认

对于 Mellanox 网卡,我习惯用 ibdev2netdev 来查看 RDMA 设备和网络接口的映射关系:

ibdev2netdev

# 输出示例:
# mlx5_0 port 1 ==> eth0 (Up)
# mlx5_1 port 1 ==> eth1 (Up)

这个命令会告诉你,哪个 RDMA 设备(mlx5_0)对应哪个网络接口(eth0)。如果没输出,说明 RoCE 没起来。

3.3.3 使用 cma_verify 验证

我还会用 cma_verify 来确认 RoCE 是否正常工作:

cma_verify -d mlx5_0

# 输出示例:
# Device: mlx5_0
# State: ACTIVE
# RoCE Mode: RoCE v2

快速判断表:

命令 输出特征 含义
ethtool -k eth0 roce: on RoCE 已开启
ibdev2netdev 显示 mlx5_x 映射 RDMA 设备正常
cma_verify State: ACTIVE RoCE 连接可用

我曾经踩过的坑:有一次,我确认了 roce: on,但 RDMA 通信就是不通。后来发现,网卡虽然开启了 RoCE,但交换机端口没有配置 PFC。记住,RoCE 是端到端的,网卡、交换机、对端网卡都得配好。

3.4 本章知识体系

下面这张图,是我梳理的固件与驱动调优的核心逻辑。你一看就明白了:

网卡固件与驱动调优核心逻辑 固件版本选择 匹配硬件型号 参考厂商兼容性矩阵 选择 LTS 稳定版 驱动安装与升级 mlx5 驱动 (Mellanox) irdma 驱动 (Intel) 卸载旧版 → 安装新版 确认工作模式 ethtool -k 查看 roce ibdev2netdev 映射 cma_verify 验证 先选固件 再装驱动 最终目标:固件稳定 + 驱动匹配 + RoCE 模式开启 三者缺一不可,否则 RoCE 性能调优无从谈起 个人经验:每次升级固件或驱动后,务必用 ibdev2netdev 和 cma_verify 双重确认

嗯,到这里,固件和驱动这块就讲完了。记住,别急着调上层参数,先把地基打牢。网卡工作模式没确认对,后面全是白忙活。


公众号:蓝海资料掘金营,微信deep3321