🚀 欢迎来到「数据中心网络与异构计算」专栏!        

        在这个算力定义未来的时代,我们正见证一场从底层网络到计算架构的深刻变革。本专栏将带您穿越技术迷雾,从当前困境出发,历经三次关键技术跃迁,最终抵达「数据中心即计算机」的终极愿景。

专栏导航:《数据中心网络与异构计算:从瓶颈突破到架构革命》https://blog.csdn.net/apple_53311083/article/details/152372997?sharetype=blogdetail&sharerId=152372997&sharerefer=PC&sharesource=apple_53311083&spm=1011.2480.3001.8118


目录

一、报文的基础结构:数据传输的 “快递包裹”​

1.1 三段式核心结构​

1.2 关键头部的适用场景差异​

二、IB 网络模型

2.1 物理层:数据传输的 “基础设施”

2.2 链路层:子网内的 “交通指挥员”

2.3 网络层:跨子网的 “国际快递系统”

2.4 传输层:端到端的 “包裹保镖”

2.5 高层:应用与硬件的 “桥梁”

三、数据包的 “一生”:RDMA Write 操作的全链路透视

四、总结:六层协同的 “高性能密码” 与系列回顾


        当我们讨论 InfiniBand 的高性能时,往往聚焦于 “低延迟”“高带宽” 这些宏观特性,却容易忽略一个关键问题:一块从 GPU 内存中读取的参数数据,如何穿越复杂的网络,精准、高效地抵达另一台服务器的 GPU 内存?这个过程就像一封信件从写信人手中寄出,要经过信封封装、填写地址、分拣、运输,最终才能被收件人拆封阅读 ——InfiniBand 的 “六层网络模型”,正是这套 “数据传输流程” 的标准化框架。

        我们早已熟悉 OSI 七层模型的 “理论框架” 与 TCP/IP 五层模型的 “实用简化”,但 InfiniBand 的六层模型并非对传统模型的简单模仿,而是为 “高性能、高可靠、低 CPU 开销” 量身定制的架构。它从物理线路的比特传输到应用层的指令调用,每一层都承担着明确的职责,且通过硬件卸载实现 “全链路高效协同”。

一、报文的基础结构:数据传输的 “快递包裹”​

        在深入六层模型前,需先明确 InfiniBand 报文的核心构成 —— 它是 CA(主机通道适配器)间传输请求(request)或响应(response)信号的最小单元,所有上层操作(Send/Recv、RDMA 读写、原子操作)最终都需拆解为报文传输。IB 报文遵循 “头部(Header)+ 有效荷载(Payload)+ CRC 校验” 的三段式结构,且每个部分都有严格的规格定义,确保数据精准、可靠传输。​

1.1 三段式核心结构​

  • 有效荷载(Payload):实际待传输的业务数据或控制指令(如 RDMA 读请求)。IBA 标准明确规定,单个报文的 Payload 最大长度为 4KB —— 若待传输数据超过 4KB(如 16KB 的模型参数),需将数据切分为多个 4KB 片段,每个片段封装为独立报文,待所有报文到达目标 CA 后,由 HCA 硬件自动重组为完整数据,避免软件分片的延迟开销。​
  • 头部(Header):报文的 “地址标签与操作说明”,负责告知网络 “数据要去哪、是什么类型、如何处理”,包含三类关键子头部,需根据传输场景(子网内 / 跨子网)灵活组合
  • 校验:报文的 “安全安检码”,由发送端 HCA 计算生成。接收端 HCA 接收报文后,重新计算并与报文携带的校验码比对,若不一致则判定数据损坏,丢弃报文并触发重传,确保数据完整性。​

        其中头部主要包含有:

  • 本地路由头部(LRH):用于子网内寻址,长度 8 字节,核心字段为目标端口本地 ID(DLID) 与源端口本地 ID(SLID),两者均占 16 位(2 字节)。DLID 表示报文需到达的 “目标 CA 端口子网内标识”(由 SM 动态分配),SLID 表示 “源 CA 端口子网内标识”,交换机通过 DLID 查询转发表(LFT)确定转发路径。​
  • 全局路由头部(GRH):用于跨子网寻址,长度 40 字节,核心字段为目标端口全局 ID(DGID) 与源端口全局 ID(SGID),两者均占 128 位(16 字节)。结构上分为 “高 64 位子网 ID” 与 “低 64 位端口 GUID”:子网 ID 标识不同 IB 子网(如北京机房子网 ID 0x0001),GUID 是 CA 端口的硬件固有唯一标识(厂商烧录),路由器通过子网 ID 确定跨子网转发路径。​
  • 基础传输头部(BTH):所有报文必含,长度 12 字节,核心字段包括Opcode(操作码,8 位)、DestQP(目标队列对,24 位)、PSN(报文序列号,24 位)。Opcode 标识操作类型(如 0x01=RDMA Write 请求、0x02=RDMA Read 请求),DestQP 指定报文需交付的目标 QP(通信端点),PSN 用于校验报文顺序与触发重传。​

1.2 关键头部的适用场景差异​

        LRH 与 GRH 并非同时存在,而是根据传输范围分工:​

        (1)当在子网内通信(如同一机房两台服务器 CA 交互):仅需 LRH —— 交换机通过 DLID 快速转发,无需全局寻址,延迟更低(微秒级);(2)当需要进行跨子网通信(如北京与上海机房 CA 交互)时:需同时包含 LRH 与 GRH —— 源子网交换机通过 LRH 将报文转发至边界路由器,路由器通过 GRH 的子网 ID 转发至目标子网,目标子网交换机再通过 LRH 完成最后一公里投递,类似 “同城快递→跨城物流→同城快递” 的流程。​

二、IB 网络模型

  • 上层协议层:软件应用或驱动传输数据所在层,负责发送与接收请求,完成传输或发生错误将报告给verb层或传输层;
  • Verb层:软件应用调用函数层,它提供的抽象是内存区域和队列对。程序员关心的是“将数据放到远程的那个内存地址”,这是一种内存语义。
  • 传输层:负责在QP间发送接收信息,拆分multiple packet任务;服务是轻量级的,因为可靠性在链路层得到了保证。主要职责是管理端到端的上下文(如队列对)。RDMA操作是建立在IB的传输层之上的,由网卡硬件直接执行。
  • 网络层:路由器中网络层负责使用GRH处理不同子网间的包;在CA发送侧中,负责插入GRH与转发;CA接收侧负责检测是否是ipv6包,GID是否正确;
  • 链路层:链路层负责通过fabric发送接收数据,建立在packet级别,而非message级别。在传输过程中,链路层从网络层接收数据包,并使用传输层提供的源路径位将正确的端口LID地址插入到数据包的LRH。基于信用的流量控制。 接收方主动告知发送方自己有多少空闲缓冲区(信用),发送方有信用才能发送。从源头杜绝了拥塞丢包,实现了真正的无损网络。链路层是绝对可靠、无损的。
  • 物理层:物理层主要是完成编码,符号对齐,串行化serdes等功能,使信息在IBA fabric上传输;使用专用的IB线缆和光模块(外观与高速以太网相似)。其电气信号和编码方式是独立的

2.1 物理层:数据传输的 “基础设施”

        物理层是 InfiniBand 网络的 “硬件基石”,它定义了数据如何以 “比特流” 的形式在物理介质中传输,就像公路系统中的 “路面材质”“车道宽度”“交通信号灯电压” 等底层规范。其核心职责是 “确保比特的准确发送与接收”,主要涵盖三个关键维度:

        首先是物理介质与连接器。InfiniBand 支持铜缆与光纤两种介质:短距离(如机柜内、机柜间)通常使用铜缆(如 QSFP-DD、OSFP 接口的 DAC 高速线缆),传输距离可达数米,成本较低;长距离(如跨机房、数据中心间)则采用光纤(搭配光模块),传输距离从数十米到数公里不等,适合大规模集群部署。不同介质对应不同的 “链路信号完整性” 设计,例如铜缆需解决信号衰减与串扰问题,光纤则需优化光信号的调制与解调效率。

        其次是链路速度与编码方案。InfiniBand 的速度演进遵循 “每代翻倍” 的规律:从早期的 SDR(2.5Gbps)、DDR(5Gbps),到主流的 EDR(25Gbps)、HDR(50Gbps),再到当前的 NDR(100Gbps)与未来的 XDR(200Gbps),这里的速度指 “单链路单向速率”—— 通过 “链路聚合”(如 4x 链路、12x 链路),单端口带宽可轻松突破 1TB/s。为提升带宽利用率,InfiniBand 采用 “8b/10b”“64b/66b” 等编码方案:8b/10b 编码将 8 位数据扩展为 10 位传输,虽损失 20% 带宽,但能保证信号同步与错误检测;64b/66b 编码则仅损失 3% 带宽,更适合高带宽场景(如 HDR 及以上),是平衡 “带宽效率” 与 “信号可靠性” 的关键设计。

        最后是物理层协议交互。发送端与接收端在传输数据前,会通过 “链路训练” 过程协商链路速度、编码方式、链路宽度等参数:发送端先发送 “训练序列”,接收端根据序列质量调整接收增益与均衡器参数,待双方参数匹配且信号质量达标后,链路进入 “活跃状态”;传输过程中,物理层还会实时监测信号质量,若发现错误(如比特翻转),会通过 “链路错误信号” 通知上层,触发重传或链路重置,确保比特级传输的准确性。

2.2 链路层:子网内的 “交通指挥员”

        如果说物理层是 “公路路面”,那么链路层就是 “市内交通管理系统”—— 它负责 InfiniBand 子网内(如一个机房的集群)数据包的 “寻址、转发与流量控制”,核心是基于 “本地标识符(LID)” 实现高效的子网内通信,同时通过虚拟通道与服务级别保障传输质量。

        链路层的核心职责之一是LID 寻址与转发表维护。在 InfiniBand 子网中,每个设备(服务器的 HCA 端口、交换机端口、存储的 TCA 端口)都会被子网管理器(SM)分配一个唯一的 16 位 LID(本地标识符),相当于 “市内门牌号”。交换机的每个端口都维护着一张 “LID 转发表(LFT)”,表中记录 “目标 LID 对应的出端口”—— 当数据包到达交换机时,链路层会提取数据包头部的 “目标 LID”,查询 LFT 后将数据包转发到对应端口,整个过程由硬件完成,延迟仅数十纳秒。这种 “基于 LID 的硬件转发”,是 InfiniBand 子网内低延迟通信的关键。

        另一个核心设计是虚拟通道(VL)与服务级别(SL)。虚拟通道相当于在一条物理链路上划分出 “多条独立的虚拟链路”,不同 VL 的数据包在传输时互不干扰 —— 例如,可将 AI 训练的参数同步流量分配到 VL0,将存储 IO 流量分配到 VL1,避免某类流量拥塞导致其他流量延迟飙升。服务级别(SL)则是 “流量优先级的标记”,应用程序在发送数据包时,会为其指定 0-15 的 SL 值;交换机通过 “SL-VL 映射表”,将不同 SL 的数据包映射到对应的 VL,实现 “高优先级流量优先传输”。这种设计不仅解决了 “流量隔离与 QoS 保障” 问题,还能避免 “死锁”—— 通过为不同方向的流量分配不同 VL,防止数据包在交换机中相互等待导致的传输停滞。

        此外,链路层还负责数据包的封装与解封装。它会在物理层比特流的基础上,添加 “链路层头部”,包含目标 LID、源 LID、VL、SL、数据包长度、CRC 校验等信息:目标 LID 与源 LID 用于寻址,VL 与 SL 用于流量控制,CRC 校验用于检测数据包在传输过程中的错误;接收端链路层解封装后,会先验证 CRC,若无误则提取 LID 与上层数据,若有误则丢弃数据包并通知发送端重传。这种 “链路层硬件校验”,进一步降低了 CPU 参与错误处理的开销。

2.3 网络层:跨子网的 “国际快递系统”

        当数据包需要从一个 InfiniBand 子网传输到另一个子网(如跨机房、跨区域集群)时,链路层的 LID 寻址就会 “失效”—— 因为 LID 仅在子网内唯一,不同子网可能存在相同的 LID。此时,网络层就承担起 “跨子网路由” 的职责,它相当于 “国际快递系统”,通过 “全局唯一标识符(GID)” 实现数据包的 “跨子网定位”,是 InfiniBand 支持广域网通信与 RoCEv2 的核心。

        网络层的核心是GID 寻址与 IPv6 融合。GID 是 128 位的全局唯一标识符,相当于 “全球邮政编码 + 门牌号”,由 “子网前缀(64 位)” 与 “接口 ID(64 位)” 组成:子网前缀由管理员分配,用于标识不同的 InfiniBand 子网;接口 ID 通常由设备的 GUID(全局唯一标识符)生成,用于标识子网内的具体设备端口。当数据包需要跨子网传输时,发送端会在数据包头部添加 “网络层头部”,包含目标 GID 与源 GID;InfiniBand 路由器会解析目标 GID 的子网前缀,确定下一跳子网的路由器端口,再通过该端口将数据包转发到目标子网 —— 整个过程与 TCP/IP 网络中基于 IP 地址的路由逻辑类似,但 GID 的 128 位长度可支持海量子网与设备,避免 IP 地址耗尽问题。

        值得注意的是,网络层与链路层的寻址逻辑存在明确分工:LID 是 “子网内的本地地址”,用于子网内的快速转发;GID 是 “全局地址”,用于跨子网的路由定位。这种 “两级寻址” 设计,既保证了子网内的低延迟转发(基于 LID 的硬件快速查表),又实现了跨子网的灵活扩展(基于 GID 的全局路由),完美平衡了 “性能” 与 “扩展性”。

        对于 RoCEv2(RDMA over Converged Ethernet)而言,网络层的作用更为关键。RoCEv2 将 InfiniBand 的网络层数据包封装在 UDP/IP 报文中,此时 GID 会被映射为 IPv6 地址(或通过 NAT64 转换为 IPv4 地址),让 InfiniBand 数据包能在标准以太网中传输 —— 网络层负责将 GID 对应的路由逻辑,转换为 IP 网络的路由逻辑,实现 “InfiniBand 协议” 与 “IP 网络” 的兼容,这也是 RoCEv2 能在现有以太网基础设施中部署的核心原因。

2.4 传输层:端到端的 “包裹保镖”

        当数据包通过链路层与网络层到达目标子网的目标设备后,还需要被 “精准交付” 到对应的通信端点(即上一篇提到的 Queue Pair,QP),同时确保数据的 “按序、可靠传输”。这就像快递到达小区后,需要被送到具体的住户家门口,且不能出现包裹丢失、顺序错乱的情况 —— 传输层就承担着 “端到端可靠传输” 与 “QP 定位” 的职责,是 InfiniBand 保障数据完整性的 “最后一道防线”。

        传输层的核心职责之一是QP 定位与数据交付。每个 QP 在创建时都会被分配一个唯一的 “QP 号”(16 位或 32 位),用于标识设备内的具体通信端点。传输层会在数据包头部添加 “传输层头部”,包含目标 QP 号、源 QP 号、数据包序列号(PSN)等信息:目标 QP 号用于将数据包交付到对端设备的指定 QP,源 QP 号用于对端设备回传确认信息;PSN 则用于确保数据包的 “按序接收”—— 接收端会记录已接收数据包的最大 PSN,若收到的数据包 PSN 不连续(如缺失某序号数据包),会向发送端请求重传,避免数据顺序错乱。

        另一个核心设计是端到端可靠传输机制。根据上一篇提到的 “传输服务类型”,InfiniBand 支持 “可靠连接(RC)”“不可靠连接(UC)”“可靠数据报(RD)”“不可靠数据报(UD)” 等多种传输模式,其中 “可靠” 与否的实现逻辑就由传输层负责:对于 RC 模式,传输层会为每个发送的数据包生成 “确认请求(ACK)”,接收端收到数据包后会返回 ACK,若发送端超时未收到 ACK,则自动重传数据包;对于 UD 模式,传输层不生成 ACK,数据包仅 “尽力传输”,适合对可靠性要求不高的场景(如广播、多播)。这种 “按需选择可靠级别” 的设计,让 InfiniBand 既能满足 AI 训练、金融交易等对可靠性要求极高的场景,也能适应日志传输、监控数据等对延迟更敏感的场景。

        此外,传输层还负责数据分段与重组。当应用程序发送的数据量超过 InfiniBand 的 “最大传输单元(MTU)” 时(通常为 2KB-4MB),传输层会将数据分割为多个 “数据段”,每个数据段封装为独立的数据包;接收端传输层收到这些数据包后,会根据 PSN 将数据段重组为完整的数据,再交付给应用层。这种 “分段重组” 由硬件完成,无需 CPU 参与,避免了传统 TCP/IP 网络中内核处理分段的性能开销。

2.5 高层:应用与硬件的 “桥梁”

        InfiniBand 的 “高层” 并非单一层级,而是泛指 “应用程序接口(API)与协议适配层”,它相当于 “用户与快递系统的交互窗口”—— 应用程序无需直接操作底层的物理层、链路层,只需通过高层提供的接口发起通信请求,高层再将请求转换为底层能理解的指令,是 InfiniBand “易用性” 的关键。

        高层的核心是Verbs API,这是 InfiniBand 提供给应用程序的 “标准通信接口”,包含创建 QP、注册内存区域(MR)、发起 RDMA Read/Write/Send/Receive 等操作的函数。例如,应用程序要发起 RDMA Write 操作时,只需调用ibv_post_send函数,传入 QP、远程 MR 的 R_Key 与虚拟地址、本地数据缓冲区地址等参数;高层会将这些参数转换为 “工作请求(WR)”,下发到 HCA 的硬件队列中,由 HCA 完成后续的底层传输流程。Verbs API 的设计遵循 “硬件卸载” 原则,所有操作都在用户态完成,无需内核介入,避免了 “用户态 - 内核态” 上下文切换的开销。

        除了 Verbs API,高层还包含协议适配层,用于支持不同的应用场景:例如,在高性能计算(HPC)中,高层会适配 MPI(Message Passing Interface)协议,将 MPI 的 “消息传递” 请求转换为 InfiniBand 的 RDMA 操作,让 HPC 应用能通过熟悉的 MPI 接口使用 InfiniBand 的高性能;在存储场景中,高层会适配 NVMe over Fabrics 协议,将存储 IO 请求转换为 RDMA Read/Write 操作,实现 “存储设备与主机内存的直接交互”;在云计算场景中,高层会适配 Kubernetes CNI(Container Network Interface),将容器间的网络请求转换为 InfiniBand 的通信操作,实现容器的高性能网络。

        这种 “接口标准化 + 协议适配” 的设计,让 InfiniBand 能无缝融入现有应用生态,无需用户重写大量代码即可享受高性能,是 InfiniBand 从超算领域走向 AI、云计算等通用领域的重要支撑。

三、数据包的 “一生”:RDMA Write 操作的全链路透视

        为了更直观地理解六层模型的协同工作,我们以一个 “AI 训练中的 RDMA Write 操作” 为例,完整追踪一个数据包的 “诞生到交付” 过程:

  1. 应用层发起请求:GPU 训练框架(如 PyTorch)需要将本地梯度数据写入远程 GPU 的内存,通过 Verbs API 调用ibv_post_send,发起 RDMA Write 请求,传入远程 MR 的 R_Key、虚拟地址(RVA)、本地数据缓冲区地址等参数。
  2. 高层转换指令:高层将 API 请求转换为 “RDMA Write 工作请求(WR)”,包含操作类型(RDMA Write)、目标 QP 号、R_Key、RVA、数据长度、本地数据地址等信息,下发到 HCA 的发送队列(SQ)。
  3. 传输层封装头部:HCA 传输层读取 WR,为数据包添加 “传输层头部”,包含目标 QP 号、源 QP 号、PSN(确保按序传输)、操作类型标识(RDMA Write)。
  4. 网络层添加 GID:若远程 GPU 在同一子网,网络层可省略(仅用链路层 LID);若跨子网,网络层添加 “网络层头部”,包含目标 GID(远程 HCA 端口的全局地址)与源 GID(本地 HCA 端口的全局地址)。
  5. 链路层添加 LID 与流量控制信息:链路层添加 “链路层头部”,包含目标 LID(远程 HCA 端口的子网内地址)、源 LID(本地 HCA 端口的子网内地址)、VL(虚拟通道)、SL(服务级别)、CRC 校验值。
  6. 物理层转换为比特流:物理层将链路层封装后的数据包转换为符合链路速度与编码方案的比特流,通过铜缆或光纤传输到交换机。
  7. 交换机转发:交换机链路层提取目标 LID,查询 LFT 后将数据包转发到目标端口;若跨子网,路由器网络层提取目标 GID,查询路由表后转发到目标子网。
  8. 接收端解封装:远程 HCA 物理层接收比特流,转换为数据包;链路层验证 CRC,提取 LID;网络层(跨子网时)提取 GID;传输层验证 PSN,确认 QP 号,将数据段重组;高层将重组后的完整数据写入远程 GPU 的内存,并生成 “完成队列元素(CQE)” 放入 CQ。
  9. 应用层确认完成:远程 GPU 训练框架轮询 CQ,读取 CQE,确认 RDMA Write 操作完成,开始使用接收的梯度数据进行参数更新。

四、总结:六层协同的 “高性能密码” 与系列回顾

        InfiniBand 模型的核心价值,在于 “每一层都专注于特定职责,且通过硬件卸载实现全链路协同”:物理层保障比特传输的准确性,链路层实现子网内低延迟转发,网络层支持跨子网扩展,传输层确保端到端可靠,高层衔接应用生态 —— 这种 “分工明确、硬件加速、协同优化” 的设计,正是 InfiniBand 能实现 “微秒级延迟、TB 级带宽、低 CPU 占用” 的根本原因。

        回顾整个 InfiniBand 技术解析系列,我们从 “为什么需要 IB” 的宏观价值切入(超级血管的定位),到 “IB 的核心术语” 建立语言基础(HCA、QP、LID 等),再到 “子网管理器” 理解网络的组织方式,“Queue Pair” 剖析通信的核心引擎,最终完整还原数据传输的全链路 —— 这一系列内容,共同构建了 InfiniBand 的 “技术认知体系”。在算力需求爆炸的 AI 时代,InfiniBand 的不可替代性愈发凸显:它不仅是超算中心的 “标配”,更成为千亿参数大模型训练、分布式存储、金融高频交易等场景的 “性能基石”。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐