IB网络基础:InfiniBand架构、协议栈、子网管理器(SM)与子网管理(SA)
核心原理:InfiniBand的体系架构与协议分层
InfiniBand(IB)是一种面向高性能计算(HPC)和AI训练集群的高带宽、低延迟、可扩展的网络互连技术。与以太网“尽力而为”的转发模型不同,IB从设计之初就强调端到端流控、可靠传输和内核旁路(Kernel Bypass)。其核心架构可抽象为三个平面:数据平面(负责实际报文转发)、控制平面(负责链路状态与路由计算)以及管理平面(负责子网配置与监控)。
IB协议栈采用分层模型,自下而上依次为:物理层(定义链路速率,如SDR/EDR/HDR/NDR)、链路层(负责流控、错误检测与链路级可靠性)、网络层(提供基于全局标识符GID的路由转发)、传输层(提供可靠连接RC、不可靠数据报UD等传输服务),以及上层的上层协议(如RDMA、IPoIB、SDP等)。其中,子网管理器(SM)运行在管理平面,负责整个子网的拓扑发现、路径计算与配置下发。
方法流程:SM/SA的启动与子网发现过程
当一个IB子网启动时,SM的初始化流程决定了整个集群的可用性。标准流程如下:
- 主SM选举:子网中可能存在多个SM(通常配置主备),通过子网管理接口(SMI)发送管理数据报(MAD)进行主从协商,优先级高且GUID小的SM成为主SM。
- 拓扑发现:主SM通过发送SubnGet(NodeInfo)、SubnGet(PortInfo)等管理报文,逐跳扫描所有交换机、CA(Channel Adapter,通道适配器)和路由器,构建完整的物理拓扑图。
- 路径计算:基于发现的拓扑,SM运行最短路径优先(SPF)算法(如Dijkstra),为每个源-目的对计算最优路径,并生成线性转发表(LFT)下发到各交换机。
- 配置下发:SM将LFT、端口状态、MTU、流控参数等通过SubnSet()操作写入每个交换机的管理代理(SwitchInfo)。
- SA服务注册:所有CA节点通过子网管理代理(SA)注册自身的服务ID(Service ID)和路径信息,供上层应用查询。
ibnetdiscover 命令可查看SM发现的拓扑;使用 ibstatus 可查看本端口的链路状态与速率。若SM未启动或选举失败,所有端口将停留在 Init 状态,无法进行数据通信。
案例/场景:GPU集群中的SM部署与冗余
以一个典型的8节点GPU训练集群为例(每节点8张A100 GPU,配置1张ConnectX-6 HDR网卡),网络拓扑通常为两层:2台核心交换机(Spine) + 4台叶交换机(Leaf)。SM的部署策略如下:
| 角色 | 节点位置 | 优先级 | 职责 |
|---|---|---|---|
| 主SM | Spine-1 | 8 | 负责全子网拓扑管理、路径计算、LFT下发 |
| 备SM-1 | Spine-2 | 4 | 主SM故障时接管,保持配置同步 |
| 备SM-2 | Leaf-1 | 2 | 作为第二级备份,防止双核心同时故障 |
在该场景中,SM不仅负责初始配置,还持续监控链路状态。当某条链路发生故障(如光模块损坏),SM会通过trap通知感知拓扑变化,重新计算路径并更新LFT,整个过程通常在50~200ms内完成,对上层RDMA应用影响极小。
误区/复盘:SM配置中的常见问题
Arming 状态。
复盘一个实际案例:某集群在扩容后,新增节点无法通信。排查发现,新交换机的端口状态始终为 Disabled,原因是SM的拓扑发现超时(默认5秒),未能识别新加入的交换机。解决方案是调整SM的discovery_timeout参数,并在扩容前手动触发一次 sm_reset 操作。
关键参数与命令速查
# 查看SM状态(主/备)
sm_query -s
# 查看端口链路状态
ibstatus
# 查看子网拓扑
ibnetdiscover
# 查看SA缓存的路径记录
saquery -p
# 强制重新发现拓扑(需root权限)
sm_reset