QP状态转换

代码位置:ib_verbs.h

enum ib_qp_state {IB_QPS_RESET,IB_QPS_INIT,IB_QPS_RTR,IB_QPS_RTS,IB_QPS_SQD,IB_QPS_SQE,IB_QPS_ERR
};

在QP的生命周期当中,可能的状态可以是
1:Reset
2:Initialize(Init)
3:Ready To Receive(RTR)
4:Ready To Send(RTS)
5:Send Queue Drained (SQD)
6:Send Queue Error (SQE)
7:Error

QP可以通过两种可能的方式从一种状态转换到另一种状态:
(1)显式调用ibv_modify_qp()
(2)在处理错误的情况下,由设备自动转换

处于Reset状态的QP正在创建。
通过从任何状态调用ibv_modify_qp(),可以将任何QP转换到Reset或Error状态。

Reset state

Description

处于Reset状态的QP正在创建。在这种状态下,已经分配了QP的所有所需资源。
为了重用QP,可以通过调用ibv_modify_qp()将其从任何状态转换为Reset状态。如果在此状态转换之前,该QP的发送或接收队列中存在任何工作请求或完成,则它们将从队列中清除。

Work Requests

工作请求不应该被发布到发送或接收队列。尝试这样做将导致立即错误。发送和接收队列中的工作请求都不会被处理。

Packets

以该QP为目标的入站数据包将被静默丢弃。此QP将不发送任何数据包。

Init state

Description

为了移动到这个状态,必须从Reset状态调用ibv_modify_qp()。

Work Requests

工作请求只能被发送到接收队列。试图将工作请求发布到发送队列将导致立即错误。
发送和接收队列中的工作请求都不会被处理。

Packets

以该QP为目标传入的数据包将被静默丢弃。
此QP将不发送任何数据包。

RTR state

Description

为了移动到这个状态,必须从Init状态调用ibv_modify_qp()。
在RTR状态下,QP只能作为响应器使用。

Work Requests

工作请求只能发送到接收队列。试图将工作请求发布到发送队列将导致立即错误。
只有接收队列中的工作请求才会被处理。

Packets

到达此QP的数据包将被送达。QP将从这个QP发送数据包作为响应器(即:数据、ack和nacks)。

RTS state

Description

为了移动到这种状态,必须从RTR或SQD状态调用ibv_modify_qp()。
在RTS状态下,QP可以用作请求者,也可以用作响应者。

Work Requests

可以将工作请求发送到发送队列和接收队列。
将处理发送和接收队列中的工作请求。

Packets

到达此QP的数据包将被送达。QP将从这个QP发送数据包作为响应器(即:数据、ack和nacks)。
QP可以作为请求者发起数据包。

SQD state

Description

为了转移到这种状态,必须从RTS状态调用ibv_modify_qp()。
此状态只影响发送队列:
已经开始处理的工作请求将被处理,直到完全完成。但是,新的工作请求将不会被处理。
这个状态被分离为两个内部状态:
耗尽——发送队列中仍有工作请求正在被处理
已耗尽——发送队列中没有任何正在处理的工作请求
只有当QP的内部状态为drain时,才能将该QP的状态转换为RTS或SQD。

Work Requests

可以将工作请求发送到发送队列和接收队列。
接收队列中的工作请求将被处理。
已开始处理的发送队列中的工作请求将被完成,新的工作请求将不会被处理。

Packets

到达此QP的数据包将被送达。QP将从这个QP发送数据包作为响应器(即:数据、ack和nacks)。
QP可以作为请求者发起数据包。

SQE state

Description

对于所有QP类型,设备将自动转换到此状态,但处于RTS状态并在发送队列中处理以完成错误结束的工作请求的RC QP除外。这个工作请求的状态是未定义的(工作请求是部分处理还是完全处理是未知的),本地或远程缓冲区的内容(取决于使用的操作码)是未定义的。
发送队列中的所有后续工作请求将被错误刷新。
可以调用ibv_modify_qp()将其移回RTS状态以恢复发送队列。

Work Requests

可以将工作请求发送到发送队列和接收队列。
只有接收队列中的工作请求才会被处理。
发送队列的工作请求将被错误刷新。

Packets

到达此QP的数据包将被送达。
QP将从这个QP发送数据包作为响应器(即:数据、ack和nacks)。

ERROR state

Description

这是QP的状态机中的最后一个状态。
如果对于RC QP,发送队列中的工作请求完成后出现错误,或者对于任何QP类型,接收队列中的工作请求完成后出现错误,或者通过从任何状态显式调用ibv_modify_qp(), QP可以被设备自动转换到这种状态。如果QP状态是自动转换的,这个工作请求的状态是未定义的(工作请求是部分处理还是完全处理是未知的),本地或远程缓冲区的内容(取决于使用的操作码)是未定义的。

Work Requests

工作请求可以在发送队列和接收队列中发布。

Packets

在这篇文章中,我们讨论了QP的各种状态和该QP的行为。
下表总结了QP的行为取决于它的状态:

Summary


翻译:https://www.rdmamojo.com/2012/05/05/qp-state-machine/

RDMA-QP状态转换相关推荐

  1. vue中显示和隐藏如何做动画_vue-State Transitions(状态转换)

    Vue的过渡系统提供了许多简单的方法来动画进入,离开和列表,但动画数据本身又如何呢?例如: 数字和计算 显示颜色 SVG节点的位置 元素的大小和其他属性 所有这些都已经存储为原始数字或可以转换为数字. ...

  2. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析

    线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...

  3. JAVA线程间的状态转换

    线程间的状态转换:  1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运 ...

  4. 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )

    文章目录 一.ptrace 函数族 1.进程附着 2.进程脱离 3.进程数据读写权限 4.进程对应的主线程寄存器读写 5.单步调试 6.继续向后执行 二.ptrace 函数族状态转换 一.ptrace ...

  5. Leetcode224 基本加减计算器-双栈和状态转换

    题目 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1&quo ...

  6. java线程主要状态及转换_Java线程状态转换及控制

    线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞(Blocked)和死亡(Dead)这五 ...

  7. java线程切换 notify_浅谈 Java线程状态转换及控制

    作者:城北有个混子 出自:博客园 1.线程的状态(系统层面) 一个线程被创建后就进入了线程的生命周期.在线程的生命周期中,共包括新建(New).就绪(Runnable).运行(Running).阻塞( ...

  8. 线程的状态转换、sleep()、wait()、yeild()、终止线程的方法、线程之间的协作(join()、wait() notify() notifyAll()、await() signal() )

    1.线程的状态转换 1.1 新建(New) 创建后尚未启动 1.2 可运行(Runnable) 可能正在运行,也可能正在等待 CPU 时间片. 包含了操作系统线程状态中的 Running 和 Read ...

  9. boost::statechart模块实现状态转换测试

    boost::statechart模块实现状态转换测试 实现功能 C++实现代码 实现功能 boost::statechart模块实现状态转换测试 C++实现代码 #include <boost ...

最新文章

  1. Linux命令 swap:内存交换空间
  2. eBay的Turmeric和VJet的源程序移到了GitHub上
  3. java如何保存初始化数据_java – 如何在JUnit测试中初始化数据
  4. Java实现复数Complex的加减乘除运算、取模、求幅角角度
  5. matlab制作以太网数据接收上位机_3D激光扫描仪设计及数据处理
  6. VS在win32平台与mysql链接_visual C++如何与MySQL在windows下建立连接
  7. 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
  8. 使用jxls技术导入Excel模版数据(转自其他博客)
  9. 如何使用dosbox运行程序——步骤详解
  10. 如何备考PMP考试?
  11. 北京林业大学计算机复试难度,2015年北京林业大学考研复试经验
  12. 计算机网络ip地址计算广播地址,ip地址计算与子网划分的方法讲解
  13. 湖南大学ACM程序设计新生杯大赛(同步赛)L - Liao Han
  14. 关闭Windows系统的应用程序或窗口的快捷键有哪些?
  15. 运营_APP的常见盈利模式
  16. docx行间距怎么设置_Word行间距怎么调?Word调行间距的方法
  17. 登录页-登录成功后的路由守卫
  18. 联芯 1860平台 icn6211 mipi to RGB 转换芯片 调试 和 st7789 LCD调试spi 9bit 模式
  19. PC时代IE浏览器获胜,Web时代呢?
  20. 链式前向星——最完美图解

热门文章

  1. redis 命令之获取缓存过期时间
  2. Stripes注解官方释义
  3. 前端基础(二十三):DOM基础操作
  4. 智能镜——7.化妆灯和人体感应篇
  5. 阿里工作7年,肝到P8就靠这份学习笔记了,已助14个朋友拿到offer
  6. 多项式A除以B(模拟)
  7. sqlserver 命令一览表
  8. C++:93---类继承(多重继承)
  9. tiledmap入门---2.tmx文件解析
  10. cad单位_CAD制图初学入门常用技巧汇总,CAD零基础也不怕!