Fork me on GitHub

RDMA & RoCE

RDMA (Remote Direct Memory Access)RoCE (RDMA over Converged Ethernet)


1. 背景:为什么需要 RDMA?

在传统网络通信(TCP/IP 协议栈)中:

  • 内核协议栈开销大:每次传输都要在用户态和内核态之间切换,涉及拷贝、上下文切换、协议处理。
  • CPU 占用高:应用处理数据的同时,还要承担大量网络协议栈的计算。
  • 延迟较高:微秒级别的延迟在高性能计算 (HPC)、AI 训练、金融交易等场景下可能是瓶颈。

RDMA 技术的目标:让一台机器的应用可以直接访问另一台机器的内存,绕过内核协议栈和 CPU,大幅降低延迟和 CPU 占用,提升带宽利用率。


2. RDMA 的核心机制

RDMA 的几个关键特征:

  • Zero-copy:数据直接在应用的用户空间内存与网卡缓冲区之间传输,无需多次拷贝。
  • Kernel bypass:绕过操作系统内核协议栈,应用直接与 RDMA 网卡 (RNIC) 通信。
  • 高带宽、低延迟:延迟可低至亚微秒级,带宽几乎接近硬件物理极限。
  • 低 CPU 占用:传输不再消耗大量 CPU 周期,CPU 可以专注于应用计算。

RDMA 通信模式主要有:

  • Send/Receive:类似 socket,双方应用交互。
  • Read/Write:一端直接读写远程内存,应用无感知。
  • Atomic:支持远程原子操作(适合分布式锁/一致性场景)。

3. RDMA 的实现方式

RDMA 不是单一协议,而是一类机制,不同的实现有:

  • InfiniBand:最早的 RDMA 高速互连技术,独立的网络体系,常用于 HPC 超算集群。
  • iWARP:在 TCP/IP 上实现 RDMA,兼容性好,但延迟相对较高。
  • RoCE (RDMA over Converged Ethernet):在以太网上实现 RDMA,是目前主流的数据中心方案。

4. RoCE 的详细介绍

RoCE = RDMA over Converged Ethernet
它把 RDMA 的机制搬到 Ethernet(以太网)上,使得企业/数据中心无需额外建设 InfiniBand 网络。

RoCE 的版本:

  1. RoCE v1

    • 基于二层以太网(Ethernet Layer 2)
    • 不可跨子网,局限性较大
    • 延迟非常低
  2. RoCE v2

    • 基于 UDP/IP 封装,三层可路由
    • 可跨子网,成为数据中心主流选择
    • 支持大规模集群部署

RoCE 的挑战:

  • 无损以太网需求:RDMA 协议对丢包非常敏感,RoCE 依赖 DCB(Data Center Bridging)+ PFC(Priority Flow Control) 来构建无损网络,否则性能大幅下降。
  • 调优复杂度高:需要 QoS、拥塞控制(如 ECN、DCQCN)来保障性能。

5. RDMA/RoCE 的应用场景

RDMA 和 RoCE 已成为现代高性能数据中心的核心技术,典型应用包括:

  • HPC(高性能计算):超算、科学计算
  • AI/大模型训练:GPU 集群内部的 AllReduce、参数同步(NVIDIA NCCL、Horovod 都支持 RDMA)
  • 分布式存储:Ceph、BeeGFS、DAOS、NVMe-oF,利用 RDMA 提升吞吐和降低延迟
  • 数据库与事务系统:Oracle RAC、Redis、MySQL Cluster,用 RDMA 加速事务和日志同步
  • 金融交易:低延迟撮合、行情分发

6. 总结

  • RDMA 是高性能通信的一种机制,目标是 低延迟 + 高带宽 + 低 CPU 占用
  • RoCE 是 RDMA 在以太网上的实现(尤其是 v2 版本),已经成为数据中心、AI、大数据领域的事实标准。
  • 对网络基础设施的要求较高,需要配置无损以太网(PFC/ECN/DCQCN),否则性能会大打折扣。

RDMA(Remote Direct Memory Access)本身不是单一的底层物理网络,而是一整套协议与机制的定义,用来确保“远程主机的内存可以被另一台主机的应用直接访问”,并且在访问过程中不依赖操作系统内核参与。

RDMA 协议主要定义了以下几个方面:


1. 通信语义(Communication Semantics)

RDMA 定义了三类操作语义:

  • Send/Receive(消息语义)
    类似 socket 机制,需要通信双方配对,一个发送,一个接收。
  • RDMA Read/Write(内存语义)
    一方直接读写远端内存(由远端提前注册暴露),对端应用进程无需参与。
  • Atomic Operations(原子操作语义)
    支持远程 Compare-and-Swap、Fetch-and-Add 等,用于分布式锁、同步。

2. 队列与工作请求(Queue-based Model)

RDMA 协议规定了通信双方通过 队列对 (Queue Pair, QP) 来交互:

  • Send Queue:存放发送请求(Send、RDMA Write、RDMA Read、Atomic)。
  • Receive Queue:存放接收缓冲区(用于 Send/Recv)。
  • Completion Queue (CQ):存放完成事件,通知应用操作结果。

👉 这套队列模型是 RDMA 的核心抽象,确保通信可以完全绕过内核。


3. 内存注册与保护机制

  • Memory Registration:应用需要将用户态内存 buffer 注册到 RNIC(RDMA 网卡),获得一个 Memory Region (MR)
  • Keys(lkey / rkey):RDMA 协议规定访问远程内存时必须携带 rkey,相当于远程访问的权限令牌。
  • 这保证了远程内存访问的安全性与可控性。

4. 传输层定义

RDMA 并不强制绑定某个底层网络,而是定义了在不同网络上传输的封装方式:

  • InfiniBand Transport
  • RoCE (RDMA over Converged Ethernet) → 在以太网/UDP/IP 上传输
  • iWARP → 在 TCP/IP 上传输

协议中规定了如何在这些底层传输上实现 RDMA 语义(比如报文格式、流控、拥塞控制机制)。


5. 可靠性与流控机制

RDMA 协议定义了:

  • Reliable Connection (RC):保证可靠有序传输。
  • Unreliable Connection (UC):允许不可靠,但开销低。
  • Unreliable Datagram (UD):无连接的消息传输,适合广播/多播。

这些模式让 RDMA 能够覆盖 HPC、存储、AI 等不同场景。


总结一句话
RDMA 协议定义的是一套远程内存访问的语义(消息、内存、原子操作)、队列通信模型、内存注册与保护机制,以及在不同底层网络上的传输规范


posted @ 2025-08-28 16:03  stardsd  阅读(201)  评论(0)    收藏  举报