RDMA RoCev2 CM建链和Socket建链测试

前言

RDMA在高性能计算,AI大模型训练中发挥着重要的作用。

主流支持RDMA的协议有IB、RoCev1、RoCev2、iWARP。

其中RoCev2是应用最广泛的协议,因为其RDMA over UDP/IP,不依赖昂贵的IB网络设备,同时支持路由,性能上也接近原生IB水准。

环境准备

虚拟机

两台虚拟机,测试接口设置同一个二层网络(同一个Bridge)

node-1配置

ifconfig  ens192 10.0.0.1/24

node-2配置

ifconfig  ens192 10.0.0.2/24

node-1 ping node-2

root@u20-test:~# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.284 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.265 ms

安装RDMA软件

sudo apt install libibverbs1 ibverbs-utils librdmacm1 libibumad3 ibverbs-providers rdma-core rdmacm-utils perftest

配置RDMA网卡

node-1

root@u20-test:~# rdma link add 1 type rxe netdev ens192
root@u20-test:~# 
root@u20-test:~# rdma link
link rocep11s0/1 state ACTIVE physical_state LINK_UP netdev ens192 
root@u20-test:~# 
root@u20-test:~# ibv_devices
    device                 node GUID
    ------              ----------------
    rocep11s0           020c29fffe3ed0e9
root@u20-test:~# ibv_devinfo -d rocep11s0
hca_id: rocep11s0
        transport:                      InfiniBand (0)
        fw_ver:                         0.0.0
        node_guid:                      020c:29ff:fe3e:d0e9
        sys_image_guid:                 020c:29ff:fe3e:d0e9
        vendor_id:                      0x0000
        vendor_part_id:                 0
        hw_ver:                         0x0
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             1024 (3)
                        sm_lid:                 0
                        port_lid:               0
                        port_lmc:               0x00
                        link_layer:             Ethernet

node-2

root@u20-test:~# rdma link add rxeee type rxe netdev ens192
root@u20-test:~# ibv_devices 
    device                 node GUID
    ------              ----------------
    rocep11s0           020c29fffe8ce06a
root@u20-test:~# ibv_devinfo 
hca_id: rocep11s0
        transport:                      InfiniBand (0)
        fw_ver:                         0.0.0
        node_guid:                      020c:29ff:fe8c:e06a
        sys_image_guid:                 020c:29ff:fe8c:e06a
        vendor_id:                      0x0000
        vendor_part_id:                 0
        hw_ver:                         0x0
        phys_port_cnt:                  1
                port:   1
                        state:                  PORT_ACTIVE (4)
                        max_mtu:                4096 (5)
                        active_mtu:             1024 (3)
                        sm_lid:                 0
                        port_lid:               0
                        port_lmc:               0x00
                        link_layer:             Ethernet

CM建链测试

测试命令

node-2建立服务端

其中参数 -R 代表通过cm建链

root@u20-test:~# ib_send_bw -d rocep11s0 -R

************************************
* Waiting for client to connect... *
************************************

node-1连接node-2

root@u20-test:~# ib_send_bw -d rocep11s0 10.0.0.2 -R
---------------------------------------------------------------------------------------
                    Send BW Test
 Dual-port       : OFF          Device         : rocep11s0
 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     : ON
 Data ex. method : rdma_cm
---------------------------------------------------------------------------------------
 local address: LID 0000 QPN 0x0012 PSN 0x184d5e
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
 remote address: LID 0000 QPN 0x0012 PSN 0x9b467e
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
 65536      1000             30.08              28.94              0.000463
---------------------------------------------------------------------------------------

建立链接

CM REQ

其中关键信息:

Base Transport Header中目的QP 0x000001代表管理QP

DETH中 Queue Key 80010000,是特殊的专门为CM使用的。

IB Spec:

To prevent address spoofing attempts by user applications, the
source IP address and the port number shall be filled in by privileged
kernel mode. The passive side shall verify that the CM REQ Message
contains a privileged Q-key and its value is 0x80010000.

CM头中Local QPN 0x000011 ,此次通信本地的Queue Pair Number, 对方往本端发的消息要用该QPN作为目的QPN在BTH中。
RDMA RoCev2 CM建链和Socket建链测试_第1张图片

CM REP

各字段与CM请求一致
RDMA RoCev2 CM建链和Socket建链测试_第2张图片

CM RTU

Ready to Use

确认建链,Communication id为之前收发的ID
RDMA RoCev2 CM建链和Socket建链测试_第3张图片

数据传输

Send Only

往对端 QPN上发数据, 一个send only 一个ack
RDMA RoCev2 CM建链和Socket建链测试_第4张图片

Send middle

Send middle就不同了,发了60个,有一个ack
RDMA RoCev2 CM建链和Socket建链测试_第5张图片

断开链接

node-1 node-2各自发断链请求,再都回复。

四次挥手完成断链。
RDMA RoCev2 CM建链和Socket建链测试_第6张图片

Socket建链测试

测试命令

node-2 开启服务端,没有-r,默认socket建链

root@u20-test:~# ib_send_bw -d rocep11s0

************************************
* Waiting for client to connect... *
************************************

node-1连接node-2

root@u20-test:~# ib_send_bw -d rocep11s0 10.0.0.2
---------------------------------------------------------------------------------------
                    Send BW Test
 Dual-port       : OFF          Device         : rocep11s0
 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 0xe5662a
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:01
 remote address: LID 0000 QPN 0x0011 PSN 0x4e7fad
 GID: 00:00:00:00:00:00:00:00:00:00:255:255:10:00:00:02
---------------------------------------------------------------------------------------
 #bytes     #iterations    BW peak[MB/sec]    BW average[MB/sec]   MsgRate[Mpps]
 65536      1000             27.39              26.82              0.000429

建立链接

请求

三次握手以后,十几个包不知道干什么的,然后看到这个建链请求和响应

中间有个000011是local QPN, e5662是local PSN

其他字段暂时不知道什么意思
RDMA RoCev2 CM建链和Socket建链测试_第7张图片

响应

RDMA RoCev2 CM建链和Socket建链测试_第8张图片

数据传输

第一个数据包PSN,就是建链是指定的e5662a.QPN是0x00011.

Send First

RDMA RoCev2 CM建链和Socket建链测试_第9张图片

Send Last

RDMA RoCev2 CM建链和Socket建链测试_第10张图片

ACK

acknowledge 是对 send last的响应,表示前面几十个包已经收到。
RDMA RoCev2 CM建链和Socket建链测试_第11张图片

断开链

与CM一样四次挥手。

node-1 断链请求

RDMA RoCev2 CM建链和Socket建链测试_第12张图片

node-2 断链请求

RDMA RoCev2 CM建链和Socket建链测试_第13张图片

node-2 done

RDMA RoCev2 CM建链和Socket建链测试_第14张图片

node-1 done

RDMA RoCev2 CM建链和Socket建链测试_第15张图片

参考资料

https://zhuanlan.zhihu.com/p/164908617

IB Specification Vol 1-Release-1.4-2020-04-07

你可能感兴趣的:(学习笔记,infiniband,IB,RDMA,CM,socket,ROCE)