[RDMA]QP相关介绍(二)——QP State Machine

1 QP State Machine

QP状态机示意图如下所示,注意事项如下:

  • 实线箭头表示software执行Modify QP verb引起状态改变。
  • 虚线箭头表示检测到错误时发生自定状态更改。
  • 使用Modify QP verb,software可以命令QP从任何其他状态进入Reset状态。
  • 使用Modify QP verb,software可以命令QP从任何其他状态进入Error状态。

QP在任何给定时间可能处于的状态有:

  • Reset:基本QP已创建,但未配置。software可通过Modify QP verb命令QP返回Reset状态。
  • Initialized(Init):

        —RQ WR发布,但不处理RQ WR。如果QP接收任何入站请求包,应将其丢弃。

        —禁止SQ WR发布与处理。

  • RTR(Ready to Receive):

        —RQ 发布与处理。RQ Logic可以处理入站message。如果是RC或RD QP,将生成远端QP的SQ Logic将接收的请求包的响应。

        —禁止SQ WR发布与处理。

  • RTS(Ready to Send):完全可操作的状态

        —WR可同时发布到SQ与RQ。

        —两个队列上的WR都会被处理。SQ Logic可以处理SQ WQE,并生成向远端QP的RQ Logic发送的出站请求包。

  • SQD(SQ Drain):software打算修改一个运行的QP特性时,它命令QP进入SQD状态。进入此状态后,QP的SQ完成所有正在进行的message传输,为QP修改做准备。
  • SQE(SQ Error):当SQ WQE错误完成时进入。software处理错误后,software可以重新发布更正后的失败WQE以及额外的SQ WQE,然后将QP转换为RTS状态。除RC QP外,所有类型的QP都实现此状态,RD EEC也不能实现。原因如下:

        —当遇到某种类型的错误时,RC QP的SQ Logic以及RD EEC的Send Logic会自动retry纠正错误。

        —如果Retry机制不能纠正错误,RC QP或RD EEC将直接从RTS状态转换为Error状态。

  • Error:QP遇到不可恢复的错误时进入该状态。QP停止处理SQ与RQ上的WQE。

        —SQ Logic不处理SQ WQE,也不生成发送至向远端QP的RQ Logic的出站请求包。

        —RQ Logic停止响应远端QP的SQ Logic传输的入站请求包。

2 QP Creation

2.1 Create QP‘s CQ

software创建QP之前,须先创建一个或两个CQ,以便与将要创建的QP的SQ与RQ相关联。可以通过调用一次或两次Create QP verb来实现。

2.2 Create QP

创建CQ后,software通过执行Create QP verb创建QP。

2.3 Create QP Verb Results

verb调用的结果将是下列结果之一:

  • 操作成功完成。
  • 资源不足,无法完成。
  • 无效HCA句柄。
  • 无效CQ句柄。
  • 请求的最大工作请求数超过了HCA的能力。
  • 请求的scatter/gather元素的数量超过了HCA的能力。
  • 无效保护域。
  • QP的服务类型无效。
  • 无效的RDD(仅适用RD)。

3 Software Control of QP State

software可通过执行Modify QP verb来更改QP的当前状态。根据QP的当前状态和要转换到的状态,协议将一些输入参数定义为必需,其他定义为可选的。

4 QP Setup Is Performed in a Defined Sequence

创建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都可以被处理。

5 Reset State

创建QP时进入Reset状态,当software执行Create QP verb时,verb命令HCA Logic创建(或保留)QP操作所需的基本资源,此时QP尚未准备好进行某种操作。使用Modify QP verb,software可以命令QP从任何其他状态进入Reset状态。

QP处于Reset状态时,具有以下特征:

  • QP的SQ与RQ以及它们各自的CQ都是空的。若该QP与其他QP共享其CQ,这些CQ可能包含其他QP的CQE。
  • 在SQ或RQ上发布WR是违法的,这样做会立即返回错误。
  • 禁止处理两个队列上的WQE。
  • 如果任何传入的数据包以此QP为目标,它将被静默丢弃。

从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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值