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建链流程:
在这里插入图片描述文章来源地址https://uudwc.com/A/rZ3mM

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

原文地址:https://blog.csdn.net/qq_42890800/article/details/133176579

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月24日 01:18
数据结构——栈(C++ 实现)
下一篇 2023年09月24日 01:20