MLNX_OFED 与 VPI 网卡:LINK_TYPE 切换实战
384 卡 L40S IB 集群里最容易被"想当然"坑到的环节:VPI 双模网卡默认跑以太,不切 LINK_TYPE,IB 永远起不来。本文记录从驱动栈安装到端口模式切换、再到逐项验证的全过程与踩坑点。
1. 先分清三块:硬件模式 / 驱动栈 / 应用验证
| 层 | 工具 | 作用 |
|---|---|---|
| 硬件端口模式 | mstconfig(MFT) | 把端口从 Ethernet 切到 IB(LINK_TYPE=1) |
| 驱动栈 | MLNX_OFED | 内核模块 + libibverbs + 工具集 |
| 应用验证 | ibstat/ibv_devinfo/ibping | 确认端口 Active、速率、MTU、PKey |
判断:三块各自独立又互相依赖——驱动装错版本,端口模式切了也不认;模式没烧录,驱动再对也起不来。排查顺序永远是"硬件模式 → 驱动 → 应用"。
2. MLNX_OFED 安装:版本匹配是第一优先级
- 选版本:必须匹配 openEuler 24.03 的内核(6.6)——MLNX_OFED 提供 openEuler 专用包,选错发行版会编译失败或模块加载失败;
- 依赖:
kernel-devel与内核版本严格一致(rpm -qa kernel-devel核对); - 安装:
./mlnxofedinstall --without-fw-update(固件更新单独走 MFT,避免驱动装一半烧固件); - 安装后
modprobe mlx5_core并确认ibstat能看到端口(此时大概率是 Ethernet 模式,见下节)。
3. LINK_TYPE:VPI 卡进 IB 的"闸门"
ConnectX-7/6 Dx 是 VPI(Ethernet/InfiniBand 双模),出厂默认以太。切 IB 模式:
bash
# 安装 MFT 后用 mstconfig 烧录端口模式
mst start
mstconfig -d <PCI> set LINK_TYPE_P1=1 LINK_TYPE_P2=1 # 1=IB, 2=Ethernet
mstconfig -d <PCI> q # 确认已烧录
reboot # 模式在初始化时生效,必须重启常见坑:
- 只切 P1 没切 P2:双口卡切一半,第二口永远起不来;
- 不重启就测:LINK_TYPE 是初始化期参数,热改不生效;
- 模式与线缆不匹配:OSFP 200G DAC 接 IB 模式没问题,但如果固件版本旧,可能识别为以太口;
ibstat显示 Ethernet:先查 mstconfig,不要先怀疑线缆。
4. 验证链:从端口到数据面
bash
# 1) 端口状态
ibstat # Port state: Active, Physical state: LinkUp, Rate: 200
# 2) 设备能力
ibv_devinfo -d mlx5_0 # Port 1 state: PORT_ACTIVE, active_mtu: 4096(4K)/65520 视配置
# 3) 连通性(对端同样装好驱动)
ibping -S <lid或guid> # 双向 ping,确认数据面
# 4) 带宽基线
ib_write_bw -a -d mlx5_0 # 单口写带宽,确认接近 200G 线速验收判定:ibstat Active + ibv_devinfo PORT_ACTIVE + ibping 通 + ib_write_bw 达标,四个都过才算"这台机器的 IB 面可用"。
5. 其他易错点汇总
| 现象 | 根因 | 处理 |
|---|---|---|
| 端口起不来 | LINK_TYPE 未烧录/未重启 | 重烧 + reboot |
| 速率只有 100G | 线缆/端口协商 | 换线或检查 Breakout 口归属 |
| RDMA 应用超时 | GID/子网配置缺失 | ibv_devinfo 查 active gid,配好 SM 后重扫 |
| 驱动模块加载失败 | kernel-devel 版本不一致 | 重装匹配 OFED 包 |
6. 交付清单
- kernel-devel 与内核版本核对一致;
- MLNX_OFED(openEuler 版)安装,
ibstat可见端口; mstconfig双口 LINK_TYPE=1 烧录并重启;- 四步验证链全过:ibstat / ibv_devinfo / ibping / ib_write_bw;
- 48 节点全部过验后,再进三面分离的 PKey/SL 配置阶段。
本文基于 384 卡 L40S IB 集群交付实测整理;具体版本号与命令以现场实测为准。