1、RoCE概述:RDMA技术背景、RoCE v1/v2协议栈对比、RoCE与InfiniBand/iWARP的差异、RoCE的典型应用场景
1.1 为什么需要RDMA?先聊聊传统网络的痛点
做网络时间久了,你会发现一个有意思的现象:CPU的速度翻了几百倍,内存带宽也涨了几十倍,但网络延迟的进步却慢得像蜗牛爬。我刚开始做数据中心网络时,最头疼的就是CPU被网络协议栈"吃掉"太多算力。
传统TCP/IP网络,数据从网卡到应用程序,要经过内核协议栈、内存拷贝、上下文切换……这一套流程下来,延迟轻松上百微秒。你想想看,对于高频交易、分布式存储这些场景,这简直是灾难。
RDMA(Remote Direct Memory Access)的出现,说白了就是让网卡"绕开"CPU,直接在内存之间搬数据。数据从一台机器的内存,通过网卡,直接写到另一台机器的内存里。中间不需要CPU参与,也不需要内核协议栈的折腾。
核心思想:RDMA的本质是"零拷贝" + "内核旁路"。数据从应用虚拟内存直接到网卡,再从网卡直接到对端应用虚拟内存,全程不走内核。
1.2 RoCE v1 vs v2:协议栈的进化之路
RoCE(RDMA over Converged Ethernet)是RDMA技术在以太网上的实现。我个人习惯把它分成两个阶段:v1是"试水版",v2是"成熟版"。
RoCE v1:只能在同一个广播域里玩
RoCE v1的协议栈很简单:
+------------------+
| IB Transport | (InfiniBand传输层)
+------------------+
| IB Network | (InfiniBand网络层)
+------------------+
| Ethernet MAC | (以太网MAC层)
+------------------+
| Ethernet PHY | (以太网物理层)
+------------------+
嗯,这里要注意:RoCE v1直接把InfiniBand的网络层封装在以太网帧里。这意味着它没有IP路由能力,只能在同一个二层网络里通信。我在项目中遇到过,有同事想跨交换机部署RoCE v1,结果发现根本不通——因为交换机不认识IB的GRH(Global Routing Header)。
避坑指南:RoCE v1的L2以太网帧中,EtherType使用的是0x8915(IB over Ethernet)。如果你抓包看到这个值,说明是v1流量。我曾经因为没注意这个细节,排查了半天连通性问题。
RoCE v2:拥抱UDP,走向三层网络
RoCE v2的改进,说白了就是把IB网络层换成了UDP/IP:
+------------------+
| IB Transport | (InfiniBand传输层)
+------------------+
| UDP | (UDP传输层)
+------------------+
| IP | (IP网络层)
+------------------+
| Ethernet MAC | (以太网MAC层)
+------------------+
| Ethernet PHY | (以太网物理层)
+------------------+
为什么用UDP?我刚开始也觉得奇怪,RDMA不是要可靠传输吗?UDP不是不可靠的吗?
其实RoCE v2的可靠性不在UDP层,而是在IB传输层。UDP在这里只是充当一个"封装容器",让报文能被标准IP网络路由。UDP的目的端口是4791,这个端口号我建议你记住——排查问题时经常要用到。
| 特性 | RoCE v1 | RoCE v2 |
|---|---|---|
| 网络层 | IB GRH(无路由) | UDP/IP(支持路由) |
| EtherType | 0x8915 | 0x0800(标准IP) |
| UDP端口 | 无 | 4791 |
| 路由能力 | 仅二层广播域 | 三层路由 |
| 部署复杂度 | 低(但受限) | 高(需PFC/ECN配合) |
1.3 RoCE vs InfiniBand vs iWARP:三足鼎立
做RDMA选型时,你一定会遇到这三个技术。我个人的经验是:没有绝对的好坏,只有适不适合你的场景。
InfiniBand:老大哥,但贵
InfiniBand是RDMA的"原配"。它从物理层到应用层都是专门为RDMA设计的,性能最好,延迟最低。但问题也很明显:贵,而且需要专用交换机和网卡。
我记得2018年帮客户做HPC集群选型,InfiniBand的方案报价比RoCE高了将近一倍。客户最后选了RoCE,性能虽然差一点,但省下来的钱够买好几台服务器了。
iWARP:TCP的"改良版"
iWARP(Internet Wide Area RDMA Protocol)走的是TCP路线。它的优势是可以用现有的TCP/IP网络,不需要额外的流控机制。但代价是性能不如RoCE和InfiniBand——因为TCP的拥塞控制机制太重了。
我建议你只在以下场景考虑iWARP:
- 网络设备不支持PFC(优先级流控)
- 需要跨WAN部署RDMA
- 对延迟要求不那么苛刻
RoCE:性价比之选
RoCE是目前最流行的RDMA方案。它跑在标准以太网上,成本低,生态好。但有个前提:你的网络必须支持PFC和ECN。否则RoCE在丢包场景下性能会急剧下降——这个我后面会详细讲。
我的建议:新建数据中心,如果预算允许,优先考虑RoCE v2。它兼顾了性能和成本,而且生态最成熟。InfiniBand留给对延迟有极致要求的HPC场景。
1.4 RoCE的典型应用场景
说了这么多理论,来看看RoCE实际用在哪些地方。我参与过的项目里,最常见的是这三类:
1. 分布式存储
这是RoCE最大的应用场景。Ceph、GPFS、Lustre这些分布式文件系统,都用RoCE来加速数据复制和恢复。我做过一个Ceph集群,用RoCE替代TCP后,OSD之间的数据同步延迟从200μs降到了20μs。
2. 高性能计算(HPC)
MPI通信是HPC的命脉。RoCE v2配合MPI库(如OpenMPI、MVAPICH),可以实现接近InfiniBand的性能。我在某超算中心看到,他们用RoCE跑Linpack测试,效率达到了InfiniBand的95%以上。
3. 人工智能训练
大模型训练需要频繁的AllReduce操作。NVIDIA的NCCL库原生支持RoCE。我记得有一次帮客户调优BERT训练,把网络从TCP换成RoCE后,训练时间缩短了40%。
一句话总结:RoCE v2是目前数据中心里最"接地气"的RDMA方案。它用标准以太网的硬件,跑出了接近专用网络的性能。但前提是——你得把网络调好了,尤其是PFC和ECN的配置。