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结合在一起的。