RDMA基本元素

RDMA(Remote Direct Memory Access,远程直接内存访问)是现代高性能网络(HPC、AI训练、大规模分布式存储等)的核心技术之一。

它的核心思想是:让一台机器的网卡直接读写另一台机器的内存,完全绕过对方的CPU、内核和内存拷贝,从而实现极低的延迟、极高的吞吐和极低的CPU占用。

下面我们系统梳理 RDMA 的基本元素(也叫核心组件或基本构建块),这些几乎是所有RDMA编程(verbs API)和理解RDMA协议的基础。

RDMA 核心元素一览表

缩写全称中文常用称呼主要作用 / 含义是否必须提前创建/注册
QPQueue Pair队列对RDMA通信的最基本单元,由一个发送队列SQ + 一个接收队列RQ组成是(通信主体)
SQSend Queue发送队列存放要发出去的操作(Work Request)QP自带
RQReceive Queue接收队列存放接收方预先准备好的接收缓冲区信息QP自带(或使用SRQ)
SRQShared Receive Queue共享接收队列多个QP共享一个RQ,节省资源(常见于服务器端)可选
WQEWork Queue Element工作请求 / 工作队列元素放在SQ或RQ里的具体任务描述(发送什么、读/写哪里、长度多少、rkey等)每次操作都要post
WRWork Request工作请求用户态对WQE的封装(ibv_send_wr / ibv_recv_wr)用户编程时使用
CQCompletion Queue完成队列硬件完成任务后把结果写到这里(一个CQ可对应多个QP的SQ/RQ)
CQECompletion Queue Element完成事件 / 完成队列元素硬件写回的完成报告,包含成功/失败、字节数、opcode等信息自动产生
WCWork Completion完成描述用户态读取CQE后得到的结构体(ibv_wc)用户poll时使用
MRMemory Region内存区域 / 内存注册提前注册给网卡的内存块(虚拟地址→物理地址映射 + 访问权限),包含lkey/rkey是(几乎所有操作都需要)
lkeylocal key本地密钥本地网卡用来访问本地MR的钥匙MR自带
rkeyremote key远程密钥远程网卡访问对方MR时使用的钥匙(RDMA读/写/原子操作需要)MR自带,对方需知道
PDProtection Domain保护域一种安全隔离机制,QP、MR、SRQ等必须属于同一个PD才能相互操作
AHAddress Handle地址句柄用于无连接服务类型(UD),保存远程节点的LID/GID等路由信息UD模式下需要

通信流程中这些元素如何协作(简要)

以最经典的 RDMA Write 为例:

  1. 接收方 先注册一块内存为 MR → 得到 rkey 和虚拟地址,把这两者通过控制通道(通常是TCP socket)告诉发送方。
  2. 接收方(可选)post Receive WR 到自己的 RQ(或SRQ),准备接收可能的Send操作。
  3. 发送方 注册自己的发送缓冲区为 MR
  4. 发送方创建 QP(通常是RC可靠连接类型),通过RDMA_CM或手动交换连接信息(QPN、LID/GID、PSN等)建立连接。
  5. 发送方构造 WR(opcode=RDMA_WRITE),填写:
  • 本地地址、长度、lkey
  • 远程地址、rkey
  1. 调用 ibv_post_send → 把WR转成WQE放入 SQ
  2. 硬件(RNIC)自动执行:
  • 从本地MR读取数据
  • 通过网络发给对方(携带rkey、远程va)
  • 对方RNIC收到后直接写到对方指定的MR地址(无需对方CPU参与)
  1. 发送完成后,硬件产生 CQE 到发送方的 CQ(SQ完成)
  2. (如果是对方的Send操作)对方也会在自己的CQ收到CQE(RQ完成)

RDMA 常见的操作类型(Verbs Opcode)

  • SEND / RECV:类socket的发送接收(需要双方配合)
  • RDMA WRITE:单边写(push),最常用
  • RDMA READ:单边读(pull)
  • ATOMIC:远程原子操作(Fetch&Add / Compare&Swap)
  • RDMA WRITE WITH IMM:带立即数的写(常用于头部信息)

一句话总结 RDMA 基本元素的关系

QP 是通信主体,WQE/WR 是任务指令,CQ/CQE 是完成通知,MR + lkey/rkey 是内存访问门票,PD 是安全围栏。

所有高效RDMA程序的核心工作就是:

  • 创建和管理这些对象(QP、CQ、PD、MR)
  • 合理post WR / poll CQE
  • 安全地交换 rkey / va / QPN 等信息

下一期可以深入讲解其中任意一个元素(比如 QP 的状态机、MR 注册原理、CQ 轮询优化、RC vs UC vs UD 的区别等),或者直接进入 verbs API 编程实战。

有想重点了解的元素吗?欢迎留言~

文章已创建 4455

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部