2. 技术架构对比:RoCE v1/v2 与 InfiniBand 的协议栈层次、网络拓扑结构差异

好,咱们进入正题。这一章我打算聊聊 RoCE 和 InfiniBand 在“骨子里”到底有什么不同。说白了,就是看看它们的数据是怎么打包、怎么传、又是怎么组网的。

我个人习惯,看一个网络技术好不好用,先扒它的协议栈。协议栈决定了性能天花板,也决定了你能踩多少坑。

2.1 协议栈层次:谁更“轻”,谁更“重”?

先看 InfiniBand。它是个“原生”的高性能网络,从物理层到传输层,全是自己定义的。没有 TCP/IP 那套东西。

InfiniBand 的协议栈分四层:

  • 物理层:定义线缆、连接器、信号速率。比如 HDR 是 200Gbps,NDR 是 400Gbps。
  • 链路层:负责流控、错误检测、数据包路由。这里有个关键设计——基于信用的流控。接收端告诉发送端“我还有多少缓冲区”,发送端才发数据。不会丢包。
  • 网络层:全局路由。每个 IB 设备有个唯一的 LID(本地标识符)和 GID(全局标识符)。
  • 传输层:提供 RDMA 操作(Read/Write/Send),还有可靠连接(RC)、不可靠数据报(UD)等传输服务。

嗯,这里要注意。InfiniBand 的传输层是硬件实现的。CPU 根本不参与数据搬运。这也是它延迟能低到 1 微秒以内的原因。

再看 RoCE。RoCE 分两个版本,差别还挺大。

RoCE v1

  • 它把 InfiniBand 的传输层和网络层,直接封装在以太网帧里。
  • 协议栈是:IB 传输层 → IB 网络层 → 以太网链路层 → 物理层。
  • 问题来了:它没有 IP 头。所以只能在同一个二层网络里跑。不能跨 VLAN,不能路由。
  • 我在项目中遇到过,有人把 RoCE v1 部署在了一个大二层网络里,结果广播风暴一来,整个集群性能直接崩了。嗯,从那以后我再也不敢用 v1 了。

RoCE v2

  • 这才是主流。它把 IB 网络层换成了 UDP + IP。
  • 协议栈是:IB 传输层 → UDP 头 → IP 头 → 以太网链路层 → 物理层。
  • 有了 IP 头,就能路由了。有了 UDP 头,就能用 ECMP(等价多路径)做负载均衡了。
  • 但代价是什么?UDP 是不可靠的。所以 RoCE v2 必须依赖 PFC(优先级流控)来保证不丢包。这玩意儿,说实话,配置起来挺头疼的。

我画了一张图,帮你直观理解这三者的协议栈差异:

传输层 (RC/UD) 网络层 (GRH) 链路层 (L2) 物理层 InfiniBand 传输层 (RC/UD) 网络层 (GRH) 以太网 MAC 以太网 PHY RoCE v1 传输层 (RC/UD) UDP 头 IP 头 以太网 MAC/PHY RoCE v2

核心差异总结:InfiniBand 是全栈自研,RoCE v2 是“借壳”以太网。IB 的硬件卸载更彻底,RoCE 的兼容性更好。你想想看,这其实就是个取舍问题。

2.2 网络拓扑结构:胖树 vs. 任意拓扑

聊完协议栈,咱们看看它们怎么组网。

InfiniBand 的拓扑

InfiniBand 最经典的拓扑是 胖树(Fat-Tree)。为什么叫胖树?因为越往根部的链路,带宽越“胖”。

  • 叶子层:计算节点连接 ToR(Top of Rack)交换机。
  • 聚合层:ToR 交换机上行到聚合交换机。
  • 核心层:聚合交换机上行到核心交换机。

胖树的好处是:无阻塞。只要带宽比例算对了,任何两个节点之间的通信,都不会因为网络瓶颈而变慢。

我记得有一次,帮客户设计一个 512 节点的集群。他们想省钱,把上行带宽砍了一半。结果跑 MPI 测试时,通信效率直接掉了 40%。嗯,胖树这东西,省不得。

RoCE 的拓扑

RoCE 跑在标准以太网上。所以你能用任何以太网拓扑:

  • Spine-Leaf(脊叶架构):这是数据中心的主流。Leaf 交换机连接服务器,Spine 交换机提供高带宽互联。
  • CLOS 网络:多级交换,可扩展性好。
  • 甚至环形、星形:小规模部署时也能用。

但这里有个大坑:PFC 的死锁问题

RoCE v2 依赖 PFC 来防止丢包。PFC 的工作原理是:当接收端缓冲区满了,就发一个暂停帧,让发送端停一停。但如果拓扑中有环路,PFC 暂停帧可能会形成死锁——A 等 B,B 等 C,C 等 A,谁也动不了。

避坑指南:我曾经在一个三层 Spine-Leaf 网络上部署 RoCE v2,结果 PFC 死锁导致整个集群吞吐量降到原来的 10%。排查了三天,最后发现是某个 Leaf 交换机的 PFC 阈值配置错了。所以,RoCE 的拓扑设计,一定要避免环路,并且要仔细调优 PFC 参数。

我再用一张表,把关键差异列出来:

对比维度 InfiniBand RoCE v2
协议栈深度 4 层(物理/链路/网络/传输) 4 层(物理/MAC/IP/UDP+IB传输)
传输层实现 纯硬件卸载 硬件卸载 + 软件辅助
流控机制 基于信用的链路层流控(无丢包) PFC(优先级流控,配置复杂)
典型拓扑 胖树(Fat-Tree) Spine-Leaf / CLOS / 任意
路由能力 原生支持(LID/GID 路由) 依赖 IP 路由(ECMP)
部署复杂度 中等(专用硬件) 高(PFC 调优 + 拥塞管理)

我的个人建议:如果你从零开始建一个高性能计算集群,预算充足,选 InfiniBand。省心,性能稳。如果你已经有以太网基础设施,想跑 RDMA 应用,选 RoCE v2。但一定要做好 PFC 的规划和测试。

好了,这一章就聊到这儿。协议栈和拓扑是选型的基础。你想想看,一个网络连数据怎么传、怎么组网都没搞清楚,后面调优就是瞎忙活。