3、子网管理器概述:SM的功能、类型(主备、独立)与子网管理代理(SMA)的交互

3.1 核心原理:SM 是什么,为什么需要它

InfiniBand(IB)网络与以太网最大的区别之一,在于其转发行为不是由交换机自主决定的。IB 交换机是“被动”设备,它们本身不运行路由协议,也不学习 MAC 地址。所有端口的状态、路径转发规则、分区(P_Key)过滤表,都必须由外部一个集中式的控制实体统一下发。这个实体就是子网管理器(Subnet Manager,SM)。

SM 的逻辑位置通常运行在某个计算节点(如管理服务器)或专用交换机控制模块上。它通过子网管理接口(SMI)发送管理数据报(MAD),完成对子网内所有节点的发现、配置和监控。可以这样理解:IB 子网是“身体”,SM 是“大脑”。没有 SM 的 IB 子网,所有端口即使物理链路是 UP 的,也无法进行数据通信。

核心职责速览:

  • 发现(Discovery): 扫描子网内所有交换机、CA(Channel Adapter,通道适配器)和路由器。
  • 配置(Configuration): 为每个端口分配本地标识符(LID),建立线性转发表(LFT)和分区表。
  • 计算(Routing): 基于最短路径算法(通常为 Dijkstra)计算所有端到端的路径。
  • 监控(Monitoring): 持续跟踪链路状态变化,对故障链路进行重路由或端口禁用。

下图展示了 SM 在子网中的核心控制位置,以及它与交换机、CA 的从属关系:

子网管理器 (SM) 运行于管理节点/控制模块 SMA (交换机A) 端口状态/LFT SMA (交换机B) 端口状态/LFT SMA (CA节点) LID/分区表 数据包转发 数据包转发 数据包转发 管理指令 (MAD) 状态上报 (Notice) 关键点: • SM 通过 SMI 发送 MAD 管理报文,SMA 是每个节点上的代理,负责执行 SM 的指令并上报状态。 • 数据包转发路径由 SM 计算并下发,交换机本身不参与路径计算。

3.2 方法流程:SM 的类型与主备切换机制

在实际部署中,SM 并非只能运行一份。为了保证子网的可用性,IB 规范定义了主备(Master/Standby)机制。同时,根据 SM 是否与子网内其他业务共用主机,又可分为独立 SM 与集成 SM。

3.2.1 SM 的三种运行类型

类型 部署位置 优点 缺点
独立 SM 专用物理服务器或管理网段 性能不受业务干扰,故障隔离性好 额外硬件成本,需单独维护
集成 SM 运行在存储网关或计算节点上 节省硬件,部署灵活 与业务争抢 CPU/内存,SM 故障影响面大
主备 SM 至少两台节点同时运行 SM 实例 高可用,自动故障切换 需配置优先级,避免“脑裂”

3.2.2 主备协商与切换流程

IB 子网中,每个 SM 实例都有一个优先级(Priority)属性(0~15,数值越大优先级越高)。当多个 SM 同时存在时,通过 SM 握手(SM Handshake)过程确定谁是 Master。流程如下:

  1. 启动发现: 所有 SM 启动后,先扫描子网,互相发现对方的存在。
  2. 主从协商: 每个 SM 发送包含自身优先级的 SubnGet(SMInfo) 报文。优先级最高的 SM 成为 Master,其余自动进入 Standby 状态。
  3. 主 SM 接管: Master SM 开始执行全量发现和路径计算,并下发配置。
  4. 备份监听: Standby SM 不主动下发配置,但持续监听 Master 的心跳(Heartbeat)。
  5. 故障切换: 若 Standby 在超时时间(通常为 1.5 秒)内未收到 Master 的心跳,则重新发起选举,优先级最高的 Standby 提升为新的 Master。

实操提示: 使用 ibstat 或 sminfo 命令可以查看当前 SM 的状态。例如:

# 查看当前 SM 状态
ibstat | grep -i sm
# 输出示例
SM state: 4 (MASTER)
SM lid: 2
SM sl: 0

3.3 案例/场景:双 SM 配置实战

假设某 HPC 集群有 64 个计算节点和 8 台交换机,需要配置高可用 SM。推荐方案是使用两台管理节点,分别运行 OpenSM(最常见的开源 SM 实现)。

配置步骤:

# 节点1(主 SM)配置
opensm -g 0x0011750000010001 -p 10001 -P 15 -B

# 节点2(备 SM)配置
opensm -g 0x0011750000010002 -p 10002 -P 10 -B

参数说明:

  • -g:指定 SM 的 GUID(全局唯一标识符)。
  • -p:指定监听端口。
  • -P:指定优先级,节点1为 15(最高),节点2为 10。
  • -B:后台运行。

当节点1宕机时,节点2 的 OpenSM 会在约 2 秒内检测到 Master 丢失,自动提升为 Master。此时,所有交换机端口会重新向新 Master 发送 SubnGet 请求,完成重配置。整个切换过程对上层应用是透明的,但会造成短暂的路径重算(通常小于 5 秒)。

常见误区: 不要将两个 SM 的优先级配置为相同值。如果相同,系统会依据 GUID 大小决定 Master,这可能导致你预期的“主”节点没有成为 Master。务必显式设置不同的优先级。

3.4 误区/复盘:SM 与 SMA 交互中的典型问题

SM 与 SMA 的交互是子网管理的核心链路,但在实际运维中,以下问题经常出现:

3.4.1 误区一:混淆 SM 与 SMA 的角色

SMA(子网管理代理)是每个 IB 节点(包括交换机、CA)上的一个逻辑代理,它负责响应 SM 的查询和设置请求。SMA 是被动组件,它不会主动发起管理操作。而 SM 是主动的、全局的。如果混淆两者,容易在排障时找错对象——例如,当某个端口无法通信时,应该检查 SM 是否下发了正确的 LFT,而不是去检查 SMA 是否“自己算错了路径”。

3.4.2 误区二:忽略 SMA 的响应超时

SM 通过 SMI 向 SMA 发送 MAD 请求时,如果 SMA 所在节点负载过高(例如计算节点正在运行大规模 MPI 任务),可能导致 SMA 响应延迟。SM 默认的超时时间较短(通常为 200ms),如果连续多次超时,SM 会认为该节点已离线,从而将其从转发路径中移除。这会导致非物理故障的业务中断。

复盘建议: 在高负载计算节点上,适当调大 SM 的超时参数。OpenSM 中可通过 -t 参数调整:

# 将超时时间调整为 500ms
opensm -t 500 -P 15 -B

3.4.3 误区三:主备切换后配置未同步

当 Standby SM 提升为 Master 后,它会重新执行全量发现。如果原 Master 曾手动修改过某些端口配置(如禁用某端口),这些修改不会自动同步到 Standby。新 Master 会基于自己的配置数据库重新计算,可能导致原手动配置丢失。

解决方案: 使用 OpenSM 的 -f 选项指定配置文件,并确保主备 SM 使用相同的配置文件。同时,定期备份 SM 的配置数据库。

排障命令 作用 典型输出
ibswitches 列出子网内所有交换机 显示交换机 GUID、LID、端口数
ibqueryerrors 查询端口错误计数 显示 CRC 错误、链路恢复次数
sminfo 查看 SM 状态和优先级 显示 SM 版本、状态、LID

通过以上对 SM 功能、类型及与 SMA 交互机制的梳理,可以看到 SM 在 IB 子网中处于绝对的控制核心地位。理解其主备协商逻辑和 SMA 的被动代理特性,是后续进行子网配置、性能调优和故障定位的基础。在实际操作中,务必通过 ibstat、sminfo 等工具确认当前 SM 的运行状态,避免因角色误判导致错误的操作方向。