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 本章知识体系
下面这张图,是我梳理的固件与驱动调优的核心逻辑。你一看就明白了:
嗯,到这里,固件和驱动这块就讲完了。记住,别急着调上层参数,先把地基打牢。网卡工作模式没确认对,后面全是白忙活。
公众号:蓝海资料掘金营,微信deep3321