术语表

术语表

RDMA 编程和普通的 socket 网络编程很不一样——它有一整套自己的对象、动词和缩写。 这一页把全教程会用到的 RDMA 概念与相关编程术语集中起来,按主题分组,方便随时回查。 正文里第一次出现某个术语时,可以回到这里对照。

基础概念

术语英文 / 全称含义
RDMARemote Direct Memory Access远程直接内存访问:一台机器的网卡直接读写另一台机器的内存,绕过对端 CPU 与内核。
内核旁路Kernel Bypass应用在用户态直接与网卡交互,数据路径不经过内核协议栈,省去系统调用与上下文切换。
零拷贝Zero-copy网卡用 DMA 直接搬运已注册的用户态缓冲区,无需内核↔用户的多次内存复制。
CPU 卸载CPU Offload传输、重传、校验由网卡硬件完成;单边操作时对端 CPU 完全不参与。
DMADirect Memory Access直接内存访问:硬件(网卡)不经 CPU 直接读写主存。
HCAHost Channel Adapter主机通道适配器,即 RDMA 网卡,如 mlx5_0
VerbsRDMA 的编程接口(一组"动词"操作);用户态实现是 libibverbs
rdma-coreLinux 的 RDMA 用户态库集合,含 libibverbslibrdmacm

Verbs 对象模型

术语英文 / 全称含义
Device设备一块 RDMA 网卡(HCA)。
Context设备上下文打开设备后的句柄,后续所有资源都从它派生。
PDProtection Domain(保护域)把 MR / QP 等资源归到同一组,做隔离与权限边界。
MRMemory Region(内存区域)注册(pin 住)的内存,网卡只能访问已注册内存;返回 lkey/rkey
CQCompletion Queue(完成队列)每个操作完成后,网卡往这里放一个完成事件(WC)。
QPQueue Pair(队列对)发送队列(SQ)+接收队列(RQ),RDMA 的"连接"端点,类比 socket。
SQ / RQSend / Receive QueueQP 内的发送队列与接收队列。
AHAddress Handle(地址句柄)UD 传输里描述对端地址的对象。
CompChannelCompletion Channel(完成通道)让你能"等待"CQ 上的事件而非忙等轮询。
注册 / pinRegister / Pin把内存固定在物理页并告知网卡,使其可被 DMA 访问。

钥匙与地址

术语英文 / 全称含义
lkeyLocal Key本地工作请求引用自己缓冲区时用的 MR 钥匙。
rkeyRemote Key授权远端对本地 MR 做 RDMA Read/Write,需带外发给对方。
GIDGlobal Identifier16 字节全局地址,RoCE 下用它寻址(内含 IP 信息)。
GID IndexGID 表索引网卡 GID 表的行号,区分 RoCE v1/v2 与 IPv4/v6;RoCE v2 常在索引 3。
LIDLocal IdentifierInfiniBand 子网内的本地标识,IB 寻址用(RoCE 下为 0)。
QPNQueue Pair Number队列对编号,建连时需交换对端 QPN。
PSNPacket Sequence Number包序列号,迁移 QP 到 RTR/RTS 时设置起始值。
QKeyQueue KeyUD 传输的密钥,两端必须一致数据报才被接受。
GRHGlobal Routing HeaderUD 每个收到的数据报前的 40 字节全局路由头,需跳过才是负载。

传输与操作

术语英文 / 全称含义
RCReliable Connected可靠连接,面向连接、有序可靠,类比 TCP;支持 Send/Recv 与单边 Write/Read。
UDUnreliable Datagram不可靠数据报,无连接、单条不超 MTU,类比 UDP;仅 Send/Recv。
UCUnreliable Connected不可靠连接(gordma 非主要目标)。
双边操作Two-sided(Send/Recv)接收方需预投递 Recv WR,双方 CPU 都参与,语义最像 socket。
单边操作One-sided(RDMA Write/Read)发起方凭 rkey+远端地址直接读写对端内存,对端 CPU 不感知,时延最低。
MTUMaximum Transmission Unit路径最大传输单元(256/512/1024/2048/4096 字节)。
RoCERDMA over Converged Ethernet在以太网上跑 RDMA;RoCE v2(基于 UDP/IP,可路由)最常用。
InfiniBand (IB)RDMA 最早的专用网络,用 LID 寻址。

QP 状态机

术语英文 / 全称含义
RESETQP 初始状态。
INITInitialized设好端口与访问权限,但还不能收发。
RTRReady To Receive填入对端 QPN/PSN/GID 等,可以开始接收。
RTSReady To Send填入本地起始 PSN,可以开始发送。
状态迁移Modify QPRESET→INIT→RTR→RTS,靠 ibv_modify_qp 逐步设置。
带外握手Out-of-band Handshake用普通 TCP 或 librdmacm 交换 QPN/PSN/GID/rkey,因为这些没法用 RDMA 本身交换。
rdma_cmRDMA Connection Managerlibrdmacm 提供的类 socket 建连流程,完成后 QP 直接在 RTS。
RNRReceiver Not Ready发来时对端没有可用 Recv WR,触发重试机制。

工作请求与完成

术语英文 / 全称含义
WRWork Request(工作请求)投递到 QP 的一次收发请求,由网卡异步执行。
SR / RRSend / Receive Request发送工作请求 / 接收工作请求(SendWR/RecvWR)。
postPost(投递)把 WR 提交到发送/接收队列(ibv_post_send/ibv_post_recv)。
SGEScatter/Gather Element指向已注册 MR 一段内存的描述(地址+长度+lkey);一个 WR 可带多个。
WCWork Completion(完成项)轮询 CQ 得到的一条完成记录,含 WRID、状态、字节数等。
WRIDWork Request IDpost 时填的用户标识,在对应的 WC 里原样返回,用来对号。
pollPoll(轮询)从 CQ 取出完成项(ibv_poll_cq)。
signaled / unsignaledWR 是否产生完成事件;选择性 signal 可减少 CQE 数量、提升消息率。
inlineInline Send小消息把负载内联进 WR,省一次内存读取的优化。
opcodeWR 的操作类型:SEND / RDMA_WRITE / RDMA_READ 等。

性能与流控

术语英文 / 全称含义
in-flight在途 / 未完成已 post 但还没收到完成的 WR 数;流水线深度即同时 in-flight 的数量。
tx-depth / queue depth发送深度 / 队列深度允许同时 in-flight 的 WR 上限(QP 的 max_send_wr/max_recv_wr)。
流水线Pipelining同时让多个 WR in-flight 以隐藏单次往返延迟、打满带宽。
忙轮询 / 事件驱动Busy-poll / Event-driven排空 CQ 的两种方式:自旋轮询(低延迟、吃 CPU)vs 等完成通道事件(省 CPU、略有延迟)。
信用流控Credit-based Flow Control发送方按对端已投递的 Recv 数量(信用)限发,避免 RNR。
背压Backpressure接收方处理不过来时反向限制发送速率。
bounce buffer反弹缓冲区库托管的中转缓冲:先把用户数据拷进它再发;零拷贝就是省掉这次拷贝。
批量提交Batched Post用 WR 链表一次 ibv_post_send 提交多个 WR,摊薄每次调用开销。
分片 / 重组Fragmentation / Reassembly大消息拆成多帧发送、接收端重组回完整消息。
带宽 / 时延Bandwidth (bw) / Latency (lat)吞吐(Gb/s)与往返延迟,对应 *_bw/*_lat 工具。
MppsMillion packets/messages per second每秒百万消息数,衡量消息率(小包瓶颈常在此而非带宽)。

gordma / 编程相关

术语说明
cgoGo 调用 C 的机制;gordma 用它封装 libibverbs/librdmacm。每次跨界有固定开销。
build tag / 构建标签Go 的条件编译标记;gordma 用 linux && cgo 选真实实现、否则选 stub。
stub桩实现:非 Linux/无 cgo 时编译,入口返回 ErrNotSupported 而非崩溃。
perftestC 版 RDMA 性能基准工具集;gordma 的 cmd/ 工具对标它。
gordma底层:一比一映射 verbs 对象模型,完全控制。
rdmanet高层:net 风格的 Conn/Listener/PacketConn,隐藏注册/投递/轮询/流控。
ConnRC 可靠连接端点(消息语义 + 字节流适配器)。
PacketConnUD 数据报端点(WriteTo/ReadFrom)。
RawConn低层高吞吐端点:无封帧/流控/handoff,量级追平 perftest。
AddrUD 端点地址,格式 gid%qpn[#qkey]
RegistryUD 的"名字→Addr"目录,带外发现对端。
下一步 词汇备齐了,从 第一部分:什么是 RDMA 开始正式学习。读到不认识的缩写随时回来查。
gordma 教程