Please enable Javascript to view the contents

RDMA 运维

 ·  ☕ 5 分钟

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/Mellanoxmlx5_core mlx5_ibConnectX 跑 RoCE;或装 MLNX_OFED
IntelirdmaE810 等 RoCE / iWARP
Broadcombnxt_en bnxt_reRoCE
云厂商efa / erdmaAWS、阿里云

1.4 点对点测试

  • 查看设备
1
ibdev2netdev
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
  • 查看 GID

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

  • 在测试端测试连通性
1
ping -c 3 10.0.0.2
  • 测试带宽

测试的前提是,本地-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
设备名rxe0rxe1
绑定对象已有 IP 的普通 netdev(如 eth0
与硬件 RoCE协议类似,无硬件 offload,CPU 负担大

2.4 点对点测试

  • 查看设备

两端都要先创建 RXE,绑在有 IP 的普通网口上(下例 eth0rxe0)。

1
rdma link add rxe0 type rxe netdev eth0
1
ibv_devices
1
2
3
    device          	   node GUID
    ------          	----------------
    rxe0            	0000000000000001
  • 查看 GID
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:000210.0.0.2,下例用 -x 1 通信即可。

  • 在测试端测试连通性
1
ping -c 3 10.0.0.2
  • 测试带宽

对端

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
---------------------------------------------------------------------------------------
  • 删除 Soft RoCE
1
rdma link delete rxe0

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/Mellanoxmlx5_core mlx5_ibConnectX 跑原生 IB;常用 MLNX_OFED
其他 IB HCA跟厂商文档模块名因卡而异

小网需 Subnet Manager(opensm 或交换机 SM);可选 IPoIB:modprobe ib_ipoib

1
lsmod | grep -iE 'mlx5|ib_ipoib|ib_core'
1
ibv_devices
    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 链路。

  • 查看设备
1
ibstat mlx5_0
		State: Active
		Base lid: 1

Port State=Active。

  • 查看 SM
1
sminfo

SM 可达。

  • 查看 IP
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
---------------------------------------------------------------------------------------

微信公众号
作者
微信公众号