1 相关概念
QP由发送工作队列与接收工作队列组成,这两个工作队列总作为一对创建,并在其整个生命周期中保持这种状态。
QPN为QP的标识编号。
QPC是特定QP的信息,包括当前的WQE、PSN、传输参数等。
QP句柄由创建QP的操作返回,并作为其他QP操作的标识参数提供。
2 QP verbs概述
与QP创建、管理和销毁相关的verbs有:
- Allocate RDD
- Create QP
- Modify QP
- Query QP
- Destroy QP
- Deallocate RDD
2.1 Allocate and Deallocate RDD Verbs
执行Allocate RDD verb只对RD QP有必要。
2.2 Create QP Verb
执行Create QP verb以创建支持四种IBA传输服务类型之一的QP。输入参数是:
- 标识在哪个HCA上创建QP的HCA句柄。执行Open HCA verb时返回该句柄。
- 与QP的SQ和RQ相关联的CQ句柄。在执行Create CQ verb时返回句柄。
- software预期发布到SQ或RQ上的最大数量的未完成WR(Work Request)。
- software将在发布到SQ或RQ上的任何WR中指明Scatter Buffer或Gather Buffer的最大数量。
- 与此QP相关的RDD(只适用RD QP)。
- 为QP的SQ指定信号类型。有效的类型有:
——所有发布到SQ的工作请求总在完成时生成CQE。
——software为发布到SQ的每个WR中指定是否为成功完成生成CQE。
- QP所属的PD(注意,该PD在之前执行Allocate RDD verb创建)。
- 为此QP请求的IBA传输服务类型。有效的服务类型有RC、RD、UC和UD。
verb返回的输出参数:
- 新创建的QP句柄。句柄用作随后执行Modify QP、Query QP、Destroy QP verb的输入参数。
- QPN。这是由verb分配的24bit的QPN,其用途如下:
——在RC和UC传输服务类型的连接建立过程中,HCA QP的QPN在建链的REQ message中提供给远端CA的CM。
——在向RD或UD的SQ发布WR时,目的QP的QPN会在WR内提供。
- 支持的未完成SQE的实际数量。如果没有返回错误,则保证大于或等于请求的数量(这可能要求software增加SQ相关的CQ的大小)。
- 支持的未完成RQE的实际数量。如果没有返回错误,则保证大于或等于请求的数量(这可能要求software增加RQ相关的CQ的大小)。
- 在提交给SQ或RQ的WR中指明Scatter Buffer或Gather Buffer的实际最大数量。如果没有返回错误,则保证大于或等于请求的数量。
2.3 Modify QP Verb
执行Modify QP Verb的原因如下:
- 为新创建的QP提供操作参数。
- 更新已运行QP的操作特征,但保持QP的当前状态不改变。
- 以编程方式改变QP的运行状态。同时,software可以选择性的改变QP当前的一个或多个操作特性。
当software执行Modify QP verb时,verb调用中指定的当前QP状态与下一个状态定义了一些必需的输入参数,而其他的是可选地。如下:
- Reset-to-Init状态改变。部分参数为必需参数,不允许设置可选参数。
- Init-to-RTR状态改变。必需参数与可选参数都有。
- RTR-to-RTS状态改变。必需参数与可选参数都有。
- Stay in RTS状态(不改变)。无必需的输入参数,有一些可选参数。
- SQE-to-RTS状态改变。无必需的输入参数,有一些可选参数。
- RTS-to-SQD状态改变。无必需或可选输入参数。
- SQD-to-RTS状态改变。无必需的输入参数,有一些可选参数。
- Any state-to-Error状态改变被允许。无必需或可选输入参数。
- Any state-to-Reset状态改变被允许。无必需或可选输入参数。
- Error-to-Reset状态改变。在QP进入Error状态后允许software执行的唯一状态,无必需或可选输入参数。
Modif