第二章:InfiniBand网络核心概念

各位同学,欢迎来到第二章。这一章我们要啃的,是InfiniBand网络最核心的几个概念。说实话,这些概念刚接触时会觉得有点绕,但一旦搞懂了,整个InfiniBand的架构在你眼里就会变得透亮。

我个人习惯把这一章叫做「地基章节」。为什么?因为后面讲的所有东西——性能调优、网络规划、故障排查——都建立在这些概念之上。你想想看,如果连子网管理器是干什么的都不清楚,那出了问题你连日志都看不懂。

2.1 子网管理器(SM)

子网管理器,简称SM。这是InfiniBand网络的大脑,也是整个网络里唯一有「全局视野」的组件。

SM的核心职责是什么?说白了就两件事:发现拓扑计算路由

网络启动时,SM会通过一系列管理数据包,把网络里所有的交换机、HCA、链路都扫描一遍。然后它会在内存里构建出一张完整的拓扑图。接着,它根据这张图,为每个端口计算出最优的路径。

重要:SM不是硬件,它是一个软件模块。它可以运行在交换机上,也可以运行在专用的管理节点上。我见过不少新手以为SM是交换机里的一个芯片,其实不是。

我在项目中遇到过一件事。有一次客户网络莫名其妙地丢包,查了两天没头绪。后来我登录到SM节点一看,发现SM的主备切换出了问题——主SM挂了,备SM没接管。结果整个网络处于「无SM」状态,所有交换机都在用旧的路由表。嗯,从那以后我养成了一个习惯:每次部署完,第一件事就是检查SM的主备状态。

SM的主备机制

一个InfiniBand子网里可以有多个SM,但只有一个是Master,其余都是Standby。Master挂了,Standby会立刻接管。切换时间通常在几秒内。

这里有个坑:SM的选举算法。默认情况下,优先级高的SM会成为Master。如果所有SM优先级一样,那就看GUID,小的那个胜出。我曾经遇到过两个SM优先级设成一样,结果每次重启后Master都不一样,导致路由表频繁变化。后来我统一把主SM优先级设成8,备SM设成4,问题就解决了。

2.2 通道适配器(HCA/TCA)

通道适配器,就是InfiniBand网络里的网卡。但和普通网卡不一样,它直接挂在CPU的PCIe总线上,走的是RDMA协议。

HCA(Host Channel Adapter)是给服务器用的,TCA(Target Channel Adapter)是给存储设备用的。两者本质上是一样的芯片,只是固件配置不同。

小技巧:买HCA的时候,别只看带宽。还要看端口数、PCIe版本、以及是否支持RoCE。我踩过坑——买了40Gbps的HCA,结果服务器只有PCIe 3.0 x8,实际只能跑到32Gbps。

HCA内部有个关键组件叫QP(Queue Pair)。每个QP由发送队列和接收队列组成。应用程序通过QP发送和接收数据。一个HCA可以支持成千上万个QP。

我记得刚接触InfiniBand时,总觉得QP这个概念很抽象。后来我把它理解成「网络连接的一个端点」。每个QP都有一个唯一的编号,通信双方通过这个编号来识别对方。

2.3 交换机

InfiniBand交换机和以太网交换机最大的区别是什么?无丢包

InfiniBand交换机内部有完善的流控机制。当某个端口拥塞时,它会通过链路层的信用机制,让上游设备暂停发送。这样就不会丢包。而以太网交换机遇到拥塞,直接就把包丢了。

交换机的核心参数有这几个:

  • 端口数:常见的有36口、48口、64口
  • 端口速率:EDR(100Gbps)、HDR(200Gbps)、NDR(400Gbps)
  • 延迟:通常在100-200纳秒之间
  • 内部带宽:决定了能否做到线速转发

注意:交换机的端口速率和实际有效带宽是两回事。EDR标称100Gbps,但实际有效带宽大约在96Gbps左右。因为链路层有开销。

2.4 链路与端口

链路就是连接两个端口的那根线。InfiniBand链路可以是铜缆,也可以是光纤。铜缆便宜但距离短(最长5米),光纤贵但可以到100米以上。

端口是链路的端点。每个端口都有一个唯一的LID(Local Identifier),由SM分配。LID是16位的,范围从0x0001到0xBFFF。SM在启动时会给每个端口分配一个LID。

这里有个细节:端口状态。端口有四个状态:Down、Init、Arm、Active。只有到了Active状态,才能正常收发数据。我排查问题时,第一步就是看端口状态。如果某个端口卡在Init状态,那多半是链路层协商出了问题。

2.5 虚拟通道(VL)

虚拟通道,简称VL。这是InfiniBand实现QoS的核心机制。

一条物理链路上可以跑多个VL,每个VL是独立的逻辑通道。数据包在发送时,会被打上VL标签。交换机根据这个标签,把数据包放到对应的VL队列里。

VL的数量是固定的:

链路速率 最大VL数
SDR/DDR/QDR 4
FDR/EDR 8
HDR/NDR 8

VL0是默认通道,所有控制报文都走VL0。VL1到VL7给数据报文用。

我建议你在规划网络时,把不同业务分配到不同的VL上。比如:存储流量走VL1,计算流量走VL2,管理流量走VL3。这样即使某个VL拥塞,也不会影响其他业务。

2.6 服务等级(SL)

服务等级,简称SL。它和VL是绑定的。

SL是一个4位的值,范围从0到15。每个SL可以映射到一个VL。SM在计算路由时,会为每个SL生成独立的转发表。

为什么要搞SL?因为不同的应用对网络的要求不一样。比如:

  • MPI通信:需要低延迟,可以映射到高优先级的VL
  • 文件存储:需要高吞吐,可以映射到大缓冲区的VL
  • 管理流量:需要可靠,可以映射到控制通道VL0

核心关系:SL决定路由,VL决定优先级。同一个SL的数据包,走的是同一条路径。但不同SL的数据包,可以走不同的路径。

我在实际项目中,通常会给MPI流量分配SL=0,映射到VL1;给存储流量分配SL=1,映射到VL2。这样MPI的延迟敏感流量和存储的吞吐敏感流量互不干扰。

2.7 这些概念怎么串起来?

好,我们把这些概念串起来,看看一个数据包从发送到接收的完整流程:

  1. 应用程序通过HCA的QP发送数据
  2. HCA给数据包打上SL标签(比如SL=0)
  3. 数据包进入发送端口的VL队列(根据SL到VL的映射)
  4. 经过链路,到达交换机端口
  5. 交换机根据SL查询转发表,决定从哪个端口转发
  6. 数据包进入交换机端口的VL队列
  7. 最终到达接收端的HCA

整个过程,SM在背后负责路由计算和拓扑管理。没有SM,交换机不知道把数据包往哪送。

一句话总结:SM是大脑,HCA是手脚,交换机是血管,VL和SL是交通规则。

好了,这一章的内容就到这里。下一章我们会深入SM的配置和调优,到时候我会带大家手把手搭建一个InfiniBand子网。记住,这些概念是后面所有内容的基础,搞不懂的话,后面会越学越吃力。

有什么问题,欢迎在课程群里讨论。我们下章见。