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

    请添加图片描述

      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干货分享!

  • 相关阅读:
    1.4 Apache Hadoop完全分布式集群搭建-hadoop-最全最完整的保姆级的java大数据学习资料
    苹果手机照片如何导入电脑?无损快速的传输办法分享!
    小区住宅故障电弧探测器可4G上传
    leetcode 241Different Ways to Add Parentheses 为运算表达式设计优先级 解题记录
    破圈的可能性
    关系型数据库 vs 非关系型数据库
    Mybatis简介
    最详细STM32,cubeMX外部中断
    使用 Node.js 和 Azure Function App 自动更新 Elasticsearch 索引
    PIE-engine 教程 ——map()映射函数和for循环函数的综合应用NDVI和NDWI计算北京市各区面积
  • 原文地址:https://blog.csdn.net/sz_woshishazi/article/details/127396675