2. InfiniBand基础:IB网络分层模型、物理层与链路层、网络层与传输层、IB子网管理器

各位同学,今天我们来啃一块硬骨头——InfiniBand的基础架构。说实话,我刚接触IB的时候,也被它那套分层模型搞得有点晕。但后来我在一个高性能计算项目中,亲眼看着IB把千兆以太网按在地上摩擦,才真正理解了这套设计的精妙之处。

IB网络,说白了就是为高性能计算和存储网络量身定做的。它跟以太网最大的区别是什么?我总结一句话:以太网是尽力而为,IB是使命必达。下面我们一层层拆开来看。

2.1 IB网络分层模型

IB的分层模型,跟OSI七层模型有点像,但更精简。它主要分为四层:

  • 物理层:负责比特流的传输,定义电气特性、连接器、线缆等
  • 链路层:负责数据帧的封装、流控、错误检测
  • 网络层:负责路由转发,也就是包从哪到哪
  • 传输层:负责端到端的可靠传输、消息分段与重组

嗯,这里要注意,IB的传输层和网络层其实是在同一个硬件模块里实现的,不像TCP/IP那样分得那么清楚。我个人习惯把这两层合起来叫「传输网络层」,因为在实际芯片设计里,它们是一体的。

核心要点: IB的分层设计,核心目标就是低延迟、高带宽、低CPU开销。每一层都在为这个目标服务。

下面这张图,是我自己画的IB分层模型与OSI模型的对比,你一看就明白:

OSI 七层模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 InfiniBand 分层模型 应用层 (RDMA, MPI, etc.) 传输层 (RC, UC, RD, UD) 网络层 (全局路由, LID) 链路层 (数据包, 流控) 物理层 (电气, 信号) IB 子网管理器 (Subnet Manager) 管理所有IB设备,分配LID,计算路由 IB将传输层和网络层合并在同一个硬件模块中实现 子网管理器独立于数据路径,属于带外管理

我的经验: 在实际部署中,IB的传输层选择非常关键。如果你做的是存储集群,用RC(可靠连接)模式;如果是MPI并行计算,用UD(不可靠数据报)模式效率更高。我曾经在一个项目中选错了传输模式,结果延迟直接翻倍,后来改成UD才解决问题。

2.2 物理层与链路层

物理层,就是最底下的那层。IB物理层定义了三种链路速率:

速率等级 单通道速率 4x 总带宽 12x 总带宽
SDR (单倍数据率) 2.5 Gbps 10 Gbps 30 Gbps
DDR (双倍数据率) 5.0 Gbps 20 Gbps 60 Gbps
QDR (四倍数据率) 10.0 Gbps 40 Gbps 120 Gbps
FDR (十四倍数据率) 14.0625 Gbps 56.25 Gbps 168.75 Gbps
EDR (二十五倍数据率) 25.78125 Gbps 103.125 Gbps 309.375 Gbps
HDR (五十倍数据率) 50.0 Gbps 200 Gbps 600 Gbps

你想想看,HDR单通道就50Gbps,4x就是200Gbps。这速度,以太网还在追赶呢。

链路层呢,负责把物理层的比特流组装成数据包。IB的数据包格式是这样的:

+--------+--------+--------+--------+--------+--------+--------+
| LRH    | GRH    | BTH    |  Payload  | ICRC  | VCRC  |  DEL  |
| 8字节  | 可选   | 12字节 | 0-4096字节| 4字节 | 2字节 | 1字节 |
+--------+--------+--------+--------+--------+--------+--------+
  • LRH (本地路由头):8字节,包含源LID、目的LID、VL等。这是链路层必须的。
  • GRH (全局路由头):40字节,可选。跨子网通信时才需要。
  • BTH (基本传输头):12字节,包含QP号、操作码等。
  • Payload:数据载荷,最大4096字节。
  • ICRC/VCRC:校验码,保证数据完整性。

避坑指南: 我曾经遇到过一个诡异的问题——IB链路偶尔丢包,但物理层显示一切正常。查了三天,最后发现是光纤端面脏了。IB对信号质量极其敏感,哪怕是一点灰尘,都会导致CRC错误。所以,IB的光纤连接器一定要定期清洁,别问我怎么知道的。

2.3 网络层与传输层

网络层,核心就是路由。IB网络里每个端口都有一个LID(本地标识符),16位,范围是0x0001到0xBFFF。子网管理器负责分配这些LID,并计算路由表。

传输层,这才是IB真正厉害的地方。它定义了四种传输服务:

  1. RC (可靠连接):两个QP之间建立一对一连接,保证有序、无丢包、无重复。适合存储和数据库。
  2. UC (不可靠连接):也是连接模式,但不保证可靠。适合对延迟极度敏感的场景。
  3. RD (可靠数据报):多对多通信,保证可靠。适合集群通信。
  4. UD (不可靠数据报):多对多,不保证可靠。适合MPI广播等。

为什么会设计这么多模式?说白了,就是让开发者根据场景选最合适的。你想想看,如果所有通信都用RC,那连接数会爆炸。一个1000节点的集群,全连接就需要100万个QP,硬件根本扛不住。

关键概念: IB的传输层实现了RDMA (远程直接内存访问)。这意味着数据可以从一台机器的内存直接搬到另一台机器的内存,完全绕过CPU。延迟可以低到1微秒以下。这是IB跟以太网最大的区别。

2.4 IB子网管理器

子网管理器(Subnet Manager,简称SM),是IB网络的大脑。它负责:

  • 发现网络拓扑
  • 为每个端口分配LID
  • 计算路由表并下发到交换机
  • 监控链路状态,处理故障

SM可以运行在专用服务器上,也可以运行在交换机内部。我建议在生产环境中,至少部署两个SM,一个主一个备。主SM挂了,备SM自动接管。

SM的工作流程大致是这样的:

1. 子网启动 -> SM发送SMP (子网管理包) 发现所有设备
2. 分配LID -> 每个端口获得唯一16位LID
3. 计算路由 -> 基于最短路径算法 (通常是最小跳数)
4. 下发路由 -> 写入每个交换机的转发表
5. 持续监控 -> 检测链路变化,动态调整路由

我的建议: 如果你在搭建IB网络,一定要先规划好LID分配策略。我习惯把计算节点的LID范围定在0x0001-0x0FFF,存储节点在0x1000-0x1FFF,管理节点在0x2000-0x2FFF。这样排错时一眼就能看出设备类型。

嗯,说到排错,我记得有一次生产环境IB网络突然大面积断连。我登录到SM一看,发现主SM进程挂了,备SM虽然接管了,但路由表还没来得及完全同步。从那以后,我强制要求所有项目必须配置SM的持久化存储,并且定期备份路由表。

好了,IB的基础分层模型、物理链路层、网络传输层,还有子网管理器,我们就讲到这里。这些概念是后续所有内容的基础,尤其是RDMA和子网管理,后面还会反复提到。


公众号:蓝海资料掘金营,微信deep3321