RDMA通信3:基本操作类型Send/Recv,Write,Read机制和通信过程

RDMA支持多种通信方式,常见的包括:Send(发送)和Receive(接收)、RDMA Write、RDMA Read。哈哈哈,今天我们就来了解一下这些通信原语的通信过程。

这次分享需要提前了解的基础知识在:

RDMA通信2:一张图了解 RDMA基本元素和组成 通信过程元素关系解析 视频教程_rdma的基本元素-CSDN博客

视频教程在这: 

13. RDMA基本操作类型Send Recv机制和通信过程_哔哩哔哩_bilibili

1.4 RDMA基本操作类型Write,Read机制和通信过程_哔哩哔哩_bilibili 

一、Send/Recv

Send/Recv是一种两端cpu都需要参与的双端操作,并且Recv端需要提前显式的下发WQE(工作队列元素,也就是任务)给硬件,否则硬件无法知道该怎么处理接收到的数据(例如把数据保存到内存的哪个地方)。

如下图所示,左边计算机1是发送端,右边计算机2是接受端。

发送端流程:

1、应用程序调用Verbs API ibv_post_send,发出一个发送WR(工作请求)

2、WR在驱动层被转化为WQE,并添加到SQ(发送工作队列)中

3、告知硬件,发送数据本地内存地址,数据长度,并进行发送操作

接收端流程:

1、应用程序调用Verbs API ibv_post_revc,发出一个接收WR(工作请求)

2、WR在驱动层被转化为WQE,并添加到RQ(接收工作队列)中

3、告知硬件,将接收到的数据保存到特定位置

发送端每次发送数据时,接收端都需要提前准备好接收数据的缓存。在发送端发送数据之前,接收端就已经调用ibv_post_revc,通知驱动程序向RQ中添加WQE,告知硬件将接受数据保存到起始地址位0x11110000,长度为100的本地数据缓存中。

二、RDMA Write

RDMA Write是一种单端操作,远端cpu不需要参与,也感知不到何时有数据写入,以及何时写完。

如下图所示,左边计算机1是发送端(更准确的描述是请求端),右边计算机2是接受端(更准确的描述是响应端)。

请求端流程:

1、应用程序调用Verbs API ibv_post_send,发出一个发送WR(工作请求)

2、WR在驱动层被转化为WQE,并添加到SQ(发送工作队列)中

3、告知硬件,发送数据本地内存地址,数据长度,写入的目的地址

响应端流程:

1、cpu不参与,硬件网卡完成数据写入。

进行RDMA Write需先做好一定准备:分配缓存、注册MR、交换缓存地址和密钥等信息(可通过socket,也可通过RDMA send/recv交换信息)。计算机1需获得对端计算机2一块远端内存的读写权限。

RDMA Write工作流程详细描述:

1、请求端软件向SQ(发送工作队列)中添加一个WQE,下发一个RDMA Write任务给RDMA网卡。

2、请求端RDMA网卡解析WQE,获取源数据缓存的虚拟地址、目的数据缓存的虚拟地址、数据长度(量)、远端密钥(R_key)等信息。

3、请求端RDMA网卡源数据缓存的虚拟地址,查询地址转化表,得到物理地址,然后通过DMA操作将待发送的数据从主机内存负责到RDMA网卡内部缓存,并按协议封装成数据包。

4、请求端RDMA网卡将数据包通过物理链路发送给响应端RDMA网卡。

5、响应端RDMA网卡接收数据包,并按协议解包得到数据和目的缓存虚拟地址,查询本地MR地址转化表得到目的缓存物理地址,把数据写入目的缓存。

6、响应端RDMA网卡回复ACK报文给请求端RDMA网卡。

7、请求端网卡接收到ACK后,添加一个CQE(完成队列元素)到CQ中。

8、请求端软件通过轮询得到CQE,得到任务完成的信息。

三、RDMA Read

RDMA Read和RDMA Write一样,也是一种单端操作,工作流程和RDMA Write非常相似,主要区别就是WQE的操作码不同,导致相反的数据传输方向

如下图所示,左边计算机1是发送端(更准确的描述是请求端),右边计算机2是接受端(更准确的描述是响应端)。

请求端流程:

1、应用程序调用Verbs API ibv_post_send,发出一个发送WR(工作请求)

2、WR在驱动层被转化为WQE,并添加到SQ(发送工作队列)中

3、告知硬件,从计算机2的内存中,读取特定长度的数据,到本地内存

响应端流程:

1、cpu不参与,硬件网卡完成数据写入。

RDMA Read工作流程详细描述:

1、请求端软件向SQ(发送工作队列)中添加一个WQE,下发一个RDMA Read任务给RDMA网卡。

2、请求端RDMA网卡解析WQE,获取对端源数据缓存的虚拟地址、本地目的数据缓存的虚拟地址、数据长度(量)、远端密钥(R_key)等信息。

3、请求端网卡将RDMA Read请求数据包通过物理链路发送给响应端网卡。

4、响应端RDMA网卡收到请求数据包,解析出源数据缓存的虚拟地址,查询响应端本地地址转化表,得到物理地址,并根据物理地址读取数据到RDMA网卡内部缓存。

5、响应端RDMA网卡将数据封装成回复数据包,通过物理链路发送给请求端网卡。

6、请求端RDMA解析回复数据包,查询本地MR地址转化表得到目的缓存物理地址,把数据写入目的缓存。

7、请求端网卡接添加一个CQE(完成队列元素)到CQ中。

8、请求端软件通过轮询得到CQE,得到任务完成的信息。

参考资料:

Linux高性能网络详解,从DPDP、RDMA到XDP

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值