1. RoCE
1.1 连接要求
RDMA 要求端到端同一类网络,比如都是 B 段内网。
单交换机。
RoCE: 主机 NIC ── 以太交换机(PFC) ── 对端 NIC
多台交换机。
RoCE: 主机 NIC ── Leaf ── Spine ── Leaf ── 对端 NIC
多跳时注意:
| 说明 |
|---|
| 路径 | L2/L3 可达即可(同网段或可路由) |
| 无损 | 路径上每台交换机建议开 PFC;多跳更依赖 ECN/DCQCN |
| MTU / 速率 | 端到端一致 |
| 禁忌 | 中间不要经过「未开 PFC 的普通交换机」硬凑 |
交换机不开 PFC 也能用,速度会慢一点,RDMA 依赖无损网络。
1.2 安装工具
1
| apt install -y rdma-core ibverbs-utils perftest ethtool infiniband-diags
|
1.3 设备
需要:以太网 RDMA 驱动 + 对应 netdev。不装 opensm。
| 厂商 | 典型模块 | 说明 |
|---|
| NVIDIA/Mellanox | mlx5_core mlx5_ib | ConnectX 跑 RoCE;或装 MLNX_OFED |
| Intel | irdma | E810 等 RoCE / iWARP |
| Broadcom | bnxt_en bnxt_re | RoCE |
| 云厂商 | efa / erdma 等 | AWS、阿里云 |
1.4 点对点测试
mlx5_0 port 1 ==> eth0x (Up)
mlx5_1 port 1 ==> eth1x (Up)
mlx5_bond_0 port 1 ==> bond0 (Up)
bond0 对应 mlx5_bond_0;Linux slave 是 eth2x + eth3x(不是 eth0x/eth1x)。
1
| cat /sys/class/net/bond0/bonding/slaves
|
eth2x eth3x
RoCE 在以太网上跑 RDMA,用 GID(Global Identifier)标识「从哪个地址发 RDMA」。每个 RDMA 端口有一张 GID 表;表里每一行有一个 index,-x 就是在选这张表的第几行, -R 走 RDMA_CM。
1
| ibv_devinfo -v -d mlx5_bond_0 | grep -A3 GID
|
bond0 示例:
1
2
3
4
5
6
7
8
9
10
| GID[ 0]: fe80:0000:0000:0000:0000:0000:0000:0001, RoCE v1
GID[ 1]: fe80::1, RoCE v2
GID[ 2]: fe80:0000:0000:0000:0000:0000:0000:0002, RoCE v1
GID[ 3]: fe80::2, RoCE v2
GID[ 4]: 0000:0000:0000:0000:0000:ffff:0a00:0002, RoCE v1
GID[ 5]: ::ffff:10.0.0.2, RoCE v2
GID[ 6]: 0000:0000:0000:0000:0000:ffff:0a00:0101, RoCE v1
GID[ 7]: ::ffff:10.0.1.1, RoCE v2
GID[ 8]: fe80:0000:0000:0000:0000:0000:0000:0003, RoCE v1
GID[ 9]: fe80::3, RoCE v2
|
这里看到是 GID=5 对应 bond0 的 RoCE v2
测试的前提是,本地-x 要选对本地通信用的 GID 和远端访问的 IP 地址。
对端
1
| ib_write_bw -d mlx5_bond_0 -x 5 --report_gbits
|
测试端
1
| ib_write_bw -d mlx5_bond_0 -x 5 10.0.0.2 --report_gbits
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| ---------------------------------------------------------------------------------------
RDMA_Write BW Test
Dual-port : OFF Device : mlx5_bond_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 : 1
Mtu : 1024[B]
Link type : Ethernet
GID index : 5
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x1001 PSN 0xabc123 RKey 0x200000 VAddr 0x007f0000000000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
remote address: LID 0000 QPN 0x1002 PSN 0xdef456 RKey 0x200000 VAddr 0x007f0000001000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
Conflicting CPU frequency values detected: 3000.000000 != 2000.000000. CPU Frequency is not max.
65536 5000 23.12 23.09 0.044035
---------------------------------------------------------------------------------------
|
对端
1
| ib_write_lat -d mlx5_bond_0 -x 5 --report_gbits
|
测试端
1
| ib_write_lat -d mlx5_bond_0 -x 5 10.0.0.2 --report_gbits
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| ---------------------------------------------------------------------------------------
RDMA_Write Latency Test
Dual-port : OFF Device : mlx5_bond_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: OFF
ibv_wr* API : ON
TX depth : 1
Mtu : 1024[B]
Link type : Ethernet
GID index : 5
Max inline data : 220[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x1003 PSN 0xabc124 RKey 0x200001 VAddr 0x00560000000000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
remote address: LID 0000 QPN 0x1004 PSN 0xdef457 RKey 0x200002 VAddr 0x00560000001000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] t_stdev[usec] 99% percentile[usec] 99.9% percentile[usec]
2 1000 3.40 6.22 3.48 3.49 0.03 3.71 6.22
---------------------------------------------------------------------------------------
|
2. Soft RoCE
2.1 连接要求
RDMA 要求端到端同一类网络。Soft RoCE 跑在普通以太网口上,拓扑与 RoCE 相同,但开发联调场景下交换机可不强制 PFC。
单交换机。
1
| 主机 NIC ── 以太交换机 ── 对端 NIC
|
多台交换机。
1
| 主机 NIC ── Leaf ── Spine ── Leaf ── 对端 NIC
|
多跳时注意:
| 说明 |
|---|
| 路径 | L2/L3 可达即可(同网段或可路由) |
| 网口 | 绑定 RXE 的 netdev 需先配 IP |
| MTU / 速率 | 端到端一致 |
| 性能 | 无硬件 offload,不适合作为生产高性能网络要求 |
2.2 安装工具
1
| apt install -y rdma-core ibverbs-utils perftest ethtool infiniband-diags
|
2.3 设备
没有 RDMA 网卡时,用内核软件栈在普通以太网口上模拟 RoCE(RXE,模块 rdma_rxe)。适合开发、联调;性能远低于硬件 RoCE,生产一般不采用。
| 项目 | 说明 |
|---|
| 内核模块 | rdma_rxe |
| 设备名 | rxe0、rxe1… |
| 绑定对象 | 已有 IP 的普通 netdev(如 eth0) |
| 与硬件 RoCE | 协议类似,无硬件 offload,CPU 负担大 |
2.4 点对点测试
两端都要先创建 RXE,绑在有 IP 的普通网口上(下例 eth0 → rxe0)。
1
| rdma link add rxe0 type rxe netdev eth0
|
1
2
3
| device node GUID
------ ----------------
rxe0 0000000000000001
|
1
| ibv_devinfo -v -d rxe0 | grep -A3 GID
|
1
2
3
| GID[ 0]: fe80:0000:0000:0000:0000:0000:0000:0001
GID[ 1]: 0000:0000:0000:0000:0000:ffff:0a00:0002
GID[ 2]: 0000:0000:0000:0000:0000:ffff:0a00:0101
|
GID[1] 里的 0a00:0002 即 10.0.0.2,下例用 -x 1 通信即可。
对端
1
| ib_write_bw -d rxe0 -x 1 --report_gbits
|
测试端
1
| ib_write_bw -d rxe0 -x 1 10.0.0.2 --report_gbits
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ---------------------------------------------------------------------------------------
RDMA_Write BW Test
Dual-port : OFF Device : rxe0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
TX depth : 128
CQ Moderation : 100
Mtu : 1024[B]
Link type : Ethernet
GID index : 1
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x0011 PSN 0x100001 RKey 0x000200 VAddr 0x007f0000000000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
remote address: LID 0000 QPN 0x0011 PSN 0x100002 RKey 0x000200 VAddr 0x007f0000001000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
65536 5000 0.16 0.14 0.000275
---------------------------------------------------------------------------------------
|
使用 perf 测试,这两个节点之间的带宽为 3.38 Gbits/sec,远高于 Soft RoCe 。
对端
1
| ib_write_lat -d rxe0 -x 1 --report_gbits
|
测试端
1
| ib_write_lat -d rxe0 -x 1 10.0.0.2 --report_gbits
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ---------------------------------------------------------------------------------------
RDMA_Write Latency Test
Dual-port : OFF Device : rxe0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
TX depth : 1
Mtu : 1024[B]
Link type : Ethernet
GID index : 1
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0000 QPN 0x0011 PSN 0x100003 RKey 0x000210 VAddr 0x00550000000000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
remote address: LID 0000 QPN 0x0011 PSN 0x100004 RKey 0x000210 VAddr 0x00550000001000
GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] t_stdev[usec] 99% percentile[usec] 99.9% percentile[usec]
2 1000 383.61 1007.44 508.28 535.29 95.27 850.50 1007.44
---------------------------------------------------------------------------------------
|
3. InfiniBand
3.1 连接要求
InfiniBand 必须端到端走 IB fabric。全网由 Subnet Manager 管理,节点在同一 IB 子网内,端口被赋 LID 后才会 Active。
单交换机。
IB: 主机 HCA ── IB交换机(SM) ── 对端 HCA
多台交换机。
IB: 主机 HCA ── Leaf ── Spine ── Leaf ── 对端 HCA
多跳时注意:
| 说明 |
|---|
| 路径 | SM 管理整网,按 LID 转发 |
| 无损 | IB 链路层本身按 credit 流控 |
| MTU / 速率 | 端到端一致 |
| 禁忌 | 不要混入以太交换机 |
3.2 安装工具
1
| apt install -y rdma-core ibverbs-utils perftest ethtool infiniband-diags
|
3.3 设备
| 厂商 | 典型模块 | 说明 |
|---|
| NVIDIA/Mellanox | mlx5_core mlx5_ib | ConnectX 跑原生 IB;常用 MLNX_OFED |
| 其他 IB HCA | 跟厂商文档 | 模块名因卡而异 |
小网需 Subnet Manager(opensm 或交换机 SM);可选 IPoIB:modprobe ib_ipoib。
1
| lsmod | grep -iE 'mlx5|ib_ipoib|ib_core'
|
device node GUID
------ ----------------
mlx5_0 0000000000000001
mlx5_1 0000000000000002
mlx5_4 0000000000000003
mlx5_5 0000000000000004
mlx5_bond_0 0000000000000005
3.4 点对点测试
采用 TCP 握手模式:QP 信息经 TCP 交换,RDMA 数据仍走 IB 链路。
State: Active
Base lid: 1
Port State=Active。
SM 可达。
1
2
| ip -4 addr | grep 10.0.0
ping -c 3 10.0.0.2
|
对端
1
| ib_write_bw -d mlx5_0 --report_gbits
|
测试端
1
| ib_write_bw -d mlx5_0 --report_gbits 10.0.0.2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ---------------------------------------------------------------------------------------
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 : 1
Mtu : 4096[B]
Link type : IB
Max inline data : 0[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0x1 QPN 0x1001 PSN 0xabc123 RKey 0x210000 VAddr 0x007f0000000000
remote address: LID 0x2 QPN 0x1002 PSN 0xdef456 RKey 0x216000 VAddr 0x007f0000001000
---------------------------------------------------------------------------------------
#bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]
Conflicting CPU frequency values detected: 2600.000000 != 3286.205000. CPU Frequency is not max.
65536 5000 179.98 179.93 0.343193
---------------------------------------------------------------------------------------
|
对端
1
| ib_write_lat -d mlx5_0 --report_gbits
|
测试端
1
| ib_write_lat -d mlx5_0 --report_gbits 10.0.0.2
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ---------------------------------------------------------------------------------------
RDMA_Write Latency Test
Dual-port : OFF Device : mlx5_0
Number of qps : 1 Transport type : IB
Connection type : RC Using SRQ : OFF
PCIe relax order: OFF
ibv_wr* API : ON
TX depth : 1
Mtu : 4096[B]
Link type : IB
Max inline data : 220[B]
rdma_cm QPs : OFF
Data ex. method : Ethernet
---------------------------------------------------------------------------------------
local address: LID 0x1 QPN 0x1003 PSN 0xabc124 RKey 0x1ec000 VAddr 0x00560000000000
remote address: LID 0x2 QPN 0x1004 PSN 0xdef457 RKey 0x1e5000 VAddr 0x00560000001000
---------------------------------------------------------------------------------------
#bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] t_stdev[usec] 99% percentile[usec] 99.9% percentile[usec]
Conflicting CPU frequency values detected: 2600.000000 != 3248.371000. CPU Frequency is not max.
Conflicting CPU frequency values detected: 2600.000000 != 3195.154000. CPU Frequency is not max.
2 1000 2.44 8.29 2.56 2.56 0.10 2.58 8.29
---------------------------------------------------------------------------------------
|