目录
四、RDMA通信和ceph AsyncMessenger的关系
作者:bandaoyu 本文随时更新,地址:https://blog.csdn.net/bandaoyu/article/details/125681856
一、前言
首先应该先了解RDMA:https://blog.csdn.net/bandaoyu/article/details/112859853
RDMA 学习资料总目录:https://blog.csdn.net/bandaoyu/article/details/120485737
本文所讲述的主要是IBoE的RDMA编程,主要是ROCE、iWrap,与IB可能略有不同。
二、基本概念
1、队列和队列成员
关键词:点对点通信、QP(SQ+RQ)、CQ、*QE
RDMA提供了基于消息队列的点对点通信,每个应用都可以直接获取自己的消息,无需OS和协议栈的介入。
队列:QP (Queue Pairs) 和CQ
RDMA提供了基于消息队列的点对点通信,当应用需要通信时,就会创建一条Channel连接,每条Channel的两端各有一对队列(Send Queue(SQ)和Receive Queue(RQ)),合称Queue Pairs(QP),除此之外,两端还需要一个 完成队列-Complete Queue(CQ),CQ用来存放 发送和接收请求处理完成的通知。
队列成员:SQE、RQE、CQE等*QE
队列里面的成员叫xxE,SQ里面的成员叫SQE,RQ里面的叫RQE,CQ里面的就是CQE……
而发送队列SQ和接收队列RQ,统称工作队列WQ (work Queue),所以里面单元又叫WQE;
SR(发送请求)和RR(接收请求)都是WR=工作请求;
每当网卡发送or接收完成一个请求,会在CQ产生一个CQE,知会用户消息已经被处理完。
总结
SQ:发送队列,SQ中的单元叫SQE;
RQ:接收队列,RQ中的单元叫RQE;
SQ和RQ都是WQ,就像男人和女人都叫人,WQ中的单元叫WQE;
SR(发送请求)和RR(接收请求)都是WR=工作请求;
QP=SQ+RQ
CQ:完成队列,CQ中的单元叫CQE;
2、传输模式
简介
RDMA 单边和双边两种传输模式。
SEND/RECEIVE:
是双边操作,每一次数据传输都需要双边参与。
READ和WRITE :
是单边操作,除了第一次握手(获得对端的内存地址),后续的数据传输,单端直接DMA读写对端的内存。
第一次握手获得对端接收数据的内存地址后,本端明确信息的源和目的地址,数据的读或存都通过远端的DMA在RNIC与应用buffer之间完成,再由远端RNIC封装成消息返回到本端。对端的CPU毫无知觉。(所以WRITE完成后,一般要再发一个消息去通知对端:我已经完成一次操作了,去查看CQ队列吧。然后对端就会去读CQ队列,拿出CQE解析或者本地把数据写到哪里了,它再去处理数据)
在实际中,SEND/RECEIVE多用于连接控制类报文,而数据报文多是通过READ/WRITE来完成的。
单边双边传输流程简述
双边
对于双边操作为例,A向B发送数据的流程如下:
首先,