[RDMA]RC Connection Establishment

本文主要介绍RC服务类型的建链行为。

1 Local QP Initial Creation and Setup

1.1 CQ and PD Created Before Creating the Local QP

1)CQ Creation

在创建本地QP之前,software必须首先让HCA创建CQ,以便与将要创建的SQ和RQ相关联。QP的SQ与RQ可以有单独的CQ,也可以共享一个CQ。software通过执行多次verb调用的Create CQ,创建多个CQ。调用时,软件提供以下参数:

——HCA标识符(HCA句柄)。

——要创建的CQ期望大小。

CQ被创建后,verb返回以下参数:

——标识新创建的CQ句柄。

——CQ的实际大小(HCA如果不支持请求的大小,则创建较小的CQ,并返回实际的CQ大小)。

2)PD Creation

通过执行Allocate PD verb创造,唯一的输入参数是HCA句柄,唯一的输出参数是PD值。

1.2 Create the Local QP

软件通过执行verb调用的Create QP在HCA中创建QP,verb命令HCA接口创建所需类型的QP。输入参数为:

——HCA句柄。

——QP类型。

——与QP的SQ与RQ相关的CQ句柄。

——software期望发布到QP的SQ与RQ上的WR的最大数量。

——将发布到QP的SQ与RQ的WR的Gather/Scatter Buffer Lists中指定的buffer的最大数量。

创建QP,verb将以下输出参数返回:

——新建的本地QP句柄。

——与本都QP关联的QPN。

——发布到QP的SQ与RQ上的实际WR数量(如HCA不支持期望的数量,会创建一个较小大小的队列,verb返回实际的WR数量。

——在发布到QP的SQ与RQ的WR的Gather/Scatter Buffer Lists中指定的实际的buffer最大数量。

1.3 Assign HCA Port To QP

创建QP后,QP还没有做好发送和接收的准备,使用verb调用的Modify QP,software向新创建的本地QP提供附加信息。其中一项是本地HCA端口(端口号),QP使用该端口发送和接收消息。

1.4 Software “Remember” Local QP’s Handle

HCA中创建本地QP后,software会记住QP分配的句柄,以下情况必须使用:

——将WR发布到QP的SQ或RQ。

——修改QP的操作类型。

——检查QP的当前操作类型。

——销毁QP。

2 Send REQ GMP to Remote CA‘s CM

2.1 Software Issues Connection Request to HCA’s CM

software向与此HCA关联的CM发出连接建立请求。CM通常是运行在主机处理器上的software application。期望建立连接的software application用于调用CM的API不在规范的范围内。

2.2 Each Port on a CA Implements QP1(Its GSI)

接收到HCA的RC或UC QP与远程CA上相同类型的QP之间建立私有通信通道的请求后,CM必须使HCA向远端CA内的CM发出REQ message(建立连接的请求)。CA上的每个端口实现自己专用的QP1,它被称为通用服务接口(GSI),用于发送与接收通用通用服务管理数据包(GSI)。CM是一个GSM,它使用与一个HCA端口关联的GSI来发送和接收GSM。

2.3 CM Builds 256-byte REQ Message in Memory

CM在主存中写入了256-byte的REQ message,内容如下:

——Class=ComMgt。在远程CA上接收数据包的GSI将数据包发送到CA的CM进行处理。

——Method=ComMgtSend。通知远端CA的CM建立连接的message类型。

——Attribute=ConnectRequest。是一个REQ message。

——Service ID。指定要与哪个IOC服务建立连接。(RC/UC)

——远端CA创建的QP类型。

——HCA的QP的QPN。(远端QP的SQ Logic可以向它发消息)

——HCA QP的SQ Start PSN。在远端CA创建的QP将把它分配给为其RQ Logic使用的ePSN。

——HCA QP使用的本地端口地址。(远端QP可以通过合适的端口向HCA QP发送数据包)

——新远端用来发送和接收消息的QP的远端CA端口的端口地址。

2.4 CM Posts WR To SQ of Any HCA Port’s GSI

CM执行verb调用的Post Send Request,将WR发布到任何HCA端口的GSI的SQ。WR指定以下内容:

——REQ message的其实内存地址。

——操作类型。(本例为Send)

——REQ message将被传递到的远程CA上的端口的LID地址。将放置在GMP的LRH:DLID字段中。

——设置目的QPN为QP1。(目的端口的GSI)

2.5 HCA Port‘s GSI SQ Logic Reads REQ Message from Memory

在执行发布的WQE时,GSI的SQ Logic从内存中读取256-byte的REQ message,并准备发送该message。它被放置在传出的GMP的Payload中。

2.6 Message Transmitted and Received

REQ message封装在数据包中,由CM用于发送数据包的端口进行传输。数据包被发送到远端CA上的任何端口上(通过LRH:DLID字段)。此外,BTH:DestQP字段将数据包寻址到目的端口的GSI(即QP1)。数据包经过一个或多个链路,到达目的端口,并被传送到该端口的GSI RQ Logic。

3 GSI Uses Message's Class to Route to CM

GSI的RQ Logic查看数据包中的Class字段,并将其路由到CA的CM进行处理。

4 CM Determaines It's a REQ Message and Create QP

一旦接收到REQ message,远端CA的CM采取以下操作:

——检查提供的Service ID,以查看所请求的服务是否由IOU中的某个IOC提供。

——创建请求类型的QP。(RC或UC)

——将远程QPN即端口地址存储在新创建的QPC中。

——将一个QPN分配给新的QP。

——给新QP的SQ Logic分配一个Start PSN。

——设置新QP的RQ ePSN=分配给HCA QP的SQ的Start PSN,将新QP与REQ message中定义的本地CA端口关联起来。

此时,新QP已准备好接收消息,但HCA QP在设置完成之前不能发送消息。

5 Remote CA‘s CM Returns REP Message

远端CA的CM返回一个REP message(通信应答),其中包含分配给新QP的QPN和SQ Start PSN。该消息由收到REQ message的CA端口上的GSI返回给HCA,被发送到最初发送REQ message的HCA端口上的GSI。

6 REP Message Routed to HCA’s CM

GSI的RQ Logic查看数据包中的Class字段,并将其路由到CA的CM进行处理。

7 HCA CM Supplies REP Message to Software Application

CM依次将REP message中包含的信息传递回发起连接建立请求的software application。

8 Software Completes Setup of HCA QP

使用REP message中包含的信息,software application采取以下操作:

——设置HCA QP的RQ ePSN=分配给远端QP的SQ的Start PSN。

——将远端QP的QPN存储在HCA QPC中。

当它设置完成后,HCA QP完全可以启动消息的发送与接收。

9 Software Application Tells CM to Send RTU Message

software application向HCA CM发送请求,像远端CA的CM发送Ready To Use message(RTU)。CM让其CA端口的GSI将消息发送到远端端口上的GSI。

10 On Receipt of RTU, Remote CM Activates QP

当远端CA上的端口接收到数据包时,它将其发送到GSI的RQ Logic。RQ Logic根据数据包的Class字段确定数据包将被发送到CA的CM。CM接收到RTU message,激活本地QP(即将其状态转换为RTS状态),它现在已准备好使用HCA QP发送与接收message。

需要注意的是,远端QP在收到远端QP的SQ Logic生成的第一个入站请求包后,将自动成RTR状态转换成RTS状态(即使CM还没收到RTU message)。

11 RC WR Doesn‘t Specify Target Port or QPN

发布到RC QP的SQ的WR不指定目标远端端口或QPN,因为本地QP知道目标端口和QPN,此信息存储在本地QP的QPC中。

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值