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: Active 和 Physical 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
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
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
4.4 本章知识体系
下面这张图,是我自己总结的RDMA配置全流程。你照着这个思路走,基本不会迷路。
嗯,到这里,RDMA网络配置就讲完了。你可能会问:为什么非要这么折腾?说白了,没有RDMA,GPU之间通信走TCP/IP,延迟高得离谱。NVSHMEM要的就是那微秒级的延迟,所以这一步省不了。
我个人建议:第一次配置时,每做完一步就验证一步。别一口气装完驱动再配网络,出了问题都不知道是哪一步的锅。我曾经在客户现场,因为跳过了驱动验证,结果发现网卡固件版本不兼容,白忙活半天。
好,这一章就到这儿。下一章我们聊聊Kubernetes里怎么用这些RDMA资源。