从零学习 InfiniBand-network架构(七) —— IB协议中数据如何传输
🔈声明:
😃博主主页:王_嘻嘻的CSDN主页
🔑未经作者允许,禁止转载
🚩本专题部分内容源于《InfiniBand-network architecture》,侵权必删
本章将介绍IB协议中五种类型的消息传输请求,并对其中的RDMA read操作进行详细描述,还介绍了可以由QP的RQ逻辑发布和执行的单一类型的消息传输请求。
消息如何传输
在IB网络中,一个消息的传输流程为
软件首先发布一个WR(Work Request)去请求SQ执行Verb,SQ执行对应逻辑,将数据传递至对端RQ;
此外,为了处理RDMA Read Request以及RDMA write with immediate类型的包,本地会准备一个RQ做对应的接收;
软件可以发布到SQ的WR操作类型有以下五类:
-
Send:从本地指定内存中获取数据,发送给对端RQ,对端RQ顶端的WR将指示RQ接收的数据该存到哪块内存中;
该操作支持所有QP服务类型; -
RDMA Read:SQ发起读请求,对端RQ接收请求后,读取指定内存中数据并返回,SQ接收所需数据后,写入本地内存;
仅支持RC和RD; -
RDMA Write:将本地数据写到对端指定内存中(RDMA write和Send的区别在于,Send前往对端的数据是由RQ顶端的WR来决定数据的存放位置,但是RDMA Write是由发送方提前将存放位置确定并指示RQ的);
仅支持RC,UC和RD; -
Atomic RMW:当某任务需要连续访问同一块内存时,需要保证在这期间禁止别的任务对这一内存进行修改,在IBA中,使用一个状态标志,表示内存数据是否处于不可修改状态;
-
Memory Window Bind:之后专题会介绍;
Base Transport Header
IB协议中,上述的操作类型都可以通过报文头部中的BTH(Base Transport Header)的opcode项来标识,如上图:
immediate data:在RDMA write情况下,软件可以在payload最后额外添加immediate data一同传输,而这种操作类型完成后,需要立刻发布Event Queue,以此通知软件,这类特殊包已完成。
当SQ WR在包头中指示了带immediate data时,它将被放在RDMA write last的payload前,IB header后,但是和payload不同,immediate data不需要写入本地内存。
RDMA Read操作
Send操作的流程在之前章节中已经详细描述:IB核心传输引擎Queue Pair
RDMA Write和Send类似,所以不再赘述,本章将描述RDMA Read的过程:
- 首先,CA在本地构建一个信息;
- 向SQ发布发送操作,CA通过软件向对端CA通知,本地信息已经可以读取,需要向HCA提供:
- 本地内存的起始virtual memory address(VA);
- Remote access key(R_Key),RDMA读权限;
- 所需读取数据的大小;
- 软件关联的CA接收上述信息,并向HCA SQ发布WR;
- 执行SQ WQE,SQ会携带2中信息,组成RDMA read请求包;
- 对端RQ通过包中R_Key信息,验证该请求是否得到权限;
- 如果R_Key验证正确,RQ会从指定内存读取数据,并组成响应包返还给SQ;
- SQ收到响应包,并将payload写入内存;
- SQ完成全部传输后,创建一个CQE;
整体流程分为RDMA Read Request 和 RDMA Read Response两部分,前者为HCA向对端指定内存发起读请求,后者为对端CA验证请求合理后,将指定内存中的数据取出并组包,响应给HCA。
如上述步骤2,RDMA Read操作是,软件向SQ发布WR时,需要提供以下内容:
- QPN;
- RDMA read操作类型;
- Scatter buffer list的元素个数;
- 目标QPN和Q_Key;
- VA(虚拟地址);
- R_Key;
- 数据长度;
另外,在发出请求之后,请求者QP的SQ可以发出额外的RDMA读请求(或其他类型的消息传输请求),不需要等待之前请求的读数据返回。
但有一个例外:在RD服务类型中,SQ可能不会开始下一个消息传输,直到完全确认前一个消息传输。
如果响应端QP的RQ支持多个未完成的Atomic或RDMA Read操作,则它将接收到的每个请求按先进先出的顺序存储在特定队列中:
- 任何一次针对响应端QP的未完成RDMA读请求的最大数量在连接建立时协商;
- 响应端QP可以将一个连接限制为一个未完成的RDMA读请求,换句话说,这个队列的最小深度可能只有一个条目。
搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!