RDMA编程杂记

目录

  • 编程杂记
    • 什么是P_Key
    • 建链
      • 基于Socket API的建链
      • 基于CM API的建链

编程杂记

什么是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建链流程:
RDMA编程杂记_第1张图片

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

你可能感兴趣的:(RDMA,RDMA)