赞
踩
QP状态机示意图如下所示,注意事项如下:
QP在任何给定时间可能处于的状态有:
—RQ WR发布,但不处理RQ WR。如果QP接收任何入站请求包,应将其丢弃。
—禁止SQ WR发布与处理。
—RQ 发布与处理。RQ Logic可以处理入站message。如果是RC或RD QP,将生成远端QP的SQ Logic将接收的请求包的响应。
—禁止SQ WR发布与处理。
—WR可同时发布到SQ与RQ。
—两个队列上的WR都会被处理。SQ Logic可以处理SQ WQE,并生成向远端QP的RQ Logic发送的出站请求包。
—当遇到某种类型的错误时,RC QP的SQ Logic以及RD EEC的Send Logic会自动retry纠正错误。
—如果Retry机制不能纠正错误,RC QP或RD EEC将直接从RTS状态转换为Error状态。
—SQ Logic不处理SQ WQE,也不生成发送至向远端QP的RQ Logic的出站请求包。
—RQ Logic停止响应远端QP的SQ Logic传输的入站请求包。
software创建QP之前,须先创建一个或两个CQ,以便与将要创建的QP的SQ与RQ相关联。可以通过调用一次或两次Create QP verb来实现。
创建CQ后,software通过执行Create QP verb创建QP。
verb调用的结果将是下列结果之一:
software可通过执行Modify QP verb来更改QP的当前状态。根据QP的当前状态和要转换到的状态,协议将一些输入参数定义为必需,其他定义为可选的。
创建QP的初期(或如果QP已通过Modify QP verb被命令进入Reset状态),software将通过一系列定义的状态逐步推进,直到完全可操作:
① 创建后,QP立即处于Reset状态。既没有足够的消息发送消息,也没有足够的信息接收消息。
② 使用Modify QP verb,software为QP提供额外的信息,并将其状态转换为Init状态。
—发布RQ WR,但不处理RQ WQE。
—禁止SQ WR发布与处理。
③ 使用Modify QP verb,software向QP提供附加信息,将其转换为RTR状态。
—WR可同时发布到SQ与RQ。
—两个队列上的WQE都可以被处理。
创建QP时进入Reset状态,当software执行Create QP verb时,verb命令HCA Logic创建(或保留)QP操作所需的基本资源,此时QP尚未准备好进行某种操作。使用Modify QP verb,software可以命令QP从任何其他状态进入Reset状态。
QP处于Reset状态时,具有以下特征:
从Reset状态开始,software可以将QP转换到的唯一有效状态是Init状态。因此,software执行Modify QP verb,下表为输入参数。
Input Parameter | Application QP Types | Required | Description |
---|---|---|---|
HCA Handle | All | Yes | 由调用向前的Open HCA verb返回。 |
QP Handle | All | Yes | 由调用向前的Create QP verb返回。 |
Next State | All | Yes | Init状态。 |
Enable or disable the ability of the RQ Logic to handle incoming RDMA Reads | RC、RD | Yes | Self-explanatory。 |
Enable or disable the ability of the RQ Logic to handle incoming RDMA Writes | RC、RD、UD | Yes | Self-explanatory。 |
Enable or disable the ability of the RQ Logic to handle incoming Atomic requests | RC、RD | Yes | Self-explanatory。 |
Primary P_Key index | RC、UC、UD | Yes | ● 出站请求包的使用:每当此QP的SQ Logic生成到其关联的HCA端口的出站请求包时,它都会提供此值作为端口的P_KeyTable属性的索引。 ● 入站请求包的使用:当与QP相关的端口接收到一个入站请求包时,将该请求包的BTH:P_Key与存储在目的QP的QPC中的Primary P_key索引值所选端口的P_KeyTable属性的条目作比较。 不适用非IBA QP或RD QP。 |
Q_Key | UD、RD | Yes | ● 出站请求包的使用:当WR发布到RD/UD QP的SQ时,software提供分配给目标QP的Q_Key。Q_Key插入到出站请求包中。 ● 入站请求包的使用:数据包BTH:Q_Key与目的地QP的Q_Key比较。 |
HCA port number | RC、UC、UD | Yes | 物理HCA端口QP将用来发送和接收message。 |
software使用Modify QP verb将QP从Reset状态转换到Initialized状态。
当QP处于Initialized状态时,它具有以下操作特征:
从Init状态开始,software可以将QP转换到唯一有效的状态RTR状态,为此software执行verb调用的Modify QP。注意,使用Modify QP,software可命令QP进入Reset或Error状态。下表为定义的输入参数。
Input Parameter | Application QP Types | Required | Description |
---|---|---|---|
HCA Handle | All | Yes | 由调用向前的Open HCA verb返回。 |
QP Handle | All | Yes | 由调用向前的Create QP verb返回。 |
Next State | All | Yes | RTR状态。 |
RQ‘s Start ePSN | RC、UC | Yes | RQ Logic的Start ePSN必须设置为远程QP的SQ Logic的Start PSN。在连接建立过程中,它在REP message中提供。 |
Queue depth for inbound RDMA Read/Atomic operations | RC、RD | Yes | RQ Logic特殊队列的深度,入站RDMA Read和Atomic operation请求被提交该队列中。 |
Remote Node Address Vector | RC、UC | Yes | software为QP提供向目标QP所在远端CA端口发送请求包所需的所有地址信息。包括: ● Service Level。 ● Send GRH Flag。如果设置,则表示远端CA在不同的子网中,发送给它的报文必须包含GRH,softwate还提供以下功能: -Traffic Class。 -Flow Label。 -Hop Limit。 -Source GID index。 -DGID。 ● DGID。如果目标CA在同一子网中,则DLID=目标CA端口的LID,否则DLID=路由器入端口的LID。 ● PMTU。 ● Maximum Static Rate。 ● Local ACK Timeout(仅RC)。 ● Retry Count(仅RC)。 ● RNR Retry Count(仅RC)。 ● Source Path Bits。 注,尽管Retry Count和RNR Retry Count都显示备用路径的地址信息,规范中将它们从列表中删除已被批准用于下一个规范修订。 |
Destination QPN | RC、UC | Yes | Self-explanatory。 |
Alternate Path Address Infortion | RC、UC | No | 如果HCA支持自动路径迁移,software可选择性支持: ● 备用路径的P_Key索引。 ● 用于此QP的备用路径的HCA端口。 ● 备用路径的地址向量,包括该表中对远程节点地址向量的描述中指定的所有信息(用于不同路径)。 |
Enable/disable incoming RDMA and Atomic Operations | RC、RD、UC | No | ● 使能/禁用该QP上的incoming RDMA Read(仅RC、RD)。 ● 使能/禁用该QP上的incoming RDMA Write。 ● 使能/禁用该QP上的incoming Atomic operation(仅RC、RD)。 |
Primary P_Key index | RC、UC、UD | No | 见上表。 |
Q_Key | UD、RD | No | 见上表。 |
New SQ and/or RQ size | All | No | 如果HCA支持调整SQ与RQ大小: ● software预期发布给SQ的未完成WR的最大数量。 ● software预期发布给RQ的未完成WR的最大数量。 |
Minimum RNR Nak Timer Field | RC、RD | No | 如果入站的Send或RDMA Write With Immediate message到达,而没有WQE发布至RQ,则RQ Logic返回一个RNR Nak。这是放置在Nak的RNR Nak Timer字段的值。重传该请求包之前,请求方需等待指定的时间。 |
software使用verb调用Modify QP,将QP从Init状态转换成RTR状态。
当QP处于RTR状态时,具有的特征如下:
software通常会将QP从RTR状态转换到RTS状态,如果software只打算通过这个QP接收message而不发送,可以让QP始终处于RTR状态,否则执行Modify QP,输入参数如下表:
Input Parameter | Application QP Types | Required | Description |
---|---|---|---|
HCA Handle | All | Yes | 由调用向前的Open HCA verb返回。 |
QP Handle | All | Yes | 由调用向前的Create QP verb返回。 |
Next State | All | Yes | RTS状态。 |
Local Ack Timeout | RC | Yes | QP的SQ Logic重传相应的请求包之前等待Ack的时间。 |
SQ Start PSN | RC、UC、UD | Yes | software分配给该QP的SQ Logic的Start PSN。它被插入到由SQ Logic生成的第一个请求包中的BTH:PSN字段中。 |
Retry Count | RC | Yes | QP的SQ Logic由于超时或Nak-Sequence error导致重传的次数。 |
RNR Retry Count | RC | Yes | 两个QP建链时,远端CA的CM提供。定义远端QP的RQ Logic接收RNR Nak请求包的重传次数。如果无法接收请求包,远端QP的RQ Logic返回RNR Nak。 |
Depth of remote QP‘s special queue for RDMA Read/Atomic operations | RC、RD | Yes | RQ Logic接收入站RDMA Read和Atomic operation请求的特殊队列的深度。 |
Enable/disable incoming RDMA and Atomic Operations | RC、RD、UC | No | ● 使能/禁用该QP上的incoming RDMA Read(仅RC、RD)。 ● 使能/禁用该QP上的incoming RDMA Write。 ● 使能/禁用该QP上的incoming Atomic operation(仅RC、RD)。 |
Q_Key | RD、UD | No | 见上表。 |
Alternate Path address information | RC、UC | No | 见上表。 |
Path Migration State | RC、UC、RD | No | 表示迁移状态。 |
New SQ and/or RQ size | All | No | 如果HCA支持调整SQ与RQ大小: ● software预期发布给SQ的未完成WR的最大数量。 ● software预期发布给RQ的未完成WR的最大数量。 |
Minimum RNR Nak Timer Field | RC、RD | No | 见上表。 |
QP处于RTS状态时,message可以被接收和发送。software使用verb调用Modify QP从RTS状态转换成RTR、SQD或SQE状态。
QP处于RTS状态时,具有以下特征:
—在发起建链的CA上,将此QP转换为RTS状态之前,必须发送REQ message来接收相应的REP message。
—在发送REP message的CA上,RTU message必须将其QP转换为RTS状态之前被接收(它也将收到来自远端QP的SQ Logic的第一个请求包时自动跳转到RTS转态)。
software可以将QP从RTS状态转换为SQD状态,为修改QP的操作特性做准备。使用Modify QP verb,software可以命令QP进入Reset或Error状态。为此,software执行Modify QP verb,输入参数如下。注意,不允许使用可选参数。
Input Parameter | Application QP Types | Required | Description |
---|---|---|---|
HCA Handle | All | Yes | 由调用向前的Open HCA verb返回。 |
QP Handle | All | Yes | 由调用向前的Create QP verb返回。 |
Next State | All | Yes | SQD状态。 |
Affiliated Asynchronous Event notification | All | No | software告诉verb层每当关联异步事件发生时要调用的处理程序的起始地址。当software稍后使用Modify QP verb将QP转换为SQD状态时,它可以指定一旦QP的SQ完成所有正在进行的消息传输就生成关联异步事件。在完成所有正在进行的消息传输后,HCA将通知verb层(通常通过中断)要调用异步事件处理程序及其原因。调用处理程序,确定QP的SQ现在处于静止状态,并在更改QP的操作特征之前通知正在等待此通知的software实体。software可以使用一次Modify QP verb来改变QP的操作特征,将其更改为RTS状态。 |
software使用Modify QP verb将QP从SQD状态转换为RTS状态。
software可能需要改变已完全运行的QP的操作特征(如它处于RTS状态)。当QP仍有一个或多个message发送到远端QP时,这样做是危险的。命令一个运行的QP进入SQD状态会导致QP:
没有传输新的message,software可以安全地使用Modify QP verb来改变QP的操作特性,然后将QP恢复至完全运行状态。此时,QP的SQ Logic使用SQ上的下一个WQE解除暂停并回复message传输。
当QP进入SQD状态时,具有以下操作特征:
—不得在其SQ上开始处理任何尚未开始传输的WR。
—必须完成任何先前启动的消息传输。
—必须处理正在进行的消息传输(RC和RD)相关请求包返回的Ack。
在较早的时候,software会执行Set Asynchronous Event Handler verb,以告诉verb层每当Asynchronous Event发生时要调用的处理程序的起始地址。
当software稍后使用Modify QP verb将QP转换为SQD状态时,它可以选择一旦QP的SQ完成所有正在进行的message传输就生成Affiliated Asynchronous Event。
完成所有正在进行的message传输后,HCA将通知verb层(通常通过中断)要调用Asynchronous Event Handler及其原因。调用Handler,确定QP的SQ现在处于静止状态,并在更改QP的操作特征之前通知正在等待此通知的software实体。然后,software可以调用一次Modify QP verb来改变QP的操作特征,并将其更改回RTS状态。
当使用Modify QP verb将QP从SQD状态转换回RTS状态时可能提供的输入参数如下表。
Input Parameter | Application QP Types | Required | Description |
---|---|---|---|
HCA Handle | All | Yes | 由调用向前的Open HCA verb返回。 |
QP Handle | All | Yes | 由调用向前的Create QP verb返回。 |
Next State | All | Yes | RTS状态。 |
Remote Node Address Vector | RC、UC | No | 见上表。 |
Alternate Path address information | RC、UC | No | 见上表。 |
Path Migration State | - | No | 见上表。 |
Depth of remote QP‘s special queue for RDMA Read/Atomic operations | RC、RD | No | RQ Logic接收入站RDMA Read和Atomic operation请求的特殊队列的深度。 |
Queue depth for inbound RDMA Read/Atomic operations | RC、RD | Yes | RQ Logic特殊队列的深度,入站RDMA Read和Atomic operation请求被提交该队列中。 |
Q_Key | RD、UD | No | 见上表。 |
P_Key index | RC、UC、UD | No | 见上表。 |
Local Ack Timeout | RC | No | QP的SQ Logic重传相应的请求包之前等待Ack的时间。 |
Retry Count | RC | Yes | QP的SQ Logic由于超时或Nak-Sequence error导致重传的次数。 |
RNR Retry Count | RC | Yes | 两个QP建链时,远端CA的CM提供。定义远端QP的RQ Logic接收RNR Nak请求包的重传次数。如果无法接收请求包,远端QP的RQ Logic返回RNR Nak。 |
New SQ and/or RQ size | All | No | 如果HCA支持调整SQ与RQ大小: ● software预期发布给SQ的未完成WR的最大数量。 ● software预期发布给RQ的未完成WR的最大数量。 |
Minimum RNR Nak Timer Field | RC、RD | No | 见上表。 |
HCA port number | RC | No | 物理HCA端口QP将用来发送和接收message。 |
除RC QP外,所有类型的QP都实现此状态,但RD EEC无法实现。
在message传输的过程中,当SQ WQE遇到错误时,自动转换为SQE状态。既可以由RTS状态进入,也可由SQD状态进入。
当QP转换为Error状态时,QP将完全无效。它同时停止处理SQ与RQ的WQE,停止向远端QP的RQ Logic发送请求包,同样RQ Logic停止处理任何由远端QP的SQ Logic传输的传入请求包,请求包将被静默丢弃。
当QP处于SQE状态时(从RTS状态或SQD状态),SQ Logic停止处理SQ WQE,没有新的请求包被传输到远端QP的RQ Logic。另一方面,QP的RQ Logic保持完整的功能。在进入SQE状态之前发布到RQ的RQ WQE会被处理,QP的RQ Logic响应由远端QP的SQ Logic传输的传入请求包。虽然新的WQE可以发布到QP的RQ,但规范似乎暗示,在QP转换回RTS状态之前,请求包不会被处理。协议规定如下:
"C10-38: Receive Work Requests which were submitted to a Receive Queue prior to that queue's transition into the SQEr state shall continue to be processed normally. New Receives must be able to be posted to such a Receive Queue."
QP进入SQE状态时,具有以下操作特征:
—Interface Check。提供给HCA的WR信息中有错误。这种情况下,任何message放入链路前会检测到错误。
—Processing Error。SQ Logic在处理WQE时出现错误。
—Send操作可能已部分或全部被RQ Logic完成,并且RQ CQE可能已生成或还未生成。
—RDMA Read操作可能已部分完成(即,一个或多个RDMA Read响应包可能已返回请求方,可能已经或者还未写入本地内存),所以其WR所指向的Scatter Buffers的内容是不确定的。
—RDMA Write操作可能已部分完成,目标CA的本地内存的内容不确定。如果该操作指定在message的最后一个数据包中传递即时数据,则RQ CQE不确定是否已创建。
—原子操作可能已经或者还未在远端的CA内存中,WR的远端地址所指向的内存内容可能包含原始或已更新的数据。在请求方的QP端,为保存返回的读数据而分配的内存缓冲区的内容是不确定的。
转换到SQE状态时,software可能采取以下行为:
—Send操作可能已部分或全部被RQ Logic完成,并且RQ CQE可能已生成或还未生成。
—RDMA Read操作可能已部分完成(即,一个或多个RDMA Read响应包可能已返回请求方,可能已经或者还未写入本地内存),所以其WR所指向的Scatter Buffers的内容是不确定的。
—RDMA Write操作可能已部分完成,目标CA的本地内存的内容不确定。如果该操作指定在message的最后一个数据包中传递即时数据,则RQ CQE不确定是否已创建。
—原子操作可能已经或者还未在远端的CA内存中,WR的远端地址所指向的内存内容可能包含原始或已更新的数据。在请求方的QP端,为保存返回的读数据而分配的内存缓冲区的内容是不确定的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。