2. IB网络基础

核心原理:IB协议栈的分层模型

InfiniBand(IB)并非简单的“高速网卡+线缆”组合,而是一套完整的、为低延迟和高带宽设计的网络架构。理解IB网络,首先需要从它的协议栈分层入手。与TCP/IP的四层模型不同,IB协议栈更强调硬件卸载和端到端的流控机制,其分层结构直接决定了报文如何在节点间高效传输。

IB协议栈分层模型 应用层 (RDMA Verbs) libibverbs / 用户态应用 传输层 (Transport) QP / CQ / 可靠连接RC 网络层 (Network) 全局路由头 GRH / LID 链路层 (Link) 数据包格式 / 流控 / CRC 物理层 (Physical) 4x / 12x 通道, 信号编码 子网管理器(SM)与节点关系 子网管理器 (SM) 主SM / 备SM (Master/Standby) IB交换机 (Switch) 存储转发表 / 端口转发 端节点 (Host/GPU) HCA网卡 / 多个端口 管理/配置 数据转发 数据收发 关键机制 • SM负责LID分配 • 路由表由SM计算 • 交换机不参与SM • 子网内最多49151节点 • 子网间需路由器 • 端口状态由SM管理 • 链路激活需SM参与 • 故障时SM重新路由 上层依赖下层

IB协议栈自下而上分为物理层、链路层、网络层、传输层和应用层。物理层定义了信号编码、通道宽度(如4x、12x)和速率(如EDR 100Gb/s、HDR 200Gb/s)。链路层负责数据包封装、流控和CRC校验,是保证无损传输的关键。网络层使用64位的全局唯一标识(GID)和16位的本地标识(LID)进行寻址。传输层提供QP(Queue Pair)和CQ(Completion Queue)机制,支持可靠连接(RC)、不可靠连接(UC)和可靠数据报(RD)等传输类型。应用层则通过RDMA Verbs接口(如libibverbs)直接操作硬件,实现零拷贝网络通信。

核心组件:端口、链路与交换机

IB网络中的物理实体包括端节点(HCA)、交换机、链路和子网管理器。每个组件都有其独特的角色和状态机,理解这些状态是进行故障诊断的基础。

组件关键属性常见状态/值故障排查要点
HCA端口LID、端口状态、物理速率Active/Init/DownLID是否为0?端口是否Active?
链路链路宽度、速率、信号完整性4x/12x, EDR/HDRCRC错误计数是否持续增长?
交换机转发表、端口成员、SM优先级Forwarding/Blocking转发表是否完整?是否有端口Blocking?
子网管理器主备状态、扫描周期、路由算法Master/Standby/Disabled主SM是否唯一?备SM是否同步?

端口状态是IB网络中最直观的健康指标。一个端口从插入线缆到正常工作,会经历 Down → Init → Armed → Active 四个状态。如果端口停留在 Init 状态,通常意味着SM尚未为其分配LID;如果停留在 Armed 状态,则可能是链路层协商未完成。交换机在IB网络中扮演着“哑设备”角色——它不参与路由决策,只根据SM下发的线性转发表(LFT)进行帧转发。这种集中式管理架构使得IB网络的路由计算高度一致,但也意味着SM的故障会直接影响全网通信。

方法流程:子网管理器的工作机制

子网管理器(SM)是IB网络的大脑。在GPU集群中,通常将SM运行在管理节点或某个计算节点上,并配置冗余SM以保证高可用。SM的核心工作流程如下:

  1. 发现阶段:SM通过发送SMP(子网管理包)广播,发现子网内的所有交换机、HCA和路由器。
  2. LID分配:为每个端口的每个端口分配唯一的16位LID(1~49151),并通告给端节点。
  3. 路由计算:基于拓扑信息,使用最短路径算法(如Dijkstra)计算所有端到端的路径,生成交换机的线性转发表(LFT)。
  4. 路径下发:将LFT下发到每台交换机,同时将路径信息(PKey、SL等)通告给端节点。
  5. 持续监控:SM周期性地扫描子网,检测链路状态变化、节点加入/离开,并动态更新路由。
实操提示:在Mellanox(NVIDIA)环境中,使用 ibstat 查看端口状态,使用 ibswitches 查看交换机列表,使用 ibroute 查看LFT表。若SM运行在主机上,可通过 sminfo 查询SM状态。当GPU通信出现“无法建立连接”时,首先检查 ibstat 中端口是否为 Active,再检查 ibswitches 是否能看到所有交换机。

案例/场景:GPU集群中的IB子网配置

以一个典型的8节点GPU集群为例(每节点8张A100 GPU,配置1张CX-6 HDR HCA),拓扑采用两层Fat-Tree结构:2台核心交换机(Core Switch)连接8台边缘交换机(Edge Switch),每台边缘交换机连接4个节点。子网管理器运行在管理节点上,并配置一台备用SM运行在计算节点1上。

# 查看端口状态(在任意计算节点执行)
$ ibstat
CA 'mlx5_0'
    Port 1:
        State: Active
        PhysicalState: LinkUp
        Rate: 200 (HDR)
        BaseLID: 0x2c
        LMC: 0
        SM lid: 0x1
        SM sl: 0

# 查看子网管理器状态
$ sminfo
SM lid: 1
SM guid: 0x248a070300d0e2a0
SM state: Master
SM priority: 12

当集群中某节点通信异常时,通过 ibdiagnet 进行全网健康检查,输出中会明确标注“bad port”或“unreachable node”。例如,若发现某边缘交换机的一个下行端口处于 Init 状态,且对应节点的HCA端口为 Down,则大概率是物理链路问题(光模块或线缆)。若端口为 Active 但无法通信,则需检查SM是否已正确下发LFT,可通过 ibroute -n <lid> 查看该交换机端口的转发规则。

误区/复盘:常见配置错误与诊断陷阱

误区1:忽略LMC(LID Mask Control)配置。 在多路径场景中,若未配置LMC,每个端口仅分配1个LID,导致无法实现自适应路由(AR)。但LMC配置过大(如LMC=3)会占用过多LID空间,在大型集群中可能导致LID耗尽。建议仅在需要多路径时开启,并控制在LMC=1~2。
误区2:将SM运行在GPU计算节点上。 SM的扫描和路由计算会消耗CPU资源,且当该节点发生GPU故障重启时,SM会短暂离线,导致全网重配置。生产环境应将主SM部署在专用管理节点,备SM部署在另一台不承载GPU训练任务的主机上。

复盘案例:某集群升级固件后,所有节点无法互相通信。排查发现,新固件将交换机端口的 Operational VL 从8降为2,而SM配置中仍使用SL=4的路径,导致VL资源不足。通过 ibdiagnet -c 检查VL使用情况,发现SL2SL映射错误。最终通过修改SM配置中的 sl2vl 表,并重启SM解决。此案例提醒我们:固件升级后必须重新验证SM配置与硬件能力的匹配性,不能想当然沿用旧配置。

另一个常见陷阱是PKey(分区键)不一致。IB网络通过PKey实现分区隔离,若节点A的PKey与交换机端口PKey不匹配,即使链路状态为Active,数据包也会被丢弃。使用 ibping -P <pkey> 可以测试特定分区的连通性。在GPU集群中,通常为训练流量和管理流量划分不同分区,务必确保所有GPU节点加入同一个训练分区。