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 的三大优势:
- 零拷贝:数据不经过内核,直接从应用内存到网卡
- 内核旁路:应用直接操作网卡硬件,不经过操作系统
- 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 路径要经过 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 微秒