RDMA核心组件 的总结表格
以下是关于 RDMA核心组件 的总结表格,涵盖 WQE、WQ、QP、CQ 等核心概念:
概念 | 组成与作用 | 关键操作 | 关联组件 | 关键特性 |
---|---|---|---|---|
WQE | 工作队列元素,包含: - 任务类型(SEND/WRITE/READ等) - 数据地址、长度、访问密钥 | 软件生成,硬件执行 | WQ(工作队列) | 类似以太网描述符(Desc),是硬件执行任务的最小单位 |
WQ | 工作队列,包含多个WQE,以FIFO队列形式存在: - SQ(发送队列) - RQ(接收队列) | Post Send (下发发送任务)Post Receive (下发接收任务) | QP(队列对) | SQ和RQ独立运行,发送端仅操作SQ,接收端仅操作RQ |
QP | 队列对(Queue Pair),由以下组成: - SQ(发送队列) - RQ(接收队列) | 通过ibv_create_qp 创建 | CQ(完成队列) | - 通信基本单位(非节点) - 每个QP有唯一QPN(QP编号) - 需与远端QP建立连接(RC/UC类型) |
CQ | 完成队列,包含多个CQE(完成队列元素): - 任务状态(成功/失败) - 关联的WQE信息 | ibv_poll_cq (轮询完成事件) | WQ(通过CQE关联WQE) | - 异步通知机制 - 一个CQ可绑定多个QP - CQE与WQE一一对应(任务完成后生成) |
QPN | QP的唯一标识符(32位整数) | 通过QP属性(qp_attr )获取 | QP(本地与远端) | 用于标识通信双方QP(如SEND操作需指定目标QPN) |
SQ/RQ | - SQ:存放发送任务的WQE - RQ:存放接收任务的WQE | SQ:Post Send RQ: Post Receive | QP(作为其组成部分) | - 发送端无需等待接收端Post Receive(但RECV操作需要) - RQ的WQE需预先分配(否则数据到达后无法处理) |
CQE | 完成队列元素,包含: - 操作结果(成功/错误码) - 关联的WQE指针 | 硬件生成,软件轮询处理 | CQ(完成队列) | - CQE可能乱序到达(需业务层处理) - 需主动轮询或通过事件通道(Event Channel)异步通知 |
补充说明
-
QP类型与通信模式:
- RC(可靠连接):确保数据按序到达,需显式建立连接(通过QPN)。
- UC(不可靠连接):数据可能丢失,但保留包顺序。
- UD(不可靠无连接):支持组播,无连接状态。
-
内存与安全:
- WQE中的内存地址需通过
ibv_reg_mr
注册(确保物理连续或IOMMU映射)。 - 访问密钥(Access Key)用于权限验证(防止越界访问)。
- WQE中的内存地址需通过
-
性能优化:
- 批量Post WQE(减少用户态-内核态切换)。
- 使用CQ事件合并(通过
ibv_req_notify_cq
)。
流程图示意
软件流程:
1. 注册内存(MR) → 2. 创建QP/CQ → 3. Post Receive(RQ) → 4. Post Send(SQ) → 5. 轮询CQE
硬件流程:
1. 从SQ读取WQE → 2. 执行RDMA操作 → 3. 生成CQE → 4. 将CQE写入CQ
此表格可用于PPT中对比核心组件关系,建议配合分层架构图(展示QP/CQ/WQ的层级)和数据流图(WQE下发→硬件执行→CQE返回)增强可视化效果。