第一章:InfiniBand网络基础
各位同学好,我是老张。在AI集群里摸爬滚打了十来年,今天咱们聊聊InfiniBand网络的基础。说实话,很多人一上来就追着性能调优跑,结果连HCA和交换机的基本区别都搞混——嗯,这坑我当年也踩过。
1.1 IB网络架构概述
InfiniBand,说白了就是一套为高性能计算量身定做的互联方案。它跟以太网最大的区别在哪?我个人的理解是:以太网是“尽力而为”,IB是“说到做到”。
整个IB网络架构,你可以想象成一个三层结构:
- HCA(主机通道适配器):相当于服务器里的网卡,但比普通网卡聪明得多。它自己就能处理协议栈,不占用CPU。
- 交换机:负责数据包的转发。IB交换机跟以太网交换机不一样,它用的是子网管理器(Subnet Manager)来管理路径。
- 链路:连接HCA和交换机的物理通道。常见的有4x和12x两种宽度。
我记得第一次搭IB集群时,总觉得这玩意儿跟以太网差不多。结果一跑起来,延迟直接差了两个数量级——当时我就服了。
1.2 HCA与交换机
先说说HCA。这东西全名叫Host Channel Adapter,你可以把它理解成一张“智能网卡”。为什么说它智能?因为它支持RDMA(远程直接内存访问)。什么意思呢?就是数据可以从一台机器的内存直接搬到另一台机器的内存里,完全绕过CPU。
核心要点:HCA内部有自己的处理器和内存,能独立完成协议处理。这跟普通网卡需要CPU帮忙处理TCP/IP协议栈完全不同。
我在项目中遇到过一件事:有个同事死活调不通RDMA,查了三天发现是HCA的固件版本跟驱动不匹配。嗯,这种低级错误其实挺常见的——所以我的习惯是,每次部署前先检查固件版本。
再来看交换机。IB交换机跟以太网交换机最大的区别在于:它没有STP(生成树协议),也不靠MAC地址学习。它用的是子网管理器来维护整个网络的拓扑信息。
| 特性 | IB交换机 | 以太网交换机 |
|---|---|---|
| 路径计算 | 子网管理器集中计算 | 分布式路由协议 |
| 流控机制 | 基于信用的流控 | 暂停帧/优先级流控 |
| 拥塞管理 | FECN/BECN | ECN |
你想想看,子网管理器这东西有多重要?它负责发现所有设备、分配LID(本地标识符)、计算最优路径。如果子网管理器挂了,整个IB网络就瘫痪了。所以我一般会部署两个子网管理器做主备。
小技巧:用 ibstat 命令可以快速查看HCA的状态。如果看到状态是“LinkUp”,说明物理连接没问题。如果显示“Init”或者“Down”,那就得检查线缆和端口了。
1.3 链路层与网络层协议
IB的协议栈分好几层,但咱们做性能优化的,重点看两层:链路层和网络层。
链路层
链路层负责的是数据包的可靠传输。IB的链路层用了基于信用的流控机制。什么意思呢?就是发送方必须先拿到接收方的“信用额度”,才能发数据。如果信用不够,就得等着。
为什么会这样设计?说白了就是为了避免丢包。以太网是靠丢包来通知拥塞的,但IB不行——因为RDMA对丢包零容忍。一旦丢包,整个传输就得重来,性能直接崩掉。
注意:我曾经遇到过一个问题:某个节点的HCA老是报“credit starvation”错误。查了半天,发现是交换机端口配置了错误的缓冲区大小。所以,调优时千万别忽略缓冲区参数的设置。
链路层还定义了数据包格式。IB的数据包叫“LRH(Local Routing Header)”,里面包含了源LID、目的LID、VL(虚拟通道)等信息。VL是个好东西,它允许你在一条物理链路上跑多个逻辑通道,每个通道可以有不同的优先级。
网络层
网络层负责的是跨子网通信。IB的网络层用的是GRH(Global Routing Header),它包含了128位的GID(全局标识符)。GID说白了就是IP地址的IB版本。
这里有个容易混淆的地方:LID是本地有效的,只在同一个子网内使用。GID是全局有效的,可以跨子网路由。我刚开始学的时候,老是把这两个搞混——后来干脆记了个口诀:“LID本地用,GID全球通”。
网络层还支持多路径。什么意思呢?就是同一个数据流可以走不同的物理路径。这在以太网里很难实现,但在IB里是原生支持的。你想想看,这对AI训练有多重要?多路径意味着更高的带宽利用率和更好的容错性。
# 查看当前IB网络的LID分配情况
ibnetdiscover | grep -E "LID|HCA|Switch"
# 查看GID表
show_gids
# 检查子网管理器状态
smquery -c
我个人习惯在部署完IB网络后,先用 ibnetdiscover 扫一遍拓扑。如果发现某个节点没出现,那八成是线缆或者HCA有问题。别问我怎么知道的——都是血泪教训。
小结
好了,这一章咱们把IB网络的基础过了一遍。从架构到HCA,从交换机到协议栈,说白了就是一句话:IB是为高性能而生的,它的每一个设计都在追求低延迟和高带宽。下一章咱们会深入聊聊RDMA的具体实现,到时候你会发现,这些基础知识全都能用上。
嗯,今天就到这儿。有问题随时找我,咱们下章见。