1. RDMA技术概述

大家好,我是你们的老朋友。今天咱们聊聊RDMA——这个在存储网络里绕不开的技术。

RDMA,全称是Remote Direct Memory Access。说白了,就是让一台机器的网卡,能直接读写另一台机器的内存。不需要经过CPU,也不需要经过操作系统内核。嗯,这听起来有点神奇,对吧?

1.1 传统网络的问题在哪?

我们先看看传统网络是怎么工作的。你想想看,当一台服务器要发送数据给另一台时,数据得先从应用程序拷贝到内核缓冲区,然后网卡再把它发出去。接收端呢?网卡收到数据后,先放到内核缓冲区,再拷贝到应用程序的内存里。

这个过程,我称之为「数据的三次搬运」。每次搬运都要CPU参与,都要上下文切换。我在项目中遇到过,一个高性能的存储集群,CPU有30%的时间都花在了数据拷贝上,而不是真正的业务逻辑。这太浪费了。

传统网络的数据路径:

  • 应用程序 → 内核缓冲区(CPU拷贝)
  • 内核缓冲区 → 网卡(DMA传输)
  • 网卡 → 内核缓冲区(DMA传输)
  • 内核缓冲区 → 应用程序(CPU拷贝)

总共需要2次CPU拷贝 + 2次上下文切换

1.2 RDMA是怎么解决的?

RDMA的思路很直接——让网卡直接访问应用程序的内存。数据从应用内存到应用内存,中间不经过内核。网卡自己就能完成数据的读写操作。

为什么会这样?因为RDMA网卡内部有一个专用的硬件引擎,它知道目标机器的内存地址,能直接发起DMA操作。CPU只需要告诉网卡「把这块数据发到那边」,然后就可以去干别的事了。

我个人习惯把RDMA比作「快递直达」。传统网络是快递到了中转站,你再自己去取。RDMA是快递员直接送到你家里,还帮你拆箱放好。

RDMA的核心优势:

  • 零拷贝:数据直接从应用内存到应用内存
  • 内核旁路:不经过操作系统内核
  • CPU卸载:网卡硬件处理数据传输
  • 低延迟:微秒级甚至亚微秒级

1.3 RDMA的三种实现方式

RDMA不是一种具体的产品,而是一种技术理念。目前主流的实现有三种:InfiniBand、RoCE和iWARP。我这些年三种都折腾过,各有各的脾气。

1.3.1 InfiniBand

InfiniBand是RDMA的「原配」。它从设计之初就是为高性能计算和存储网络准备的。硬件、协议、链路层全部是专用的。

我记得2018年在一个超算项目中,我们用的是InfiniBand EDR(100Gbps)。那性能是真的猛,延迟只有1微秒左右。但代价也很明显——贵。交换机、网卡、线缆,全套都得用Mellanox(现在被NVIDIA收购了)的。你没法用普通的以太网交换机。

InfiniBand特点:

  • 原生支持RDMA,没有兼容性问题
  • 端到端流控,无损网络
  • 延迟最低,通常在1-3微秒
  • 成本高,生态封闭

1.3.2 RoCE

RoCE(RDMA over Converged Ethernet)是把RDMA跑在以太网上。这就有意思了——你可以在现有的以太网基础设施上使用RDMA。

RoCE有两个版本。RoCEv1工作在二层,需要特殊的无损以太网配置。RoCEv2工作在UDP/IP之上,可以路由,更灵活。

我曾经在一个数据中心里部署RoCEv2,遇到了一个坑——PFC(优先级流控)的配置。如果PFC配置不当,很容易出现死锁或者拥塞扩散。嗯,这里要注意,RoCE对网络质量要求很高,丢包会导致性能断崖式下跌。

RoCE的避坑指南:

  • 必须启用PFC(优先级流控)
  • 建议使用DCQCN(数据中心量化拥塞通知)
  • 交换机需要支持无损以太网
  • 我曾经因为一个交换机的PFC缓冲区配置太小,导致整个集群的RDMA性能从40Gbps掉到5Gbps

1.3.3 iWARP

iWARP(Internet Wide Area RDMA Protocol)是第三种实现。它把RDMA封装在TCP协议里。好处是兼容性好,标准的以太网交换机就能用,不需要特殊的流控配置。

但代价呢?性能不如InfiniBand和RoCE。因为TCP协议栈本身就有开销,而且TCP的拥塞控制机制会引入额外的延迟。

我个人觉得,iWARP更适合广域网场景,或者那些不想折腾网络配置的环境。但在数据中心内部,RoCE和InfiniBand是更主流的选择。

特性 InfiniBand RoCE iWARP
传输层 专用 UDP/IP TCP/IP
延迟 最低(1-3μs) 低(3-5μs) 中等(5-10μs)
网络要求 专用硬件 无损以太网 标准以太网
成本 中等
生态 封闭 开放 开放

1.4 怎么选?

如果你问我个人建议,我会这么说:

  • 追求极致性能,预算充足 → InfiniBand
  • 数据中心内部,已有以太网基础设施 → RoCEv2
  • 跨数据中心,或者不想折腾网络 → iWARP

但说实话,现在RoCEv2是主流趋势。因为它的性价比最高,而且生态越来越成熟。NVMe over Fabrics的很多最佳实践,都是基于RoCEv2的。

我的经验: 如果你刚开始接触RDMA,建议从RoCEv2入手。先在一台交换机下的小规模环境里验证,再逐步扩展。别一上来就搞大规模集群,RDMA的调试比传统网络要复杂得多。

好了,这一章我们聊了RDMA的基本概念、与传统网络的区别,以及三种实现方式。下一章我们会深入NVMe over Fabrics的架构,看看RDMI是怎么和NVMe结合在一起的。