InfiniBand架构概述:网络拓扑、节点结构、子网管理器与通信协议

InfiniBand(IB)并非简单的“高速网卡+线缆”组合,而是一套完整的、面向数据中心与高性能计算(HPC)的 交换式网络架构。理解IB架构,需要从四个维度切入:物理拓扑决定数据如何流动,节点结构决定数据从何处产生与消费,子网管理器(Subnet Manager, SM)决定网络如何被控制,通信协议栈决定数据如何被封装与传输。本节将逐一拆解这四层,并澄清常见误区。

一、网络拓扑:从Fat-Tree到Dragonfly

IB网络采用交换式拓扑,而非传统以太网的网状或总线结构。最常见的拓扑是胖树(Fat-Tree),其核心思想是:越靠近网络核心,链路带宽越宽,从而避免热点拥塞。一个典型的两层Fat-Tree拓扑中,叶子交换机连接计算节点(服务器),核心交换机连接叶子交换机,形成无阻塞或超额订阅(Oversubscription)可控的结构。

除Fat-Tree外,高性能计算领域还常使用Dragonfly拓扑(面向百万节点级扩展)和Torus拓扑(面向低延迟直接互联)。但无论哪种拓扑,IB网络都遵循一个关键原则:所有数据通路均由SM统一计算与配置,而非依赖交换机自学习(如以太网的STP/RSTP)。

拓扑选型要点:Fat-Tree适合通用HPC与AI集群,易于扩展且容错性好;Dragonfly适合超大规模系统(如美国能源部Aurora超算),但路由算法更复杂;Torus适合对延迟极敏感的MPI通信模式。实际部署中,需根据应用通信模式、布线成本与故障域大小综合权衡。

二、节点结构:HCA、TCA与交换机

IB网络中的“节点”并非仅指服务器,而是包含三类角色:

  • HCA(Host Channel Adapter,主机通道适配器):位于服务器内部,相当于IB网卡。它直接挂载在PCIe总线上,负责将主机内存中的数据封装为IB报文,并支持RDMA操作(读、写、原子操作)。HCA内部包含DMA引擎、队列对(QP)管理单元和完成队列(CQ)引擎。
  • TCA(Target Channel Adapter,目标通道适配器):用于连接存储设备或专用IO控制器,使存储设备也能直接接入IB网络,实现存储与计算的融合(如NVMe over IB)。
  • IB交换机(Switch):负责根据LID(Local Identifier,本地标识符)转发数据包。交换机本身不参与RDMA操作,仅做高速转发(通常延迟低于100ns)。

每个HCA/TCA在子网中拥有唯一的GID(Global Identifier,全局标识符)(基于IPv6格式)和LID(16位本地地址)。LID用于子网内路由,GID用于跨子网通信。

三、子网管理器(SM):IB网络的“大脑”

IB网络区别于以太网的最大特征在于:控制平面与数据平面完全分离。子网管理器(SM)是一个软件实体,通常运行在某个专用节点或交换机上(也可冗余运行)。SM负责以下关键任务:

  1. 发现:扫描子网中的所有节点、交换机、链路,构建网络拓扑数据库。
  2. 寻址:为每个端口分配唯一的LID。
  3. 路由计算:基于拓扑计算所有可能的源-目的路径,生成转发数据库(Forwarding Database),并下发到每台交换机的线性转发表(LFT)。
  4. 故障管理:持续监控链路状态,当链路失效时重新计算路由,实现快速故障切换(通常<50ms)。

SM与交换机之间通过管理数据报(MAD,Management Datagram)通信,使用专用的管理QP(QP0)。SM的配置直接影响网络性能——例如,自适应路由(AR)需要SM在交换机上启用动态路由引擎,而服务质量(QoS)则需要SM配置服务等级(SL)与虚拟通道(VL)映射。

实操提示:在Mellanox(现NVIDIA)环境中,使用 ibnetdiscover 命令可查看SM发现的拓扑;使用 ibstatus 查看本节点端口状态与LID。若SM未运行,所有端口将停留在 Down 状态,无法通信。

四、通信协议栈:从QP到RDMA操作

IB通信的核心抽象是队列对(QP,Queue Pair)。每个QP由发送队列(SQ)和接收队列(RQ)组成。软件通过提交工作请求(WR,Work Request)到QP,硬件则异步执行并将结果写入完成队列(CQ)。这一模型称为Verb API(如libibverbs)。

IB协议栈自下而上分为:

  • 物理层:定义1X/4X/12X链路,速率从SDR(2.5Gbps)到NDR(400Gbps)。
  • 链路层:负责流控、错误检测(CRC)与链路级重传。关键机制是信用(Credit)流控,防止接收端缓冲区溢出。
  • 网络层:基于LID的路由转发,支持单播与组播。
  • 传输层:提供四种传输服务——可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)、不可靠数据报(UD)。RC最常用,支持RDMA读/写与原子操作。

一次典型的RDMA写操作流程如下:

1. 应用调用 ibv_post_send(),提交WR到QP的SQ
   WR包含:目标QP号、远端内存地址(RVA)、本地内存地址、长度、操作码(IBV_WR_RDMA_WRITE)
2. HCA的DMA引擎从本地内存读取数据
3. HCA将数据封装为IB报文,添加LRH(链路头)+BTH(基础传输头)+RETH(RDMA扩展头)
4. 报文经交换机逐跳转发至目标HCA
5. 目标HCA校验后,直接将数据DMA写入指定的远端内存地址
6. 目标HCA生成ACK报文返回源端(可选,RC服务必须)
7. 源端HCA将完成事件写入CQ,应用通过 ibv_poll_cq() 获取完成通知

整个过程无需远端CPU参与,也无需远端内核网络协议栈介入,因此延迟可低至1微秒以内,CPU占用率接近零。

五、架构全景图

下图综合展示了IB架构的核心组件与数据通路:

节点A(服务器) 应用(MPI/存储) libibverbs / QP HCA(RDMA引擎) LID=0x0001 内存缓冲区 节点B(服务器) 应用(不感知) QP(接收队列) HCA(目标) LID=0x0002 远端内存 IB交换机 线性转发表(LFT) LID路由 + VL仲裁 子网管理器(SM) 拓扑发现/路由计算 MAD管理报文 RDMA写数据流 (无需节点B CPU参与) IB协议栈分层 传输层(QP/RC) BTH+RDMA扩展头 网络层(LID路由) LRH+GRH 链路层(信用流控) CRC+重传 物理层(SerDes) 1X/4X/12X 管理平面 SM/MAD

六、案例:8节点GPU集群的IB组网

假设构建一个8台GPU服务器的训练集群,每台服务器配置1张HCA(如ConnectX-6,支持HDR 200Gbps)。采用两层Fat-Tree拓扑:

组件 数量 说明
GPU服务器 8 每台含1个HCA,双端口(可选)
叶子交换机 2 每台提供8个下行端口(连接服务器)+4个上行端口
核心交换机 1 提供8个端口连接两台叶子交换机
SM 1(冗余可选) 运行在管理节点或第一台服务器上

SM启动后,会为每个HCA端口分配LID(如0x0001~0x0010),并在交换机中写入LFT。当GPU应用(如NCCL)发起AllReduce通信时,数据流经“服务器A HCA → 叶子交换机 → 核心交换机 → 叶子交换机 → 服务器B HCA”,全程延迟约1.2微秒(HDR),带宽可达196Gbps(有效数据)。

七、常见误区与复盘

误区1:认为IB交换机像以太网交换机一样即插即用。
实际上,IB交换机在SM未配置前,所有端口处于初始化状态,无法转发数据。必须确保SM运行正常,且交换机固件与SM版本兼容。
误区2:混淆LID与GID的作用范围。
LID仅在子网内有效(16位,最多65535个端口),跨子网通信必须使用GID(基于IPv6)。在配置路由时,需明确区分子网内路由(LID路由)与跨子网路由(GID路由)。
误区3:忽略QP数量限制。
每个HCA支持的QP数量有限(如ConnectX-6支持约256K个QP)。当应用创建大量连接时(如每个MPI进程一对QP),需合理规划QP复用或使用SRQ(共享接收队列)来减少资源消耗。
复盘建议:在排查IB网络故障时,遵循“物理层→链路层→网络层→传输层”的顺序。先用 ibstat 检查端口状态(Active/Init/Down),再用 ibping 测试连通性,最后用 ib_read_lat 验证RDMA性能。多数“性能不达标”问题源于拓扑配置不当(如超额订阅过高)或SM路由未优化(未启用自适应路由)。