1. InfiniBand与RDMA概述

各位同学,咱们今天聊聊高性能网络。说实话,我做了十几年高性能计算和网络架构,见过太多项目因为网络瓶颈翻车。你想想看,CPU 算力翻了几百倍,内存带宽也涨了,可网络还是那个老样子——这就是为什么我们需要 InfiniBand 和 RDMA。

高性能计算的网络困境

先看一个场景。你有一台 64 核的服务器,算一个数据密集型任务。CPU 只用了 10% 的时间在计算,剩下 90% 都在等网络数据。这不是夸张,我在一个基因测序项目里亲眼见过。当时客户买了最贵的 GPU 服务器,结果跑起来比预期慢 5 倍。一查,网络延迟 200 微秒,带宽跑不满。

传统 TCP/IP 网络的问题在哪?我总结了几点:

  • 协议栈开销大:数据从应用到网卡,要经过内核、Socket 层、TCP 协议处理,光上下文切换就几十微秒
  • 内存拷贝多:数据从应用缓冲区拷到内核缓冲区,再拷到网卡缓冲区,来回折腾
  • CPU 参与数据搬运:每个数据包都要 CPU 中断处理,CPU 被拖死
  • 带宽利用率低:TCP 的拥塞控制、重传机制,在高带宽下效率堪忧

核心矛盾:计算能力每 2 年翻一番,网络带宽每 5 年才翻一番。这个差距,就是高性能网络存在的意义。

InfiniBand 技术起源

InfiniBand 不是突然冒出来的。2000 年左右,Intel、Microsoft、Compaq 等公司搞了个项目叫「Next Generation I/O」。后来和 Future I/O 合并,2001 年正式成立了 InfiniBand 贸易协会(IBTA)。

我记得当时有个说法:InfiniBand 要统一数据中心内部的所有互联。虽然最后没完全实现,但在高性能计算领域,它站稳了脚跟。

InfiniBand 的核心设计理念:

  • 通道架构:数据走专用通道,不经过 CPU 干预
  • 远程直接内存访问(RDMA):数据直接从一台机器的内存搬到另一台机器的内存
  • 高带宽、低延迟:从最初的 10Gbps 到现在的 400Gbps HDR
  • 可靠传输:硬件级别的重传和流控

目前 InfiniBand 已经发展到 NDR(400Gbps),下一代 XDR 也在路上了。全球 Top500 超算里,超过一半在用 InfiniBand。

RDMA 概念与优势

RDMA,全称 Remote Direct Memory Access。说白了,就是让一台机器直接读写另一台机器的内存,不需要对方 CPU 参与。

传统方式:A 机器要发数据给 B 机器,A 的 CPU 把数据从应用拷到内核,网卡发出去;B 的网卡收到后中断 CPU,CPU 再把数据从内核拷到应用。这一来一回,CPU 累死,延迟也高。

RDMA 方式:A 机器直接告诉网卡:「去把这块内存的数据发给 B 机器的那个地址」。网卡自己搞定一切,CPU 完全不用管。B 机器的网卡收到数据后,直接 DMA 写到应用内存,也不打扰 CPU。

我个人的经验:第一次调通 RDMA 程序时,看到延迟从 100 微秒降到 5 微秒,CPU 占用从 80% 降到 5%,那种感觉真的很爽。但要注意,RDMA 编程模型和传统 Socket 完全不同,需要重新理解内存注册、QP、CQ 这些概念。

RDMA 的三大优势:

  1. 零拷贝:数据不经过内核,直接从应用内存到网卡
  2. 内核旁路:应用直接操作网卡硬件,不经过操作系统
  3. CPU 卸载:数据搬运完全由网卡硬件完成

与传统 TCP/IP 网络对比

咱们直接看数据。这是我之前在实验室测的一组对比:

指标 TCP/IP (10GbE) InfiniBand EDR (100Gbps) 提升倍数
单向延迟 50-100 μs 1-3 μs 30-50x
CPU 占用 (10Gbps 满速) 60-80% <5% 12-16x
消息速率 (小包) ~1M msg/s ~50M msg/s 50x
带宽利用率 70-80% 95%+ 1.2x

为什么会差这么多?我画个图你就明白了。

传统 TCP/IP vs RDMA 数据路径对比 传统 TCP/IP 路径 应用层 (App Buffer) 上下文切换 内核 Socket 层 协议处理 TCP/IP 协议栈 内存拷贝 内核缓冲区 DMA 网卡硬件 RDMA 路径 应用层 (注册内存) 直接硬件访问 RDMA 网卡 (HCA) 零拷贝 对端应用内存 关键差异 • 无内核参与 • 无内存拷贝 • CPU 零负担

从图上能清楚看到,TCP/IP 路径要经过 5 次上下文切换和 3 次内存拷贝。RDMA 路径只有 1 次直接硬件访问。这就是性能差距的根本原因。

InfiniBand 的层次架构

InfiniBand 的协议栈分四层,我习惯这么记:

  • 物理层:定义电气特性、连接器、信号速率。比如 QSFP 接口、4x 通道绑定
  • 链路层:负责数据包在链路上的传输、流控、错误检测。关键概念是 LID(本地标识符)
  • 网络层:全局路由,用 GID(全局标识符)和 GRH(全局路由头)做跨子网通信
  • 传输层:提供可靠连接、不可靠数据报、RDMA 操作等传输服务

避坑提醒:我曾经在一个项目中,把链路层的 LID 和网络层的 GID 搞混了,导致跨子网通信一直不通。记住:LID 是本地路由用的,类似 MAC 地址;GID 是全局路由用的,类似 IP 地址。两者不能混用。

RDMA 的三种实现

目前 RDMA 主要有三种技术路线:

技术 特点 适用场景
InfiniBand 原生 RDMA,端到端专用网络 超算、AI 训练、高频交易
RoCEv2 RDMA over Converged Ethernet,跑在以太网上 数据中心、云环境
iWARP RDMA over TCP,兼容现有网络 存量 TCP 网络升级

我个人最推荐 InfiniBand,性能最好,生态最成熟。但如果你的环境只能用以太网,RoCEv2 也是个不错的选择。iWARP 嘛,说实话,性能比前两者差不少,除非不得已,我不建议用。

本章小结

咱们这一章把背景讲清楚了。高性能计算需要高性能网络,InfiniBand 和 RDMA 就是答案。核心就三点:

  • 传统 TCP/IP 的协议栈开销和内存拷贝是性能瓶颈
  • RDMA 通过零拷贝、内核旁路、CPU 卸载解决了这个问题
  • InfiniBand 是 RDMA 的最佳载体,延迟低至 1-3 微秒