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执行的唯一状态,无必需或可选输入参数。
Modify QP Verb的输入参数如下表。
Parameter | Applicable Service Type | Comments | Required、Optional、or Not Allowed? |
---|---|---|---|
HCA handle | All | 标识QP所在的HCA,由先前执行的Open HCA verb返回。 | Required |
QP handle | All | 标识需要更新其特性的QP,由执行的Create QP verb返回。 | Required |
Next QP state | All | ● 如果指定的状态与QP的当前状态相同,则QP的状态保持不变。指定的QP属性被修改。 ● 如果下一个状态是SQD状态,那么调用方可以指定一旦SQ已完成用尽是否调用关联异步事件的句柄。 | Required,但可以与QP当前状态相同 |
Primary P_Key index | RC、UC、UD | 相应端口的P_KeyTable中的索引为P_Key索引。 QP将QP的P_Key索引选择的端口P_Key插入它生成的包的BTH:P_Key字段中。 收到包后,QP的RQ Logic根据QP的P_Key索引值选择的端口P_Key检查包的该字段。 RD服务时,不是QP而是EEC。 | ● Reset to Init状态更改时需要。 ● Init to RTR状态更改时可选择。 ● SQD to RTS状态更改时可选择。 |
Q_Key | RD、UD | 创建本地RD或UD QP后,software为其分配一个32bit的Q_Key,并使用Create QP、Modify QP verb为新创建的QP提供Q_Key,储存在QPC中。 | ● Reset to Init状态更改时需要。 ● Init to RTR状态更改时可选择。 ● RTR to RTS状态更改时可选择。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQE to RTS状态更改时可选择。 ● SQD to RTS状态可选择是否改变。 |
Start PSN | RC、UC、UD | 将Start PSN分配给QP的SQ Logic。 | RTR to RTS状态更改时可选择。 |
Maximum number of outstanding WRs posted to SQ and RQ | All | 当HCA支持动态调整SQ和RQ大小时才能配置这些参数,可通过执行Query HCA verb发现。 | ● RTR状态更改时可选择。 ● RTR to RTS状态更改时可选择。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQE to RTS状态更改时可选择。 ● SQD to RTS状态可选择是否改变。 |
如果指定的QP是QP0、QP1、Raw IPv6或Raw Ethertype,则该表其余输入参数不适用。 | |||
Primary HCA port associated with this QP | RC、UC、UD | 指定本地HCA端口,QP通过该端口发送和接收报文。 在RC QP上如HCA支持,可在QP从SQD状态转换到RTS状态时指定新的QP/端口关联,通过执行Query HCA verb发现。 | ● Reset to Init状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
RQ ePSN | RC、UC | 指定RQ Logic的ePSN,用于确定传入的请求包是下一个预期请求包、重复请求包还是“stale”请求包。此值在通信建立的过程中由远端CA的CM返回,此值与远端QP的SQ Logic分配的Start PSN相同。 | Init to RTR状态更改时需要。 |
Enable or disable the ability of the RQ Logic to handle incoming RDMA Reads | RC、RD | -- | ● Reset to Init状态更改时需要。 ● Init to RTR状态更改时可选择。 ● RTR to RTS状态更改时可选择。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQE to RTS状态更改时可选择。(仅RD) |
Enable or disable the ability of the RQ Logic to handle incoming RDMA Writes | RC、RD、UD | -- | ● Reset to Init状态更改时需要。 ● Init to RTR状态更改时可选择。 ● RTR to RTS状态更改时可选择。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQE to RTS状态更改时可选择。 |
Enable or disable the ability of the RQ Logic to handle incoming Atomic requests | RC、RD | -- | ● Reset to Init状态更改时需要。 ● Init to RTR状态更改时可选择。 ● RTR to RTS状态更改时可选择。 ● SQE to RTS状态更改时可选择。(仅RD) |
Destination QP number | RC、UC | 这是远端QP的QPN。建链期间,远端CA的CM提供。 | ● Reset to Init状态更改时需要。 |
Number of RDMA Reads and Atomic operations the SQ Logic can have outstanding at any time | RC | 该值由远端QP的RQ Logic用于处理入站的RDMA Read和Atomic 请求的特殊队列深度指定。建链期间,该值在REP message中返回。 | ● RTR to RTS状态更改时需要。 ● SQD to RTS状态更改时可选择。 |
Size of the special queue in the QP‘s RQ Logic for handling inbound RDMA Reads and Atomic requests | RC | 此值可以四舍五入到一个被支持的值,不能超过这个HCA的QP允许的最大值。(通过执行Query HCA verb可知)。 | ● RTR to RTS状态更改时可选择。 ● SQD to RTS状态更改时可选择。 |
Minimum RNR Nak Timer Field Value | RC、RD | RNR Nak报文的Syndrome字段的后五位包含一个Timer值,这是请求方QP的SQ Logic在重传当前请求包之前必须等待的最小时间。 | ● Init to RTR状态更改时可选择。 ● RTR to RTS状态更改时可选择。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQE to RTS状态更改时可选择。 ● SQD to RTS状态可选择是否改变。 |
Path migration state | RC、UC | 仅在HCA支持APM(自动路径迁移)时有效。可通过执行Query HCA verb得知。有效状态是: —Migrated,或 —Rearm。 | ● RTR to RTS状态更改时可选择。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQD to RTS状态可选择是否改变。 |
仅对于RC和UC,地址向量包含以下元素: | |||
Service Level | RC、UC | 这是插到QP的SQ Logic生成的所有请求包的LRH:SL字段的SL值。 | ● Init to RTR状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
Send Global Routing Header Flag | RC、UC | 如果远端CA位于不同子网中,则必须将此位置为1,须提供以下参数: —Traffic Class。 —Flow Label。 —Hop Limit。 —SGID Index。 —DGID address。 | ● Init to RTR状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
DLID address | RC、UC | —如果远端CA在同一子网中,DLID=远端CA的目的端口LID。 —如果远端CA不在同一子网中,DLID=路由器入端口的LID地址。 | ● Init to RTR状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
PMTU | RC、UC | 此值为路径最大传输单元,表示数据包中使用的最大允许数据有效载荷大小。 | ● Init to RTR状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
Maximum Static Rate | RC、UC | 此值为包间延迟,定义了向目的QP发送数据包之间必须观察的间隔。 | ● Init to RTR状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
Local ACK Timeout | RC | 指定QP的SQ Logic在重新尝试传输相应请求包之前等待Ack包的时间。 | ● RTR to RTS状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
Retry Count | RC | 定义了由超时、PSN错误或丢失报文导致的QP的SQ Logic重新传输请求包的次数。 | ● RTR to RTS状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
RNR retry count | RC | 此值由远端QP的RQ Logic提供,定义了远端QP的RQ Logic接收RNR Nak请求包的重试次数。 | ● RTR to RTS状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
Source Path Bits | RC、UC | 当QP的SQ Logic发送一个请求包到它指定的端口进行传输时,请求包的Source LID (SLID)字段中必须显示哪个端口指定的LID地址。此项以源端口的基本LID地址的偏移量的形式提供。当QP建立时,储存到RC、UC或UD QP的QPC中。 | ● Init to RTR状态更改时需要。 ● SQD to RTS状态可选择是否改变。 |
以下备用路径地址信息仅适用于该CI支持APM的RC与UC QP(注,备用路径的PMTU需与主路径相同)。 ● Init to RTR状态更改时可选。 ● RTR to RTS状态更改时需要。 ● 如果当前状态是RTS且没有被改变,这是可选择的。 ● SQD to RTS状态可选择是否改变。 | |||
Alternate path P_Key Index | RC、UC | -- | -- |
Alternate path Physical port | RC、UC | -- | -- |
Alternate path address vector | RC、UC (除非另有说明) | 包括: —Service Level。 —Send Global Routing Header Flag bit。 —DLID of the destination CA port or route ingress port。 —Maximum Static Rate。 —Local ACK Timeout(RC only)。 —Retry Count(RC only)。 —RNR Retry Counter(RC only)。 —Source Path Bits。 对于全局目的地: —Traffic Class。 —Flow Label。 —Hop Limit。 —SGID Index。 —DGID address。 注,Retry Count与RNR Retry Count在协议1.0a中都显示备用路径地址信息,但它们已被批准从此列表中删除,以备下一次修订。 | -- |
2.4 Query QP Verb
software可以执行Query QP verb以获得QP的当前状态和操作特征。执行verb时,将提供HCA句柄与QP句柄作为输入参数。向调用方返回QP当前操作特征的列表。如果QP处于Reset状态,则它的许多操作特征是未定义的,不会返回。
2.5 Destory QP Verb
software可以执行Destory QP verb以销毁QP,提供HCA句柄与QP句柄作为输入参数。