RDMA编程杂记

编程杂记

什么是P_Key

P_Key(Partition Key)用于提供InfiniBand网络的隔离机制,只有在一个分区内的节点可以互相通信。

P_Key是一个16位的值,有两部分

  1. msb位:membership bit,0表示limitied membership,1表示full membership
  2. 低15位是定义分区的key

只有具有同样key的QP才可以通信,而且至少一个QP是这个分区的full member。

P_Key在所有通信类型中都存在,不论RC,UD

建链

基于Socket API的建链

  1. 通过Socket连接交换信息,例如在RC Send中,需要交换GID、QPN信息
  2. 调用ibv_modify_qp函数改变QP状态,将SQ改为RTS状态,将RQ改为RTR状态。在更改状态时,把GID、QPN信息写入QPC(RC)

基于CM API的建链

介绍RC QP的CM建链流程:
在这里插入图片描述

  1. 首先Client端要发起一个REQ(Request)消息,表示一个连接请求,消息的报文中携带有连接参数,比如本端要连接的QP的QPN、起始PSN、重传次数上限等等。
  2. Server端在Client端发起连接请求前就一直处于监听状态,当它监听到连接请求后,CM层会对连接参数进行校验和记录。校验通过后,Server端会发送REP(Reply)消息,表示接受之前的连接请求,并且在消息报文中携带自己的连接参数(QPN、起始PSN等)。
  3. Client端收到REP消息后,将对其中的内容进行校验和记录,然后发送一个RTU(Ready To Use)消息,表示同意你的参数,可以利用双方约定好的QP进行数据交互了。

RoCE的LID和GID

由于LID是InifiniBand协议栈链路层的属性,其在RoCE网络中无效,因此RoCE网卡中,LID为零。

RoCE网卡中有一张GID表,存放这张网卡的GID信息。在下图中,mlx5_1网卡中有四个GID。

在这里插入图片描述

应用程序可以根据GID得到MAC地址和IP地址,以在以太网中进行通信。在GID表中,Index 0和1的GID由MAC地址转换而来,Index 2和3的GID由IP地址转换而来。

在两端RoCE网卡通信时,使用的GID索引必须相同,即要么同时是0或1,要么同时是2或3。

SGL

RDMA编程中,SGL(Scatter/Gather List)是最基本的数据组织形式。 SGL 是一个数组,该数组中的元素被称之为 SGE(Scatter/Gather Element),每一个 SGE 就是一个 Data Segment (数据段)。RDMA 支持 Scatter/Gather 操作,具体来讲就是 RDMA 可以支持一个连续的 Buffer 空间,进行 Scatter 分散到目的主机的多个不连续的 Buffer 空间。Gather 指的就是多个不连续的 Buffer 空间可以 Gather 到目的主机的一段连续的 Buffer 空间。

在这里插入图片描述

从这张图中可以看到,多个分散存储的SGE被RDMA网卡组成成一个连续的数据段发送出去。在实际编程中,可以把多个SGE看成一个SGE被分散到多个存储位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值