RDMA学习笔记
- 基本操作
- Memory verbs : 包括 RDMA read,write,atomic 操作,绕过接受者的CPU
- Messaging verbs :包括RDMA send,receive 操作,涉及响应者的CPU
- 三种不同的硬件实现
- 三种实现为 :Infiniband,RoCE,iWRP
- Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 , 而RoCE 和 iWARP都是基于以太网的RDMA技术
- RoCE协议存在RoCEv1和RoCEv2两个版本,主要区别RoCEv1是基于以太网链路层实现的RDMA协议(交换机需要支持PFC等流控技术,在物理层保证可靠传输),而RoCEv2是以太网TCP/IP协议中UDP层实现。
- RDMA技术
- 整体架构
- 工作过程
(1)当一个应用执行RDMA 读或写请求时,不执行任何数据复制.在不需要任何内核内存参与的条件下,RDMA 请求从运行在用户空间中的应用中发送到本地NIC( 网卡)。
(2)NIC 读取缓冲的内容,并通过网络传送到远程NIC。
(3)在网络上传输的RDMA 信息包含目标虚拟地址、内存钥匙和数据本身.请求既可以完全在用户空间中处理(通过轮询用户级完成排列) ,又或者在应用一直睡眠到请求完成时的情况下通过系统中断处理.RDMA 操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
(4)目标NIC 确认内存钥匙,直接将数据写人应用缓存中.用于操作的远程虚拟内存地址包含在RDMA 信息中。 - RDMA单边操作
- RDMA READ (A READ B)
(1)首先A、B建立连接,QP已经创建并且初始化。
(2) 数据被存档在B的buffer地址VB,注意VB应该提前注册到B的RNIC (并且它是一个Memory Region) ,并拿到返回的local key,相当于RDMA操作这块buffer的权限。
(3) B把数据地址VB,key封装到专用的报文传送到A,这相当于B把数据buffer的操作权交给了A。同时B在它的WQ中注册进一个WR,以用于接收数据传输的A返回的状态。
(4) A在收到B的送过来的数据VB和R_key后,RNIC会把它们连同自身存储地址VA到封装RDMA READ请求,将这个消息请求发送给B,这个过程A、B两端不需要任何软件参与,就可以将B的数据存储到A的VA虚拟地址。
(5)A在存储完成后,会向B返回整个数据传输的状态信息。 - RDMA WRITE(A WRITE TO B)
与READ基本相同
单边操作适合批量数据传输
- RDMA双边操作
- RDMA SEND/RECEIVE
- SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。
- 对于双边操作为例,主机A向主机B(下面简称A、B)发送数据的流程如下:
(1) 首先,A和B都要创建并初始化好各自的QP,CQ
(2) A和B分别向自己的WQ中注册WQE,对于A,WQ=SQ,WQE描述指向一个等到被发送的数据;对于B,WQ=RQ,WQE描述指向一块用于存储数据的Buffer。
(3) A的RNIC异步调度轮到A的WQE,解析到这是一个SEND消息,从Buffer中直接向B发出数据。数据流到达B的RNIC后,B的WQE被消耗,并把数据直接存储到WQE指向的存储位置。
(4)AB通信完成后,A的CQ中会产生一个完成消息CQE表示发送完成。与此同时,B的CQ中也会产生一个完成消息表示接收完成。每个WQ中WQE的处理完成都会产生一个CQE。 - 双边操作实际上对于RDMA,这是一种复杂的消息传输模式,多用于传输短的控制消息。