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 的工作流程
- 发现阶段:SM 通过 SMP(子网管理包)扫描所有交换机端口,发现连接的 HCA 和交换机。
- 分配 LID:每个端口得到一个 16 位的本地标识符。LID 只在子网内有效,类似以太网的 MAC,但更灵活。
- 路由计算:SM 根据拓扑计算所有可能的路径。默认用最短路径算法,但你可以手动指定。
- 下发配置: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 网络的核心组件和它们之间的关系。你盯着看一分钟,就能理解整个架构的脉络。
2.6 小结与避坑
这一章的内容,说白了就是 IB 网络的“骨架”。你记住几个关键点:
- SM 是核心,必须冗余部署。我见过有人只配一个 SM,交换机重启后网络起不来,教训深刻。
- HCA 不是普通网卡,别拿它当千兆以太网用。RDMA 操作要显式注册内存,否则性能一塌糊涂。
- 交换机无阻塞,但前提是信用配置合理。虚拟通道(VL)是隔离流量的利器,别省。
- 物理层选型,优先考虑 4x HDR 或 4x EDR,性价比和成熟度都高。别追单链路极限速率,除非你预算充足。
个人习惯:每次搭建新集群,我都会先画一张类似的架构图,标出 SM 主备、交换机级联方式、HCA 端口数。这张图贴在工位上,排错时一眼就能看出问题在哪。你也试试。