InfiniBand网络基础:架构、拓扑、链路层与网络层协议

要深入理解RDMA拥塞控制算法,首先必须掌握InfiniBand网络的基本运行机制。IB网络并非简单的“高速以太网”,而是一套为低时延、高带宽、低CPU开销而设计的完整体系结构。本节将聚焦于IB的架构分层、典型拓扑、链路层与网络层协议,为后续分析拥塞控制建立必要的协议背景。

2.1 InfiniBand整体架构:分层与核心组件

InfiniBand采用与TCP/IP类似的分层协议栈,但各层职责和语义完全不同。从下至上依次为:物理层、链路层、网络层、传输层,以及上层的软件协议(如IPoIB、SRP、SDP)。其中与拥塞控制直接相关的是链路层和网络层,但物理层的链路速率决定了拥塞出现的频率和规模。

IB网络中的核心硬件组件包括:

  • HCA(Host Channel Adapter):服务器侧的主机通道适配器,相当于以太网中的NIC,负责将主机内存中的数据封装为IB报文,并处理传输层与链路层协议。
  • Switch(交换机):在子网内转发数据包,仅处理链路层(L2)转发,不解析传输层内容。
  • Router(路由器):连接不同IB子网(或IB与其它网络),处理网络层(L3)转发,基于GID(Global ID)进行路由。
  • Subnet Manager(SM):运行在指定节点(通常为交换机或专用管理节点)上的软件,负责整个子网的拓扑发现、路径计算和LID分配。
关键认知:IB交换机是无控制平面的纯转发设备。所有路由决策、流控配置、拥塞阈值设置均由SM统一计算并下发到各交换机。这种集中式管理模型与以太网的分布式控制形成鲜明对比,也是IB拥塞控制能够全局协调的基础。
InfiniBand 分层架构与核心组件 协议栈 物理层 链路速率/信号/编码 链路层 (L2) LID寻址/流控/ 拥塞通知(CNP) 网络层 (L3) GID寻址/路由 传输层 (L4) QP/可靠传输/ RDMA操作 软件协议 IPoIB/SRP/verbs 硬件组件与连接 HCA 节点1 服务器A HCA 节点2 服务器B IB Switch L2转发 拥塞采样/CNP生成 Subnet Manager 链路(Link) 链路(Link) 管理通道 CNP拥塞通知报文 HCA Switch SM CNP路径

2.2 拓扑结构:Fat-Tree与不规则拓扑

IB网络的物理拓扑决定了数据流的路径选择空间,也直接影响拥塞的分布特征。最常见的拓扑是Fat-Tree(胖树),它是一种多级无阻塞(或近似无阻塞)交换结构。以典型的三层Fat-Tree为例:

  • 叶子层(Leaf):直接连接HCA,通常为36端口或更多端口的交换机。
  • 脊层(Spine):连接所有叶子交换机,不直接连接HCA。
  • 核心层(Core):在超大规模网络中,脊层之上再增加一层核心交换机,形成更宽的汇聚带宽。

Fat-Tree的关键特性是等分带宽:任意叶子节点之间都存在多条等价路径,SM通过自适应路由或静态轮询将流量分散到不同路径上。然而,即使拓扑无阻塞,流量模式(如多对一通信)仍会导致某个叶子交换机下行端口出现瞬时拥塞——这正是拥塞控制要解决的核心场景。

拓扑类型 典型规模 拥塞风险 适用场景
单层(Flat) ≤ 36节点 低(无汇聚) 小规模GPU集群
两层Fat-Tree 数百节点 中等(多对一流量) 中型HPC/超算
三层Fat-Tree 数千节点 较高(长尾拥塞) 大规模AI训练集群
Dragonfly+ 数万节点 高(分组间链路瓶颈) 超大规模HPC
常见误区:初学者常认为“Fat-Tree无阻塞 = 不会拥塞”。实际上,无阻塞仅指静态路由下任意一对节点间存在足够带宽。当多个发送方同时向同一目标节点发送数据(即Incast模式)时,目标节点的接收端口必然成为瓶颈,拥塞不可避免。拥塞控制算法正是为了在这种场景下限制发送速率,避免交换机缓存溢出导致丢包。

2.3 链路层协议:LID寻址与流控机制

IB链路层使用LID(Local Identifier)作为子网内的二层地址。LID由SM在节点初始化时动态分配,16位长度,范围1~49151。每个HCA端口和交换机端口都拥有一个唯一的LID。链路层帧格式如下:

IB 链路层报文(LRH - Local Route Header)关键字段:
+----------------+--------+--------+--------+------------------+
| VL (4bit)      | LVer   | SL (4bit)| RLID  (16bit)  |  LID (16bit)  |
+----------------+--------+--------+--------+------------------+
| 源LID          | 目的LID| 分组长度 |  SRC端口 |  DEST端口       |
+----------------+--------+--------+--------+------------------+

链路层最重要的机制是基于信用(Credit)的流控。每个接收端口维护一个信用计数器,表示当前可接收的数据量。发送方只有在收到接收方授予的信用后才能发送数据。这种机制从硬件层面保证了不丢包——只要信用管理正确,数据帧永远不会因接收缓存溢出而丢失。

信用流控分为两种:

  • 链路级流控:相邻两个端口之间的信用协商,基于VL(Virtual Lane)独立进行。
  • 端到端流控:可选机制,用于跨交换机端口的可靠传输,但实际部署较少。

信用流控虽然保证了链路不丢包,但也带来了拥塞扩散问题:当某个下游端口缓存满时,信用停止发放,上游交换机发送队列堆积,进而导致更上游的交换机也停止发放信用——这就是拥塞树(Congestion Tree)的形成过程。拥塞控制算法需要识别并打破这种树状扩散。

2.4 网络层协议:GID与路由

当数据包需要跨子网传输时,必须使用网络层。IB网络层地址称为GID(Global ID),长度为128位,由子网前缀(64位)+ GUID(64位)组成。GID的格式与IPv6地址类似,但语义不同:GID中的GUID是端口全球唯一标识符,由厂商烧录。

网络层报文头(GRH - Global Route Header)包含以下关键字段:

GRH 字段结构:
+------------------+------------------+------------------+------------------+
| IPVer (4bit)     | TClass (8bit)    | FlowLabel (20bit)| PayloadLen (16bit)|
+------------------+------------------+------------------+------------------+
| NextHeader (8bit)| HopLimit (8bit)  | SGID (128bit)    | DGID (128bit)    |
+------------------+------------------+------------------+------------------+

其中TClass字段与拥塞控制密切相关——它承载了FECN(Forward Explicit Congestion Notification)和BECN(Backward Explicit Congestion Notification)标记位。当交换机检测到拥塞时,会在转发数据包的GRH中设置FECN位;接收端收到带FECN标记的包后,会生成CNP(Congestion Notification Packet)反向发送给发送端,通知其降低发送速率。

路由过程由SM预先计算并下发到各交换机的路由表中。SM使用最短路径算法(如Dijkstra)计算所有节点对之间的路径,并支持多路径(ECMP等价多路径)配置。路由器(L3设备)则基于DGID中的子网前缀进行跨子网转发。

2.5 拥塞控制相关字段与报文交互

在IB协议栈中,与拥塞控制直接相关的字段和报文包括:

  1. FECN(前向显式拥塞通知):由交换机在数据包转发时设置,标记该包经历了拥塞。
  2. BECN(后向显式拥塞通知):由交换机直接向发送端发送拥塞通知报文(较少使用)。
  3. CNP(拥塞通知报文):接收端收到带FECN标记的数据包后,向发送端回复的拥塞反馈报文。CNP携带拥塞的QP(Queue Pair)号和原因。
  4. CC(Congestion Control)管理报文:SM与交换机之间交换拥塞配置参数,如阈值、标记概率等。

一个典型的拥塞通知流程如下:

发送端HCA --数据包--> 交换机1 --数据包(FECN标记)--> 交换机2 --数据包(FECN)--> 接收端HCA
                                                                              |
                                                                              v
发送端HCA <--CNP报文-- 接收端HCA (生成CNP并反向发送)
      |
      v
发送端HCA 降低发送速率 (根据CNP中的拥塞程度)
理解要点:IB拥塞控制是基于交换机的标记和基于接收端的反馈的闭环机制。交换机不直接限制发送端速率,而是通过标记数据包来“通知”接收端,再由接收端生成CNP反馈给发送端。这种间接反馈路径增加了响应时延,但也避免了交换机维护复杂状态。

2.6 常见误区与复盘

在学习IB网络基础时,以下误区值得特别关注:

误区1:将IB链路层流控等同于拥塞控制。
链路层信用流控是逐跳的、基于硬件信用的机制,它保证不丢包,但无法感知端到端的拥塞状态。拥塞控制是端到端的、基于速率调节的机制。两者互补但不可替代。
误区2:认为拥塞只发生在交换机端口。
实际上,HCA的发送队列、接收端的内存带宽、PCIe总线带宽都可能成为瓶颈。拥塞控制算法通常只关注交换机端口,但实际部署中需要结合主机侧监控。
误区3:忽略VL(Virtual Lane)的作用。
IB支持16个VL,不同VL之间相互隔离,可以承载不同优先级流量。拥塞控制通常只作用于特定VL,避免影响高优先级控制流量。如果所有流量混在同一个VL中,拥塞控制的效果会大打折扣。