2. InfiniBand网络架构

InfiniBand 不是普通的以太网。它从一开始就是为高性能计算设计的。我最早接触 IB 时,第一反应是——这玩意儿怎么这么复杂?后来踩了几个坑才明白,它的架构设计其实非常优雅,只是和我们熟悉的 TCP/IP 思路完全不同。

这一章,我们拆开来看。从最上层的子网管理器,一路看到最底层的物理链路。你理解了这些,后面配置集群时就不会发懵。

2.1 子网管理器(SM)—— 网络的“大脑”

InfiniBand 网络里,所有设备都不是自己决定怎么连的。谁来做这个决定?子网管理器(Subnet Manager, SM)。

说白了,SM 就是整个 IB 子网的控制中心。它负责发现拓扑、分配 LID(Local Identifier)、计算路由表、处理故障切换。没有 SM,IB 交换机就是一堆废铁,端口灯都不亮。

核心要点:IB 网络是集中式管理的。这和以太网的分布式生成树协议完全不同。SM 挂了,整个子网就瘫痪。所以生产环境一定要配冗余 SM。

我习惯在每个集群里至少部署两个 SM:一个主 SM(Master),一个备用 SM(Standby)。主 SM 正常工作时,备用 SM 只监听心跳。一旦主 SM 宕机,备用 SM 秒级接管。嗯,这里要注意——SM 的切换不是无缝的,会有短暂的路径重算,但比整个网络挂掉强太多。

SM 的工作流程

  1. 发现阶段:SM 通过 SMP(子网管理包)扫描所有交换机端口,发现连接的 HCA 和交换机。
  2. 分配 LID:每个端口得到一个 16 位的本地标识符。LID 只在子网内有效,类似以太网的 MAC,但更灵活。
  3. 路由计算:SM 根据拓扑计算所有可能的路径。默认用最短路径算法,但你可以手动指定。
  4. 下发配置:SM 把路由表写入每个交换机的转发引擎。之后数据包就按这些表转发。

我曾经遇到过一个坑:某次扩容后,新加的 HCA 死活连不上。查了半天,发现 SM 的扫描周期设成了 60 秒,而我刚插上设备就急着测试。等了一分钟,自动发现了。所以,如果你改了拓扑,要么手动触发 SM 重扫,要么耐心等。

2.2 HCA 网卡—— 主机的“翻译官”

HCA(Host Channel Adapter)就是 IB 网络里的网卡。但它比普通网卡聪明得多。

普通网卡只负责收发数据包,CPU 还得处理协议栈。HCA 不一样,它自己就能完成传输层的大部分工作。RDMA 操作、内存注册、完成通知——这些全在 HCA 内部搞定。CPU 只需要告诉 HCA:“把这块内存里的数据发给那个节点”,然后就可以去干别的了。

个人经验:选 HCA 时,别只看带宽。我建议重点关注端口数和PCIe 通道数。单端口 200Gbps 的 HCA,如果插在 PCIe 3.0 x8 上,实际跑不满。带宽瓶颈往往不在 IB 链路,而在主机总线。

HCA 的关键特性

特性 说明 我的建议
RDMA 引擎 硬件实现远程内存直接读写 必须开启,否则白买
内存注册 HCA 锁定物理内存区域用于 DMA 注意注册大小限制,别超
QP(队列对) 通信的基本单元,类似 socket 每个连接至少一对 QP
CQ(完成队列) 通知应用操作完成 轮询比中断快,延迟更低

2.3 IB 交换机—— 无阻塞的“十字路口”

IB 交换机和以太网交换机最大的区别是什么?无阻塞转发。

你想想看,以太网交换机经常出现端口争用,导致丢包。IB 交换机在设计上就保证了:只要输出端口空闲,输入端口就能以线速转发。这得益于 IB 的基于信用的流控机制。

每个 IB 交换机端口都有一定数量的信用(Credit)。发送方必须先确认接收方有足够的信用,才能发送数据。信用不够?那就等着。这种方式从根本上避免了缓冲区溢出和丢包。

避坑指南:我曾经在测试中发现,某些廉价 IB 交换机在满负载下会出现“信用饥饿”——某个端口的信用被大流量耗尽,其他端口饿死。解决方案是配置虚拟通道(VL),把不同流量隔离到不同的信用池里。别指望默认配置能扛住所有场景。

交换机转发流程

  • 数据包进入端口,交换机提取 LID 和 SL(服务等级)。
  • 查本地转发表,找到输出端口和 VL。
  • 检查输出端口的信用是否足够。不够就排队。
  • 信用够了,直接转发,零丢包。

2.4 链路层与物理层—— 信号在线上怎么跑

链路层和物理层,是 IB 网络最底层的两兄弟。它们负责把数据变成电信号或光信号,在线缆上传输。

物理层

IB 物理层定义了连接器类型、信号速率、编码方式。常见的物理层规格:

速率代 单链路速率 编码 典型线缆
SDR 2.5 Gbps 8B/10B 铜缆
DDR 5 Gbps 8B/10B 铜缆/光缆
QDR 10 Gbps 8B/10B 铜缆/光缆
FDR 14.0625 Gbps 64B/66B 光缆为主
EDR 25 Gbps 64B/66B 光缆
HDR 50 Gbps 64B/66B 光缆

注意,IB 支持链路聚合——把多条物理链路绑在一起,形成一条逻辑链路。比如 4x HDR 就是 4 条 50Gbps 链路聚合,总带宽 200Gbps。我习惯用 4x 配置,性价比最高。

链路层

链路层负责数据包的封装、错误检测、流控。IB 的数据包格式很简单:

+----------------+----------------+------------------+----------------+
|  LRH (Local    |  GRH (Global   |  BTH (Base       |  Payload       |
|  Route Header) |  Route Header) |  Transport Hdr)  |  (0-4096 字节) |
+----------------+----------------+------------------+----------------+
|  ICRC          |  VCRC          |                   |                |
|  (不变 CRC)    |  (可变 CRC)    |                   |                |
+----------------+----------------+------------------+----------------+

LRH 包含源和目标 LID,用于子网内转发。GRH 包含全局 IP 地址,用于跨子网路由。BTH 包含 QP 号、操作码等传输层信息。每个包末尾有两个 CRC——ICRC 保护不变字段,VCRC 保护可变字段。这设计很严谨,我在生产环境中几乎没见过 CRC 错误。

2.5 整体架构图

下面这张图展示了 IB 网络的核心组件和它们之间的关系。你盯着看一分钟,就能理解整个架构的脉络。

InfiniBand 网络架构概览 InfiniBand 网络架构核心组件 子网管理器 (SM) SMP 管理 IB 交换机(无阻塞转发) HCA 节点 1 HCA 节点 2 HCA 节点 3 链路层(LRH + 流控 + CRC) 物理层(铜缆/光缆 + 编码) SM 管理整个子网,交换机无阻塞转发,HCA 卸载 CPU 负担,链路层和物理层保证可靠传输

2.6 小结与避坑

这一章的内容,说白了就是 IB 网络的“骨架”。你记住几个关键点:

  • SM 是核心,必须冗余部署。我见过有人只配一个 SM,交换机重启后网络起不来,教训深刻。
  • HCA 不是普通网卡,别拿它当千兆以太网用。RDMA 操作要显式注册内存,否则性能一塌糊涂。
  • 交换机无阻塞,但前提是信用配置合理。虚拟通道(VL)是隔离流量的利器,别省。
  • 物理层选型,优先考虑 4x HDR 或 4x EDR,性价比和成熟度都高。别追单链路极限速率,除非你预算充足。

个人习惯:每次搭建新集群,我都会先画一张类似的架构图,标出 SM 主备、交换机级联方式、HCA 端口数。这张图贴在工位上,排错时一眼就能看出问题在哪。你也试试。