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)。
二、节点结构: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负责以下关键任务:
- 发现:扫描子网中的所有节点、交换机、链路,构建网络拓扑数据库。
- 寻址:为每个端口分配唯一的LID。
- 路由计算:基于拓扑计算所有可能的源-目的路径,生成转发数据库(Forwarding Database),并下发到每台交换机的线性转发表(LFT)。
- 故障管理:持续监控链路状态,当链路失效时重新计算路由,实现快速故障切换(通常<50ms)。
SM与交换机之间通过管理数据报(MAD,Management Datagram)通信,使用专用的管理QP(QP0)。SM的配置直接影响网络性能——例如,自适应路由(AR)需要SM在交换机上启用动态路由引擎,而服务质量(QoS)则需要SM配置服务等级(SL)与虚拟通道(VL)映射。
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架构的核心组件与数据通路:
六、案例: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(有效数据)。
七、常见误区与复盘
实际上,IB交换机在SM未配置前,所有端口处于初始化状态,无法转发数据。必须确保SM运行正常,且交换机固件与SM版本兼容。
LID仅在子网内有效(16位,最多65535个端口),跨子网通信必须使用GID(基于IPv6)。在配置路由时,需明确区分子网内路由(LID路由)与跨子网路由(GID路由)。
每个HCA支持的QP数量有限(如ConnectX-6支持约256K个QP)。当应用创建大量连接时(如每个MPI进程一对QP),需合理规划QP复用或使用SRQ(共享接收队列)来减少资源消耗。
ibstat 检查端口状态(Active/Init/Down),再用 ibping 测试连通性,最后用 ib_read_lat 验证RDMA性能。多数“性能不达标”问题源于拓扑配置不当(如超额订阅过高)或SM路由未优化(未启用自适应路由)。