2. InfiniBand网络架构
InfiniBand(IB)并非简单的“高速网卡+交换机”组合,而是一套完整的、面向高吞吐与低时延设计的独立网络体系。理解其架构,是后续进行端到端流控调优的前提——因为流控参数(如 buffer size、credit 阈值)都作用在具体的组件与协议层上。本节将拆解 IB 网络的三大物理核心、子网管理器(SM)的逻辑角色,以及贯穿其中的通信协议栈。
2.1 核心硬件组件:HCA、交换机与链路
IB 网络由三类基础硬件构成,它们各自承担明确的职责,且与以太网有本质区别。
- HCA(Host Channel Adapter,主机通道适配器):相当于 IB 网络中的“网卡”,但远比以太网卡智能。HCA 直接挂载在 CPU 的内存总线(如 PCIe)上,负责将主机内存中的数据封装为 IB 报文,并处理传输层的可靠性(如重传、确认)。HCA 内部拥有多个 QP(Queue Pair,队列对),每个 QP 是一对发送/接收队列,应用程序通过 QP 直接发起通信,绕过操作系统内核。
- IB 交换机(Switch):与以太网交换机的“存储转发”不同,IB 交换机通常采用直通转发(Cut-through)模式,在收到报文头后立即根据路由表转发,极大降低交换延迟。交换机内部按端口划分 VL(Virtual Lane,虚拟通道),用于隔离不同流量类型(如管理流、数据流),这是流控机制的重要载体。
- 链路(Link):IB 链路使用铜缆或光纤,物理层速率以 SDR(10Gbps)/DDR(20Gbps)/QDR(40Gbps)/FDR(56Gbps)/EDR(100Gbps)/HDR(200Gbps) 演进。链路宽度可为 1x、4x、12x,常见为 4x。链路层采用 8B/10B 或 64B/66B 编码,并定义了基于 信用(Credit) 的流控机制。
核心要点:IB 网络是有损网络的典型代表——它不依赖 TCP 式的端到端拥塞控制,而是通过链路层的 基于信用的流控 确保报文不因接收端缓冲区不足而丢失。每个接收端口维护一个信用计数器,发送端只有获得信用才能发送数据,这是 IB 流控的基石。
下图展示了 IB 网络中 HCA、交换机、链路以及 SM 的逻辑关系,并标注了流控关键点:
2.2 子网管理器(SM):IB 网络的“大脑”
与以太网依赖生成树或 BGP 等分布式协议不同,IB 网络采用集中式管理。子网管理器(Subnet Manager)是运行在指定节点(可以是专用硬件、交换机内嵌模块或 HCA 上的软件)上的逻辑实体,负责整个子网的初始化与动态维护。
SM 的核心职责包括:
- 发现与枚举:通过 SMP(子网管理报文)广播,发现子网内所有交换机、HCA、链路。
- 分配 LID:为每个端口分配唯一的 16 位本地标识符(LID),这是 IB 二层转发的依据。
- 计算路由:基于拓扑计算从任意源到目的的最优路径,并生成交换机的线性转发表(LFT)。
- 配置 VL 仲裁:设定各 VL 的优先级权重与带宽分配,直接影响流控行为。
- 监控与容错:持续跟踪链路状态,在链路故障时重新计算路径。
调优关联:SM 下发的路径决定了数据流经过的交换机端口与 VL。如果 SM 配置了不合理的 VL 映射(例如将大流量数据放在低优先级 VL),即使链路层信用充足,也可能因 VL 仲裁导致时延抖动。因此,调整流控参数前,务必先检查 SM 的 VL 配置。
2.3 通信协议栈:从 QP 到物理比特
IB 协议栈分为五层,每一层都有明确的头部与操作,理解它们有助于定位流控问题发生在哪一层。
| 协议层 | 核心功能 | 流控相关要素 |
|---|---|---|
| 应用层 | RDMA 操作(Read/Write/Send),用户态直接访问 | QP 深度、WR 大小 |
| 传输层 | 报文分段、可靠性(ACK/NACK)、多路复用 | E2E 信用、重传超时 |
| 网络层 | LRH 路由(LID 到 LID),可选 GRH 支持多子网 | SL(服务等级)→ VL 映射 |
| 链路层 | 流控、错误检测(CRC)、VL 复用 | LFC 信用、缓冲区大小 |
| 物理层 | 信号编码、电气特性、链路训练 | 链路速率/宽度协商 |
以一次典型的 RDMA 读操作为例:应用层发起 ibv_post_read,传输层将请求封装为包含 BTH 的报文,网络层添加 LRH 指定目的 LID,链路层在发送前检查信用池——若信用不足,报文将停留在发送缓冲区等待信用补充。这一等待过程正是流控调优中需要观察的关键指标。
2.4 案例:一个典型的 HPC 集群 IB 拓扑
假设一个 16 节点的 GPU 集群,采用两层 Fat-Tree 拓扑:
拓扑结构:
[计算节点 x16] -- 4x EDR --> [叶子交换机 x4] -- 4x EDR --> [核心交换机 x2]
每个节点配置 1 块 HCA,每块 HCA 使用 2 个 QP 分别承载 MPI 与存储流量。
在此场景中,SM 会为每个节点分配 LID,并计算从任意节点到其他节点的路径。若节点 A 向节点 B 发送数据,路径可能为:A-HCA → 叶子交换机1 → 核心交换机1 → 叶子交换机2 → B-HCA。沿途每个端口的信用值都必须足够,否则数据会在中间交换机处暂停。
常见误区:许多初学者认为 IB 流控只发生在 HCA 与交换机之间,忽略了交换机到交换机的链路流控。实际上,在多层拓扑中,核心交换机与叶子交换机之间的链路往往是拥塞热点,其信用配置直接影响整体吞吐。调优时需同时检查所有链路端口的 rx_buffer_credits 与 tx_credits_used 计数器。
2.5 误区与复盘:流控调优的常见陷阱
- 误区一:只调 HCA 不调交换机。HCA 的发送信用充足,但交换机端口接收缓冲区过小,导致丢包重传,性能反而下降。应使用
ibstat检查交换机端口错误计数。 - 误区二:忽略 VL 仲裁。默认 VL 仲裁可能将所有流量映射到 VL0,导致高优先级管理报文与数据流争抢带宽。应通过 SM 配置 VL 权重。
- 误区三:盲目增大缓冲区。增大接收缓冲区虽然能减少丢包,但会增加交换机内部延迟,影响时延敏感型应用。需在吞吐与延迟间权衡。
复盘建议:在调整任何流控参数前,先使用 perftest 工具(如 ib_write_bw)建立基线性能数据,记录吞吐、时延、重传计数。每次只修改一个参数,并对比基线数据,避免多变量同时调整导致无法定位根因。