2、InfiniBand基础:InfiniBand架构、协议栈、关键术语(子网管理器、LID、GID等)

2.1 InfiniBand整体架构

InfiniBand(IB)是一种高性能、低延迟、高可靠性的互联技术,最初由InfiniBand贸易联盟(IBTA)于2000年前后标准化,广泛应用于高性能计算(HPC)、人工智能训练集群、存储网络以及数据中心场景。与以太网“无序、尽力而为”的设计哲学不同,IB从诞生起就面向通道化、有损可控、硬件卸载的通信模型。

IB网络在物理上由四类核心组件构成:端节点(Host Channel Adapter, HCA)、交换机(Switch)、链路(Link)以及子网管理器(Subnet Manager, SM)。HCA通常集成在服务器或存储设备上,负责将主机内存中的数据封装为IB报文;交换机负责在子网内根据LID转发数据;链路则定义了从1X到12X的物理宽度以及SDR、DDR、QDR、FDR、EDR、HDR、NDR等速率代际。

IB网络采用子网(Subnet)作为基本管理域。一个子网内可以包含多个交换机、多个端节点,但必须至少有一个活跃的子网管理器。子网之间通过路由器(Router)互联,路由器基于GID(全局ID)进行跨子网转发。这种“子网内LID交换、子网间GID路由”的两级寻址机制,是IB与以太网最本质的区别之一。

核心要点:IB不是简单的“更快的以太网”,而是一套完整的、面向消息传递的通道化架构。配置IB交换机前,必须理解“子网”是管理边界,“LID”是子网内通信地址,“GID”是跨子网通信地址。
子网 A(LID 子网) 子网 B(LID 子网) HCA 节点 LID=1, GID=fe80::1 交换机 A LID=3, 端口数=36 HCA 节点 LID=2, GID=fe80::2 子网管理器 SM 主控 HCA 节点 LID=1, GID=fe80::1 交换机 B LID=3 HCA 节点 LID=2, GID=fe80::2 路由器 GID 路由 HCA 端节点 交换机 子网管理器 路由器 LID 交换 GID 路由

2.2 IB协议栈与报文封装

IB协议栈采用分层模型,但不同于OSI七层模型,它更强调硬件卸载和直接内存访问(RDMA)。从下到上主要分为:物理层(Physical Layer)、链路层(Link Layer)、网络层(Network Layer)、传输层(Transport Layer)以及上层的软件协议(如IPoIB、SRP、SDP等)。

  • 物理层:定义电气特性、连接器(QSFP/OSFP)、链路速率(SDR 2.5Gbps/lane 至 NDR 200Gbps/lane)以及前向纠错(FEC)机制。
  • 链路层:负责子网内数据帧的传递,核心地址是LID(Local Identifier),同时负责流控(基于信用机制)和链路级错误检测(CRC)。
  • 网络层:负责跨子网路由,使用GID(Global Identifier)作为端到端地址。GID本质上是基于IPv6格式的128位地址,通常由子网前缀(64位)+ 端口GUID(64位)构成。
  • 传输层:提供可靠连接(RC)、不可靠连接(UC)、可靠数据报(RD)、不可靠数据报(UD)等传输服务,并负责报文分段、重组、多路复用。

IB报文在链路上传输时,会依次添加本地路由头(LRH)、全局路由头(GRH,仅跨子网时存在)、基础传输头(BTH)等。其中LRH包含源LID、目的LID、服务等级(SL)等关键字段;GRH包含源GID、目的GID;BTH则包含操作码(OpCode)、目的QP(队列对)号、分组序号(PSN)等。

IB 报文封装示意(跨子网场景):
+----------------+----------------+----------------+----------------+----------------+
|   LRH (12B)    |   GRH (40B)    |   BTH (12B)    |   Payload      |   ICRC/VCRC   |
| 源LID/目的LID  | 源GID/目的GID  | OpCode/QP/PSN  |  数据段        |  校验          |
+----------------+----------------+----------------+----------------+----------------+
|←—— 链路层 ——→|←—— 网络层 ——→|←—— 传输层 ——→|←—— 上层数据 ——→|←—— 链路层 ——→|

2.3 关键术语详解:SM、LID、GID、Q_Key等

在配置IB交换机时,以下术语出现的频率最高,理解不透彻极易导致配置错误或网络不通。

术语全称/含义作用域关键说明
SMSubnet Manager,子网管理器子网内负责发现拓扑、分配LID、计算路由表、配置交换机转发表。一个子网可有多个SM(主备),但同一时刻只有一个活跃SM。
LIDLocal Identifier,本地标识符子网内16位地址,由SM分配。范围1-0xBFFF可用于单播,0xC000-0xFFFF保留多播。交换机依靠LID转发数据帧。
GIDGlobal Identifier,全局标识符跨子网128位,格式为“子网前缀(64位):端口GUID(64位)”。子网前缀由SM配置,端口GUID出厂烧录。
GUIDGlobally Unique Identifier设备级64位,类似以太网MAC地址,出厂唯一。用于标识HCA、交换机端口等。
QPQueue Pair,队列对端节点通信的基本载体,由发送队列(SQ)和接收队列(RQ)组成。QP号是传输层寻址的关键。
Q_KeyQueue Pair Key端节点类似“访问密钥”,用于保护QP不被非法访问。通信双方必须匹配Q_Key。
P_KeyPartition Key,分区键子网内16位,用于隔离不同租户/业务。只有P_Key相同的端口才能通信,类似VLAN。
SLService Level,服务等级链路层4位,用于QoS和流控,可映射到不同虚拟通道(VL)。
记忆技巧:LID是“子网内的门牌号”,SM是“物业管理员”,GID是“跨小区的完整地址(小区号+门牌号)”,P_Key是“门禁卡权限”。

2.4 子网管理器的工作流程

理解SM的工作流程,对后续排查“节点无法上线”“LID冲突”等问题至关重要。SM启动后,会经历以下阶段:

  1. 发现(Discovery):SM通过发送管理数据报(MAD)扫描子网内所有交换机、HCA、路由器,收集它们的GUID、端口数、链路状态等信息。
  2. 分配LID:SM为每个端节点端口分配唯一的LID。如果节点配置了静态LID,SM会优先保留;否则从动态LID池中分配。
  3. 路由计算:SM根据拓扑结构计算从每个端节点到其他端节点的最优路径,生成交换机的线性转发表(LFT)。
  4. 下发配置:SM将LFT、P_Key表、SL映射等配置下发到各交换机,并激活端口。
  5. 持续监控:SM周期性地发送“SubnGet”等管理报文,监控链路状态变化。当拓扑变更(如新交换机接入)时,重新执行上述流程。
常见误区:很多初学者误以为IB交换机像以太网交换机一样“即插即用”,不需要任何管理。实际上,IB交换机在没有SM的情况下,所有数据端口都处于初始化(Initialization)状态,无法转发任何业务数据。因此,在IB网络中,必须先确保SM正常运行,再接入计算节点。

2.5 案例:一个典型的两层IB子网配置

假设某AI集群有8台GPU服务器(每台配1块HCA),通过2台36端口IB交换机(型号如NVIDIA Quantum QM8700)组成一个子网。规划如下:

  • 交换机1的端口1-8连接服务器1-4,交换机2的端口1-8连接服务器5-8。
  • 交换机1与交换机2之间使用4条链路做胖树(Fat-Tree)上行互联。
  • SM运行在服务器1上(也可运行在交换机控制模块上)。

配置完成后,通过ibstatus命令查看HCA状态,应看到类似输出:

InfiniBand device 'mlx5_0' port 1 status:
    state: ACTIVE
    physical state: LinkUp
    rate: 200 (HDR)
    base_lid: 0x01
    lmc: 0
    link_layer: InfiniBand

其中state: ACTIVE表示端口已由SM激活,base_lid: 0x01表示SM分配的LID为1。如果状态为INIT或ARM,则说明SM未正确下发配置或P_Key不匹配。

2.6 误区与复盘:LID冲突与P_Key隔离失效

场景一:LID冲突导致路由黑洞。某管理员手动为多台服务器配置了相同的静态LID(如LID=5),SM在发现阶段检测到冲突后,会拒绝激活其中一个端口,导致该节点无法通信。复盘结论:生产环境应尽量使用SM动态分配LID,除非有特殊QoS或路由策略需求,且必须通过sminfo和ibroute工具核对LID分配表。

场景二:P_Key配置不一致导致“能ping通但RDMA失败”。两个节点虽然IPoIB通信正常,但运行RDMA应用时连接超时。排查发现,节点A的P_Key为0xFFFF(默认全通),节点B的P_Key为0x8001,两者不匹配。复盘结论:P_Key是IB子网内隔离的关键,配置时必须确保通信双方以及交换机端口上的P_Key表完全一致。使用ibportstate命令可以查询端口P_Key表。

本节复盘清单:
  • IB子网必须存在活跃SM,否则交换机端口无法转发数据。
  • LID是子网内二层地址,由SM分配,范围1~0xBFFF。
  • GID是三层地址,用于跨子网路由,格式为“子网前缀:GUID”。
  • P_Key是分区隔离机制,类似以太网VLAN,配置不一致会导致通信失败。
  • 排查IB故障时,先看ibstatus确认端口状态,再用ibnetdiscover查看拓扑,最后用ibroute检查路由表。