2. InfiniBand基础:IB网络分层模型、物理层与链路层、网络层与传输层、IB子网管理器
各位同学,今天我们来啃一块硬骨头——InfiniBand的基础架构。说实话,我刚接触IB的时候,也被它那套分层模型搞得有点晕。但后来我在一个高性能计算项目中,亲眼看着IB把千兆以太网按在地上摩擦,才真正理解了这套设计的精妙之处。
IB网络,说白了就是为高性能计算和存储网络量身定做的。它跟以太网最大的区别是什么?我总结一句话:以太网是尽力而为,IB是使命必达。下面我们一层层拆开来看。
2.1 IB网络分层模型
IB的分层模型,跟OSI七层模型有点像,但更精简。它主要分为四层:
- 物理层:负责比特流的传输,定义电气特性、连接器、线缆等
- 链路层:负责数据帧的封装、流控、错误检测
- 网络层:负责路由转发,也就是包从哪到哪
- 传输层:负责端到端的可靠传输、消息分段与重组
嗯,这里要注意,IB的传输层和网络层其实是在同一个硬件模块里实现的,不像TCP/IP那样分得那么清楚。我个人习惯把这两层合起来叫「传输网络层」,因为在实际芯片设计里,它们是一体的。
核心要点: IB的分层设计,核心目标就是低延迟、高带宽、低CPU开销。每一层都在为这个目标服务。
下面这张图,是我自己画的IB分层模型与OSI模型的对比,你一看就明白:
我的经验: 在实际部署中,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真正厉害的地方。它定义了四种传输服务:
- RC (可靠连接):两个QP之间建立一对一连接,保证有序、无丢包、无重复。适合存储和数据库。
- UC (不可靠连接):也是连接模式,但不保证可靠。适合对延迟极度敏感的场景。
- RD (可靠数据报):多对多通信,保证可靠。适合集群通信。
- 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