从零学习 InfiniBand-network架构(七) ——IB协议中数据如何传输

从零学习 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

从零学习 InfiniBand-network架构(七) ——IB协议中数据如何传输_第1张图片

  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的过程:

  1. 首先,CA在本地构建一个信息;
  2. 向SQ发布发送操作,CA通过软件向对端CA通知,本地信息已经可以读取,需要向HCA提供:
    • 本地内存的起始virtual memory address(VA);
    • Remote access key(R_Key),RDMA读权限;
    • 所需读取数据的大小;
  3. 软件关联的CA接收上述信息,并向HCA SQ发布WR;
  4. 执行SQ WQE,SQ会携带2中信息,组成RDMA read请求包;
  5. 对端RQ通过包中R_Key信息,验证该请求是否得到权限;
  6. 如果R_Key验证正确,RQ会从指定内存读取数据,并组成响应包返还给SQ;
  7. SQ收到响应包,并将payload写入内存;
  8. 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干货分享!

你可能感兴趣的:(学习,网络)