2. Infiniband基础概念
2.1 什么是 Infiniband
InfiniBand(简称 IB)是一种面向高性能计算(HPC)和企业级数据中心的高速、低延迟、可扩展的网络互连技术。它诞生于 1999 年,由 Intel、Microsoft、Compaq 等公司联合推动,旨在替代当时 PCI 总线与专用计算集群中割裂的 I/O 架构。与以太网“尽力而为”的转发模型不同,InfiniBand 从设计之初就强调端到端的可靠传输、极低的 CPU 卸载开销和确定性的延迟。
从本质上看,InfiniBand 不仅仅是一张网卡和一根线缆,它定义了一整套完整的通道式 I/O 架构:主机上的应用通过 HCA(Host Channel Adapter)直接访问网络,数据以“消息”为单位在队列对(Queue Pair, QP)之间传递,并由硬件完成数据的分段、路由、流控与重组。这种设计让 CPU 几乎不参与数据搬运,从而将单跳延迟压到亚微秒级别。
2.2 与传统以太网的核心区别
要真正理解 InfiniBand 的价值,最有效的方式是将其与数据中心里最常见的以太网进行对比。两者在设计哲学上就有根本差异:以太网是“共享介质、尽力而为、软件补救”,而 InfiniBand 是“专用通道、硬件保障、端到端流控”。
| 对比维度 | 传统以太网(TCP/IP) | InfiniBand |
|---|---|---|
| 寻址方式 | IP 地址(逻辑)+ MAC 地址(物理) | LID(子网内本地 ID)+ GID(全局 ID) |
| 数据传递模型 | 基于 Socket / 内核协议栈 | 基于队列对(QP)的消息传递,内核旁路 |
| 延迟(典型值) | 10~50 微秒(依赖协议栈) | 0.5~2 微秒(硬件直通) |
| 流控机制 | TCP 滑动窗口(软件,端到端) | 链路级信用流控(硬件,逐跳) |
| 可靠性 | TCP 重传(软件处理) | 硬件重传(可靠连接 RC 模式) |
| CPU 开销 | 高(协议栈处理、中断密集) | 极低(RDMA 卸载,CPU 几乎零参与) |
| 网络管理 | 分布式(STP/BGP 等协议自协商) | 集中式(子网管理器统一管控) |
上表中最值得关注的是流控与可靠性的位置。以太网将可靠性放在 TCP 层,由 CPU 处理确认与重传;而 InfiniBand 将可靠性下沉到链路层硬件,每个交换机端口都维护信用计数器,只有收到对端返回的信用才继续发送,从物理上杜绝了丢包。这种“无损网络”特性,是 GPUDirect RDMA 能够高效运行的前提。
2.3 核心术语详解
InfiniBand 拥有一套独立的术语体系,初学者往往被这些名词困扰。下面按“从端点到网络”的逻辑顺序,逐一拆解最关键的几个概念。
2.3.1 HCA(Host Channel Adapter)
HCA 是安装在服务器上的主机通道适配器,相当于“InfiniBand 网卡”。但它远比普通网卡复杂:HCA 内部集成了 DMA 引擎、队列管理逻辑和消息解析单元,能够直接读写主机内存。每个 HCA 通常提供 1~2 个物理端口,每个端口可以支持多个 QP。NVIDIA 的 ConnectX 系列(如 ConnectX-6/7)就是典型的 HCA,它们同时支持 InfiniBand 和 RoCE(RDMA over Converged Ethernet)。
2.3.2 子网管理器(Subnet Manager, SM)
InfiniBand 网络是集中管理的。子网管理器是运行在指定节点(可以是专用服务器、交换机内置模块或软件进程)上的控制实体,负责整个子网的拓扑发现、路径计算、LID 分配和路由表下发。当网络拓扑发生变化(如新节点接入),SM 会重新扫描并更新转发规则。生产环境中通常配置主备双 SM 以保证高可用。
2.3.3 LID(Local Identifier)
LID 是 InfiniBand 子网内的16 位本地地址,由 SM 在节点加入网络时动态分配。每个 IB 端口至少拥有一个 LID(可以多个,用于多路径)。数据包在子网内部转发时,交换机只依据 LID 查找转发表,这个过程与以太网 MAC 地址学习类似,但 LID 是由 SM 统一规划的,不存在广播风暴或地址冲突问题。
2.3.4 GID(Global Identifier)
GID 是128 位全局标识符,用于跨子网路由。它由 64 位子网前缀 + 64 位接口标识(通常取自端口 GUID)组成。GID 的格式与 IPv6 地址类似,但语义完全不同——它标识的是 IB 端口而非主机接口。当数据包需要跨越多个 IB 子网时,路由器会依据 GID 进行转发。
2.3.5 队列对(Queue Pair, QP)
QP 是 HCA 内部通信的端点抽象,由发送队列(SQ)和接收队列(RQ)组成。应用通过创建 QP 并提交 Work Request(WR)来发起通信,硬件自动完成数据搬运。QP 有四种传输类型:可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)和不可靠数据报(UD),其中 RC 最常用,提供类似 TCP 的可靠字节流语义。
2.4 一个典型场景:GPU 集群中的 IB
以 NVIDIA DGX A100 集群为例,每台服务器内部有 8 张 GPU,外部通过 8 张 ConnectX-6 HCA 接入 IB 网络。当进行分布式训练时,每个 GPU 进程需要将梯度数据发送给其他节点上的 GPU。此时,数据路径是:
- GPU 显存中的梯度数据通过 GPUDirect RDMA 技术,绕过 CPU 和主机内存,直接由 HCA 的 DMA 引擎读取。
- HCA 将数据封装为 IB 数据包,通过交换机网络转发到目标节点。
- 目标节点的 HCA 收到数据后,直接写入目标 GPU 的显存,全程无需 CPU 参与。
在这个过程中,子网管理器已经预先计算好了每对节点之间的最优路径,并为每个端口分配了 LID。当数据包到达交换机时,交换芯片仅需查找 LID 转发表即可完成转发,延迟极低。整个集群中,数千个 GPU 之间的通信延迟可以稳定保持在 1~2 微秒以内。
2.5 常见误区与复盘
实际上,IB 的价值在于端到端的架构设计——从 HCA 的硬件卸载,到交换机的无丢包转发,再到 SM 的集中管理,三者缺一不可。如果只更换网卡而网络仍走传统以太网交换机,无法获得 IB 的低延迟特性。
LID 只在 IB 子网内部有效,且由 SM 动态分配,不具备跨子网路由能力。跨子网通信必须依赖 GID。而 IP 地址是逻辑寻址,与物理拓扑无关。两者设计哲学完全不同。
ibstatus 查看 HCA 状态和 LID 分配情况,再使用 ibnetdiscover 检查拓扑是否被 SM 正确发现。如果节点无法通信,优先确认 SM 是否正常运行、LID 是否冲突,而不是像排查以太网那样去检查 IP 配置。