在InfiniBand及RDMA编程中,队列对(Queue Pair,QP)是通信的核心抽象。正确理解QP的状态机、如何通过ibv_modify_qp()进行状态设置以及各个状态之间的合法转换,是开发稳定高效RDMA应用的基石。本文基于对QP状态机常见问题的讨论,系统地梳理了QP的生命周期、属性修改规则以及最终工作状态RTS的含义。
一、QP的标准状态机
一个QP从创建到销毁,遵循有限状态机模型。标准定义的关键状态如下表所示:
| 状态 | 含义 | 主要特征 |
|---|---|---|
| RESET | 复位状态 | QP刚创建或重置后的初始状态,发送队列(SQ)和接收队列(RQ)为空,不参与任何通信。 |
| INIT | 初始化状态 | 已配置基本属性(如端口号、P_Key、允许的远程访问权限等),但尚未指定对端信息,此时只能准备接收请求,不能发送数据。 |
| RTR(Ready To Receive) | 接收就绪 | 已配置目标QP号、接收PSN、地址句柄等,能够接收来自远程的报文,但仍然不能发送。 |