2. InfiniBand网络架构:子网管理器(SM)的角色与功能、子网代理(SA)的作用、InfiniBand协议栈分层

好,咱们进入正题。这一章聊的是InfiniBand网络的核心骨架——子网管理器、子网代理,还有协议栈分层。说实话,这三个概念你搞懂了,整个IB网络在你眼里就不再是黑盒子了。

2.1 子网管理器(SM)的角色与功能

子网管理器,简称SM。你可以把它想象成整个InfiniBand子网的“大脑”。没有它,所有端口都处于初始状态,连最基本的通信都建立不起来。

SM的核心职责是什么?

  • 发现网络拓扑:SM会主动扫描所有连接的节点、交换机、链路。它会问:“你是谁?你连在哪个端口上?”
  • 分配LID:每个端口都需要一个唯一的本地标识符(LID,16位地址)。SM负责分配,就像DHCP给电脑分IP一样。
  • 计算路由表:SM根据拓扑结构,为每个交换机计算转发表。数据包怎么走,全由这张表决定。
  • 监控链路状态:SM会定期检查链路是否健康。一旦发现链路断了,它会重新计算路由,绕过故障点。
  • 处理事件:比如新节点加入、链路恢复、端口状态变化,SM都要响应。

重要概念:主SM与备用SM

一个子网里可以有多个SM实例,但只有一个处于“主SM”状态,其他的都是“备用SM”。主SM挂了,备用SM会接管。我在项目中遇到过主SM进程意外崩溃,备用SM在几秒内就完成了切换,业务几乎无感知。嗯,这里要注意:备用SM的配置必须和主SM保持一致,否则切换后路由可能乱掉。

个人经验:我建议在生产环境中至少部署两个SM,分别跑在不同的物理服务器上。我曾经见过一个客户只部署了一个SM,结果服务器重启后网络瘫痪了半小时——因为SM没来得及启动,所有端口都处于初始状态。

2.2 子网代理(SA)的作用

子网代理,简称SA。它和SM是“搭档”关系。SM负责管理,SA负责“服务”。

SA到底干什么?

  • 提供查询服务:终端节点(比如HCA)想知道某个端口的LID、路径信息,就向SA发查询请求。SA从SM维护的数据库里查出来返回。
  • 路径记录服务:应用程序可以通过SA获取两个节点之间的最佳路径。这在MPI通信中特别常用。
  • 多播管理:SA负责管理多播组的创建、加入、离开。比如一个集群要广播数据,SA会分配多播LID。
  • 服务记录:SA维护一个服务名称到端口的映射表。应用程序可以通过名称找到对应的服务。

说白了,SM是“后台管理者”,SA是“前台服务员”。节点有问题,先找SA;SA搞不定,再找SM。

避坑指南:我曾经遇到一个性能问题,MPI通信延迟突然飙升。排查了半天,发现是SA查询超时导致的。原因是SA的数据库太大,查询响应变慢。解决方案是优化SA的缓存策略,把频繁查询的路径记录缓存起来。记住:SA的性能直接影响通信建立的速度。

2.3 InfiniBand协议栈分层

InfiniBand的协议栈分四层。你想想看,每一层各司其职,就像TCP/IP协议栈一样。但IB的设计更偏向高性能计算场景。

层次 名称 主要功能
第1层 物理层 定义电气特性、信号速率、连接器类型(比如QSFP)、链路宽度(1x、4x、8x、12x)
第2层 链路层 负责数据包封装、流控、错误检测(CRC)、LID寻址、交换机转发
第3层 网络层 全局路由(GRH)、跨子网通信、IPoIB封装
第4层 传输层 提供可靠连接(RC)、不可靠数据报(UD)、可靠数据报(RD)、带外管理(MAD)

物理层:说白了就是线缆和光模块。IB支持铜缆和光缆,速率从SDR(2.5Gbps)到NDR(400Gbps)都有。我个人习惯在机柜内用铜缆,跨机柜用光缆——铜缆便宜但距离短,光缆贵但能跑几十米。

链路层:这是最核心的一层。数据包在这里被封装成“链路层数据包”,包含源LID、目的LID、虚拟通道(VL)等信息。交换机根据LID做转发。流控机制叫“基于信用的流控”,简单说就是接收方告诉发送方:“我还有多少缓冲区,你继续发吧。” 嗯,这个机制能有效防止丢包。

网络层:当数据需要跨子网传输时,网络层就登场了。它使用全局路由头(GRH),包含128位的GID(全局标识符)。GID由子网前缀和端口GUID组成。我记得有一次调试跨子网通信,发现GID配置错了,导致数据包被丢弃。排查了半天,最后用ibstatus命令一看,子网前缀不对。

传输层:这一层决定了通信的可靠性。最常用的是RC(可靠连接),它保证数据按序到达、不丢包。UD(不可靠数据报)则用于广播或多播场景。MAD(管理数据报)是SM和SA用来交换管理信息的专用通道。

协议栈交互示例:当HCA发送数据时,数据从传输层往下走,每层加上自己的头部。接收方从物理层往上走,每层剥掉头部。整个过程是透明的,应用程序只看到传输层提供的接口。

2.4 小结

这一章的内容其实就三个关键词:SM管全局、SA管服务、协议栈分层。SM和SA是IB网络的管理核心,协议栈是数据流动的通道。你想想看,没有SM,网络就是一盘散沙;没有SA,节点就是瞎子;没有协议栈分层,数据就没法有序传输。

下一章我们会深入SM的启动流程和配置细节。到时候我会分享一些实际部署中的踩坑经验,比如SM启动顺序不对导致的路由黑洞问题。嗯,敬请期待。