4. RDMA网络配置:安装RDMA驱动、配置IPoIB或RoCE、验证ib_write_bw性能

好,咱们进入第四章。RDMA网络配置,说白了就是让GPU之间能高速通信。没有这一步,NVSHMEM就是个摆设。我个人习惯把RDMA配置分成三步走:装驱动、配网络、跑测试。每一步都有坑,我踩过的坑比你们见过的还多。

4.1 安装RDMA驱动

先说说驱动。RDMA驱动不是随便装个包就完事的。我见过太多人卡在这一步,折腾一整天发现网卡没起来。

4.1.1 确认硬件

动手之前,先确认你的网卡型号。跑一下这个命令:

lspci | grep -i mellanox
# 或者
lspci | grep -i infiniband

如果是Mellanox ConnectX系列,恭喜你,主流方案。要是别的牌子,嗯…建议换卡。我在项目中遇到过用某国产网卡折腾两周的惨案,最后还是换了Mellanox。

4.1.2 安装MLNX_OFED驱动

Mellanox官方驱动叫MLNX_OFED。别用系统自带的,版本太老。去官网下载对应你内核版本的包。

# 下载对应版本
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

# 解压
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 --all --force
⚠️ 注意: 安装过程会编译内核模块,确保你的内核头文件已安装。我曾经因为内核版本不匹配,编译失败三次才发现问题。

装完后重启,或者重启openibd服务:

sudo /etc/init.d/openibd restart

4.1.3 验证驱动

跑一下 ibstat,看看状态:

ibstat

CA 'mlx5_0'
    CA type: MT4123
    Number of ports: 1
    Firmware version: 20.32.1010
    Hardware version: 0
    Node GUID: 0x248a070300a1b2c3
    System image GUID: 0x248a070300a1b2c3
    Port 1:
        State: Active
        Physical state: LinkUp
        Rate: 200
        Base lid: 1
        LMC: 0
        SM lid: 1
        Capability mask: 0x2651e84a
        Port GUID: 0x268a070300a1b2c3
        Link layer: InfiniBand

看到 State: ActivePhysical state: LinkUp,说明驱动装好了。如果显示 Down,检查一下线缆和交换机。

4.2 配置IPoIB或RoCE

驱动装好了,接下来配网络。这里有两个选择:IPoIB和RoCE。怎么选?看你的场景。

4.2.1 IPoIB vs RoCE

特性 IPoIB RoCE
底层协议 InfiniBand 以太网
性能 高,延迟低 较高,但受以太网影响
兼容性 需要IB交换机 标准以太网交换机
配置复杂度 中等 较低
适用场景 HPC集群 数据中心、Kubernetes

我个人习惯:如果集群全是IB设备,用IPoIB。如果混用以太网,用RoCE。说白了,RoCE更灵活,但IPoIB性能更稳。

4.2.2 配置IPoIB

IPoIB就是把IP跑在InfiniBand上。配置很简单:

# 查看IB接口
ip link show

# 配置IP地址(假设接口是ib0)
sudo ip addr add 192.168.1.10/24 dev ib0
sudo ip link set ib0 up

# 持久化配置(Ubuntu)
sudo vi /etc/netplan/01-netcfg.yaml

netplan配置示例:

network:
  version: 2
  renderer: networkd
  ethernets:
    ib0:
      addresses:
        - 192.168.1.10/24
      dhcp4: no
💡 小技巧: IPoIB的MTU默认是2044,别改成1500。我试过,性能直接腰斩。

4.2.3 配置RoCE

RoCE配置更接近普通以太网。但有个关键点:要开启PFC(优先级流控制)。

# 查看RoCE接口
ibdev2netdev

# 配置IP地址
sudo ip addr add 192.168.2.10/24 dev ens1f0
sudo ip link set ens1f0 up

# 开启PFC(需要交换机配合)
sudo mlnx_qos -i ens1f0 --pfc 0,0,0,1,0,0,0,0
⚠️ 注意: RoCE如果不配PFC,丢包率会很高。我曾经在生产环境吃过这个亏,GPU通信时不时卡死,查了两天才发现是PFC没开。

4.3 验证ib_write_bw性能

网络配好了,是骡子是马,拉出来遛遛。ib_write_bw 是RDMA带宽测试的标配工具。

4.3.1 安装perftest

# 安装perftest工具集
sudo apt install perftest -y

# 或者从源码编译
git clone https://github.com/linux-rdma/perftest.git
cd perftest
./configure
make
sudo make install

4.3.2 运行测试

需要两台机器,一台做server,一台做client。

Server端(192.168.1.10):

ib_write_bw -d mlx5_0 -p 18515 --report_gbits

Client端(192.168.1.20):

ib_write_bw -d mlx5_0 -p 18515 192.168.1.10 --report_gbits

输出示例:

---------------------------------------------------------------------------------------
                    RDMA_Write BW Test
 Dual-port       : OFF          Device         : mlx5_0
 Number of qps   : 1            Transport type : IB
 Connection type : RC           Using SRQ      : OFF
 PCIe relax order: ON
 ibv_wr* API     : ON
 TX depth        : 128
 CQ Moderation   : 100
 Mtu             : 4096[B]
 Link type       : IB
 Max inline data : 0[B]
 rdma_cm QPs     : OFF
 Data ex. method : Ethernet
---------------------------------------------------------------------------------------
 local address: LID 0x1 QPN 0x010b PSN 0x6a8f9a RKey 0x100804 VAddr 0x007f8c00000000
 remote address: LID 0x2 QPN 0x010c PSN 0x3b7f8b RKey 0x200804 VAddr 0x007f8c00000000
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
 65536      5000           197.12             196.85               0.375
 131072     5000           198.45             198.12               0.189
 262144     5000           199.01             198.76               0.095
 524288     5000           199.34             199.01               0.047
 1048576    5000           199.56             199.23               0.024
 2097152    5000           199.67             199.34               0.012
 4194304    5000           199.78             199.45               0.006
---------------------------------------------------------------------------------------

看到 BW average 接近200Gb/s,说明你的RDMA网络配置没问题。如果只有几十Gb,检查一下PCIe带宽或者线缆。

4.3.3 常见问题排查

  • 带宽上不去: 检查PCIe速率,用 lspci -vvv 看是否跑在Gen3/Gen4 x16
  • 连接失败: 检查防火墙,或者用 ibping 测试基本连通性
  • 延迟高: 检查MTU设置,IPoIB建议2044,RoCE建议9000
🔑 核心要点: RDMA网络配置是NVSHMEM的基础。驱动装对、网络配通、性能达标,这三步走完,你的GPU集群才算真正准备好跑NVSHMEM。

4.4 本章知识体系

下面这张图,是我自己总结的RDMA配置全流程。你照着这个思路走,基本不会迷路。

RDMA网络配置知识体系 1. 安装RDMA驱动 确认硬件(lspci) 安装MLNX_OFED 验证(ibstat) 2. 配置RDMA网络 选择IPoIB或RoCE 配置IP地址 开启PFC(RoCE必需) 3. 验证性能 安装perftest 运行ib_write_bw 分析带宽/延迟 核心目标:驱动正常 → 网络连通 → 性能达标 为NVSHMEM提供低延迟、高带宽的GPU通信基础 常见问题:PCIe带宽不足 | 防火墙拦截 | MTU设置错误 | PFC未开启 排查工具:ibstat | ibping | ib_write_bw | lspci -vvv

嗯,到这里,RDMA网络配置就讲完了。你可能会问:为什么非要这么折腾?说白了,没有RDMA,GPU之间通信走TCP/IP,延迟高得离谱。NVSHMEM要的就是那微秒级的延迟,所以这一步省不了。

我个人建议:第一次配置时,每做完一步就验证一步。别一口气装完驱动再配网络,出了问题都不知道是哪一步的锅。我曾经在客户现场,因为跳过了驱动验证,结果发现网卡固件版本不兼容,白忙活半天。

好,这一章就到这儿。下一章我们聊聊Kubernetes里怎么用这些RDMA资源。


专注资料整理