InfiniBand 专题【左扬精讲】—— InfiniBand 链路层:从数据包到流量控制

InfiniBand技术专题【左扬精讲】—— 链路层详解:从数据包到流量控制

InfiniBand(简称 IB)是一种为 HPC 和 AI 训练集群设计的高速互连网络,相比传统以太网,它能提供 微秒级甚至亚微秒级 的端到端延迟。

本篇深入探讨 InfiniBand 链路层的核心知识,包括数据包管理、LID 寻址、服务质量(QoS)、流量控制和双 CRC 校验机制。理解链路层是掌握 InfiniBand 网络技术的关键。

InfiniBand 架构分层(自下而上)
    +------------------+
    |    上层协议层     |  RDMA 操作语义(Send/Recv/RDMA Read/Write)
    +------------------+
    |      传输层       |  端到端可靠性、分段与重组(PSN)
    +------------------+
    |      网络层       |  全局路由(可选)、GRH 头部
    +------------------+
    |      链路层       |  本章核心:数据包布局、LID 寻址、QoS、流量控制
    +------------------+
    |      物理层       |  线缆、光模块、电信号

InfiniBand 链路层 LID 寻址 QoS 流量控制 CRC 校验 OFED

学习重点提示

本篇深入探讨 InfiniBand 链路层的核心知识。以下是每个主题你需要掌握的深度说明:

数据包管理(What & How & Why):

    • What:管理包(配置/维护)和数据包(事务负载)两种类型的功能差异;有效载荷位于传输头和 ICRC 之间,典型大小 256-4096 字节
    • How:能说出数据包封装顺序(LRH + GRH(可选)+ BTH + Payload + ICRC + VCRC);能判断同子网通信只需 LRH+BTH,跨子网需要 LRH+GRH+BTH
    • Why:理解"为什么需要区分数据包类型"——管理流量和数据流量走不同处理路径,互不干扰;这是理解 InfiniBand 通信机制的基础

LID 二层寻址(What & How & Why):

    • What:LID(Local Identifier)是子网管理器 SM 分配的 16 位本地标识,用于子网内数据包路由;每个子网支持 48,000 个单播 LID 和 16,000 个多播 LID
    • How:能说出 LID 分配条件(SM 初始化/拓扑变化);掌握分配规则(HCA 每端口一个、IC 交换机一个、模块化交换机每模块一个);能用 LFT(线性转发表)解释交换机如何根据 DLID 确定出口端口
    • Why:理解"为什么需要 LID"——LID 是 16 位,交换机转发表只需维护目标 LID 到端口的映射,而非完整路径信息;没有 LID,子网内数据包无法路由

服务质量 QoS(What & How & Why):

    • What:QoS 通过 SL(Service Level,3 位定义 8 个等级)和 VL(Virtual Lane,16 个独立缓冲区的虚拟通道)实现流量分级
    • How:能说出 SL 到 VL 的映射关系(通过转发数据库);掌握 VL15(管理流量)和 VL0(默认数据流量)的特殊用途;理解仲裁器如何控制不同 VL 的发送顺序和权重
    • Why:理解"一个 VL 的拥塞不影响其他 VL"——每个 VL 有独立的缓冲区和信用计数器;这是 InfiniBand 实现无损网络的关键机制之一

流量控制(What & How & Why):

    • What:基于信用的流量控制(Credit-Based Flow Control)是 Receiver-Driven(接收方驱动)模式;接收方主动推送信用指示可用缓冲区,发送方在传输前等待信用
    • How:能画出信用交换的时序图(推送信用 → 消耗信用 → 释放信用);掌握信用按 VL 独立分配的机制;理解关联等待计时器超时后数据包被丢弃的处理逻辑
    • Why:理解"为什么是 Receiver-Driven 而非 Sender-Driven"——接收方可以根据自身处理能力控制数据流速,避免发送方过载;这是 InfiniBand 实现无损网络的核心

数据完整性(What & How & Why):

    • What:双 CRC 校验机制——ICRC(不变 CRC)覆盖数据包中不变的字段,VCRC(变体 CRC)覆盖整个数据包
    • How:能解释"为什么需要两个 CRC"——转发过程中某些字段会变化(ICRC 不覆盖),但数据内容不应变化(VCRC 检测);能对比 InfiniBand 双 CRC 与以太网单 CRC 的差异
    • Why:理解"没有双 CRC 会发生什么"——交换机转发表更新后数据包被误判为损坏;无法检测传输过程中的真正数据错误

OFED 管理命令(What & How & Why):

    • What:OFED(Mellanox/NVIDIA 提供的驱动和工具栈)中的链路层相关命令——ibswitches(显示交换机)、ibroutes(查询转发表)、iblinkinfo(链路状态)、ibnetdiscover(拓扑发现)
    • How:能熟练使用这些命令并读懂输出;理解 LID 以十六进制显示(如 0xA = 10);理解端口 0 表示交换机内部处理
    • Why:工具是理论的落地——理解 SM 分配 LID 的过程后,用 ibswitches 验证"交换机是否成功注册"是最直观的验证方式

阅读前提 & 建议:

    • 前置知识:建议了解以太网 OSI 七层模型(至少知道物理层/链路层/网络层的概念),本篇会频繁与之对比
    • 不涉及的内容:物理层电气特性(SerDes 速率/光模块型号)、子网初始化 FSM 状态机、RDMA verbs 源码分析
    • 深度预期:学完本篇后,你能看懂 ibswitches / ibroutes 的输出,能回答"InfiniBand 链路层为什么比以太网更可靠"——答案是"双 CRC 端到端校验 + 基于信用的无损流量控制"
    • 后续延伸:子网初始化流程(SM 选举机制)→ 传输层语义(RDMA 操作)→ 拥塞控制算法(PFC/ECN)→ 网络层架构(GRH/GID)

一、链路层与传输层的关系

What — 链路层是什么?

链路层是 InfiniBand 架构中位于物理层之上的核心层次,与传输层共同构成 InfiniBand 的核心。链路层负责本地子网内的数据包转发和链路操作,传输层则负责端到端的可靠性保障和全局路由。

链路层与传输层的分工
  
    +-----------+     链路层      +-----------+     传输层      +-----------+
    |   发送端   |  → LID 路由 → |  交换机    |  → PSN 重传 → |   接收端   |
    +-----------+   本地子网内   +-----------+   端到端保障   +-----------+
  
    链路层职责:
    - 数据包布局设计(LRH 头部)
    - 点对点链路操作(VL 虚拟通道)
    - 本地子网交换(基于 LID 的路由)
  
    传输层职责:
    - 端到端可靠性(PSN 序列号)
    - 分段与重组(大消息拆分)
    - 连接管理(QP 队列对)

Why — 为什么链路层如此重要?

问题一:链路层和传输层的核心差异是什么?

链路层工作在本地子网内,基于 LID(Local Identifier) 进行数据包转发;传输层负责端到端的可靠性保障,基于 PSN(Packet Sequence Number) 检测丢包并触发重传。简单说:链路层解决"数据包怎么走到下一跳",传输层解决"数据包是否正确到达终点"。

问题二:没有链路层会发生什么?

如果链路层设计不当,将导致以下问题:

    • 数据包无法正确路由到目标节点
    • 高优先级流量被低优先级流量阻塞
    • 拥塞时数据包大量丢失,重传开销剧增
    • 数据在传输过程中无法被检测是否损坏
How — 链路层的主要职责

链路层的核心职责可以从三个维度理解:

链路层核心职责矩阵
  
    +-------------+----------------------------------------+
    |  职责维度    |  具体内容                               |
    +-------------+----------------------------------------+
    | 数据包布局   | 定义数据包结构、有效载荷范围、CRC 位置   |
    | 链路操作     | 点对点链路建立、链路状态维护、错误检测   |
    | 子网交换     | 基于 LID 的本地路由、交换机转发表查询    |
    +-------------+----------------------------------------+
  
    关键字段(LRH - Link Routing Header):
    - DLID(16 bit):目的 LID,交换机据此转发
    - SL(3 bit):Service Level,QoS 优先级
    - VL(4 bit):Virtual Lane,虚拟通道号

本节小结

    • 链路层定位:位于物理层之上,负责本地子网内的数据包转发
    • 传输层定位:负责端到端的可靠性保障(PSN)
    • 核心差异:链路层解决"怎么走到下一跳",传输层解决"是否到达终点"

二、数据包管理

What — InfiniBand 数据包是什么?

数据包是在 InfiniBand 结构中传输数据的可路由单元。链路层负责数据包的布局设计,确保数据能够正确、高效地在子网内传输。

数据包封装顺序(从上到下,从外到内)
    +------------------------------------------+
    |              上层数据(Payload)           |
    +------------------------------------------+
    |         BTH(传输层头,12 字节)            |
    |    PSN / Opcode / Dest QP / ...           |
    +------------------------------------------+
    |         GRH(网络层头,40 字节,仅跨子网)  |
    |    SGID(16B) / DGID(16B) / ...           |
    +------------------------------------------+
    |         LRH(链路层头,12 字节)           |
    |    DLID / SL / VL / ...                  |
    +------------------------------------------+
    |         ICRC(不变字段校验)               |
    +------------------------------------------+
    |         VCRC(变体字段校验)               |
    +------------------------------------------+
  
    场景判断:
    +-------------------------------+------------------------+
    |           场景                 |         头部组合        |
    +-------------------------------+------------------------+
    | 同子网通信(本地)              | LRH + BTH + Payload    |
    | 跨子网通信(全局)             | LRH + GRH + BTH + Payload |
    +-------------------------------+------------------------+

Why — 为什么需要区分数据包类型?

问题一:管理包和数据包的区别是什么?

管理包用于链路配置和维护,确定设备信息(如虚拟通道支持)。数据包携带事务负载,支持 SEND、READ、WRITE 和 ACK 等操作。两类数据包走不同的处理路径,互不干扰。

问题二:没有数据包分类会发生什么?

    • 子网管理器无法正常工作,新设备无法加入网络
    • 链路故障无法及时检测和恢复
    • 数据传输与服务配置混杂,网络可管理性归零
How — 数据包类型详解

InfiniBand 数据包分为两大类型:

数据包类型对比
  
    +----------------+-----------------------------------------------------+
    |  数据包类型     |  用途与特点                                          |
    +----------------+-----------------------------------------------------+
    |  管理数据包     |  用于链路配置和维护,确定设备信息(如虚拟通道支持)   |
    |  数据数据包     |  携带事务负载,支持 InfiniBand 架构操作:             |
    |                |    • SEND/RECEIVE(发送/接收)                |
    |                |    • READ(远程读取)                           |
    |                |    • WRITE(远程写入)                          |
    |                |    • ACK(确认应答)                           |
    +----------------+-----------------------------------------------------+
  
    有效载荷规格:
    - 位置:位于传输头和 ICRC 之间
    - 典型大小:256-4096 字节
    - 设计考量:足够容纳大多数 RDMA 操作,同时保持较小传输延迟
数据包组成说明
传输头 包含源/目标 LID、操作类型、SL 等元信息
有效载荷 实际传输的数据,大小 256-4096 字节
ICRC 不变字段的循环冗余校验
VCRC 整个数据包的循环冗余校验

本节小结

    • 数据包分类:管理包(配置/维护)和数据包(事务负载)
    • 有效载荷:典型大小 256-4096 字节
    • 封装顺序:LRH + GRH(可选)+ BTH + Payload + ICRC + VCRC

三、二层寻址机制

What — Layer 2 寻址是什么?

二层寻址(Layer 2 Addressing)是 InfiniBand 在数据链路层实现的本地子网内节点间数据包转发机制。核心实现方式是为子网内每个节点分配一个 LID(Local Identifier)

LID 分配规则
  
    LID 分配条件:
    1. 子网管理器初始化时
    2. 检测到拓扑变化时
  
    分配规则:
    +------------------+----------------------------------------+
    |     设备类型      |              分配方式                  |
    +------------------+----------------------------------------+
    | HCA(主机通道适配器)| 每个端口分配一个 LID                  |
    | IC 交换机        | 分配单个 LID                           |
    | 模块化交换机      | 每个交换机模块分配一个 LID             |
    +------------------+----------------------------------------+
  
    容量规格:
    - 单播 LID:每个子网支持 48,000 个地址
    - 多播 LID:每个子网支持 16,000 个地址

Why — 为什么需要 LID 寻址?

问题一:LID 和 GUID 的区别是什么?

LID(Local Identifier)是本地分配的动态地址,会随着子网拓扑变化而改变。GUID(Global Unique Identifier)是设备端口的永久标识符,由厂商预设,在设备生命周期内保持不变。

问题二:没有 LID 会发生什么?

    • 子网内数据包无法路由,网络通信完全瘫痪
    • 交换机转发表失去意义,所有流量都需要广播
    • InfiniBand 退化为简单的点对点连接,无法组网

易混淆点:LID vs GUID vs GID

    • GUID:64 位,厂商烧录,设备唯一标识,不可路由
    • LID:16 位,SM 分配,子网内高效路由
    • GID:128 位,SM 生成,兼容 IPv6,支持跨子网
How — 交换机转发机制

LID 位于 InfiniBand 数据包的本地路由头(LRH)中,交换机使用 LFT(Linear Forwarding Table) 根据目标 LID 确定输出端口:

线性转发表(LFT)工作原理
  
    数据包格式:
    +------------------------------------------+
    |  LRH(12 字节)                          |
    |    DLID = 目标 LID(交换机据此转发)      |
    +------------------------------------------+
  
    交换机转发流程:
    1. 交换机读取数据包的 DLID 字段
    2. 查找 LFT 中 DLID 对应的出口端口
    3. 将数据包从对应端口发出
  
    LFT 表示例:
    +----------+--------+
    |  目标 LID |  端口   |
    +----------+--------+
    |   0x001  |   1    |
    |   0x002  |   2    |
    |   0x003  |   3    |
    |   0xFFF  |   0    |  

本节小结

    • LID 定义:16 位本地标识,SM 分配,用于子网内路由
    • 分配规则:HCA 每端口一个,IC 交换机一个,模块化交换机每个模块一个
    • 容量:48,000 个单播 LID,16,000 个多播 LID
    • 转发机制:交换机通过 LFT 将目标 LID 映射到出口端口

四、服务质量(QoS)

What — InfiniBand QoS 是什么?

服务质量(Quality of Service)是 InfiniBand 为不同用户或应用程序提供优先服务的能力。通过 服务级别(SL)虚拟通道(VL) 实现流量分级管理。

虚拟通道(VL)配置
  
    InfiniBand 规范允许 16 个虚拟通道(VL0-VL15)
  
    特殊通道用途:
    +--------+--------------------------------------------+
    |  VL15  |  专用管理流量(子网管理器流量、链路控制)   |
    |  VL0   |  默认数据流量                              |
    |  VL1-14|  支持额外的数据流量隔离                    |
    +--------+--------------------------------------------+
  
    QoS 实施流程:
    1. 服务级别(SL)定义数据包类别
    2. 转发数据库包含 SL 到 VL 的映射
    3. 数据包根据 VL 进入对应发送/接收缓冲区
    4. 仲裁器控制不同 VL 的发送顺序和权重

Why — 为什么需要 QoS?

问题一:SL 和 VL 的协作关系是什么?

SL(Service Level)定义在本地路由头(LRH)中,用于区分数据包的类别(3 位,8 个等级)。VL(Virtual Lane)是实际的物理隔离通道(16 个)。SL 通过转发数据库映射到 VL,不同优先级的流量走不同的 VL。

问题二:没有 QoS 会发生什么?

    • 网络拥塞时所有流量平等竞争,高优先级业务得不到保障
    • 一个虚拟通道的拥塞可能蔓延到其他通道
    • 无法实现 SLA 承诺,运营商无法提供差异化服务
How — 虚拟通道的缓冲区隔离

每个虚拟通道有独立的发送和接收缓冲区,支持独立的流量控制:

虚拟通道缓冲区架构
  
    发送端:
    +----------+  +----------+  +----------+
    |  VL0 缓冲区 |  | VL1-14 |  | VL15 缓冲区 |
    |   (数据)   |  | (可选)  |  |  (管理)   |
    +----------+  +----------+  +----------+
         |             |             |
         v             v             v
    +------------------------------------------+
    |              仲裁器(Arbiter)            |
    |    控制不同 VL 的发送顺序和权重比例        |
    +------------------------------------------+
         |
         v
  
    接收端:
    +----------+  +----------+  +----------+
    |  VL0 缓冲区 |  | VL1-14 |  | VL15 缓冲区 |
    +----------+  +----------+  +----------+
  
    关键特性:
    - 一个 VL 的拥塞不会影响其他 VL
    - 实现了真正的流量隔离

实践建议

在生产环境中,建议将管理流量(SL 映射到 VL15)和数据流量分开。如果管理流量因数据拥塞而延迟,可能导致子网管理器无法及时响应拓扑变化,引发更大范围的网络故障。

本节小结

    • SL(服务级别):3 位字段,定义 8 个流量类别
    • VL(虚拟通道):16 个独立缓冲区,VL15 管理,VL0 数据
    • 映射关系:SL 通过转发数据库映射到 VL
    • 隔离机制:一个 VL 拥塞不影响其他 VL

五、流量控制机制

What — 基于信用的流量控制是什么?

基于信用的流量控制(Credit-Based Flow Control)是 InfiniBand 实现无损网络的核心机制。接收方主动推送信用(Receiver-Driven),指示接收缓冲区的可用性,发送方在传输消息前等待信用,确保拥塞时数据包不会丢失。

流量控制时序(Receiver-Driven)
  
    发送方                              接收方
        |                                  |
        |←————— 接收方推送信用 —————→|  接收方主动发送信用指示可用缓冲区
        |                                  |
        |——— 数据包(消耗信用)———→|  接收并消耗信用
        |                                  |
        |←——— 更新信用(缓冲区释放)———→|  数据消费后释放缓冲区
        |                                  |
        |           ... 重复上述流程 ...     |
  
    关键机制:
    - 信用按虚拟通道(VL)分配
    - 接收方主动推送信用,发送方被动接收
    - 每个 VL 对之间存在一一对应关系

Why — 为什么需要流量控制?

问题一:Receiver-Driven 和 Sender-Driven 的区别是什么?

InfiniBand 采用 Receiver-Driven(接收方驱动)模式:接收方主动推送信用,发送方被动等待。这种模式的优点是接收方可以根据自身处理能力控制数据流速,避免发送方过载。

问题二:没有流量控制会发生什么?

    • 网络拥塞时大量数据包丢失
    • TCP/IP 式的重传机制被引入,延迟急剧增加
    • RDMA 的零拷贝、低延迟优势完全丧失

超时与丢包的关系

虽然 InfiniBand 设计为无损网络,但如果发送方在等待信用时超时(关联等待计时器),数据包仍会被丢弃。这通常发生在接收方发生故障或网络严重拥塞的情况下。因此,传输层仍需要处理丢包重传,但这种情况在正常运营中极为罕见。

How — 信用分配与队头阻塞缓解
信用分配机制
  
    信用按 VL 独立分配:
    +----------+----------+
    |   VL0    |  信用 N   |  

本节小结

    • 流量控制模式:Receiver-Driven(接收方驱动)
    • 信用分配:按 VL 独立分配,一一对应
    • 队头阻塞缓解:一个 VL 拥塞不影响其他 VL
    • 超时处理:关联等待计时器超时后丢弃数据包

六、数据完整性保障

What — 双 CRC 校验是什么?

循环冗余检查(CRC)是通过数学计算为数据包生成的校验数字。InfiniBand 每个数据包包含两个 CRC:ICRCVCRC,共同保障端到端的数据完整性。

双 CRC 校验机制
  
    +----------------+------------------------------------------------+
    |   CRC 类型      |              覆盖范围与目的                    |
    +----------------+------------------------------------------------+
    |   ICRC         |  覆盖数据包中不变的字段                         |
    |  (不变 CRC)    |  - 确保数据内容的端到端完整性                   |
    |                |  - 不受转发过程中的正常修改影响                 |
    +----------------+------------------------------------------------+
    |   VCRC         |  覆盖整个数据包                                 |
    |  (变体 CRC)    |  - 检测任何位置的数据损坏                       |
    |                |  - 包括传输过程中可能变化的字段                 |
    +----------------+------------------------------------------------+
  
    工作原理:
    1. 源计算机计算 ICRC 和 VCRC
    2. 目标计算机重新计算并比较
    3. 任意一个不匹配即判定数据包损坏
    4. 损坏的数据包被丢弃,由源端重传

Why — 为什么需要双 CRC?

问题一:ICRC 和 VCRC 的覆盖范围有什么区别?

ICRC 覆盖数据包中不变的字段,即源到目的端不会改变的字段。VCRC 覆盖整个数据包,包括转发过程中可能变化的字段。这种设计确保既能检测数据损坏,又不会误判转发过程中的正常修改。

问题二:没有双 CRC 会发生什么?

    • 交换机转发表更新后,数据包被误判为损坏
    • 无法检测传输过程中的真正数据错误
    • RDMA 数据传输的可靠性无法保障
How — 与以太网 CRC 的对比
InfiniBand vs 以太网 CRC 对比
  
    +----------------+------------------------+------------------------+
    |    对比维度     |     InfiniBand         |        以太网          |
    +----------------+------------------------+------------------------+
    |   CRC 数量     |  双 CRC(ICRC + VCRC)  |  单 CRC               |
    |   校验范围     |  不变字段 + 全包        |  仅全包               |
    |   端到端保障   |  是                     |  否(仅链路级)        |
    |   检测能力     |  更强(分层检测)        |  基础(仅错误检测)     |
    +----------------+------------------------+------------------------+
  
    关键差异:
    - 以太网 CRC 仅覆盖帧从源到目的的单个链路
    - InfiniBand 双 CRC 提供端到端的完整性保障
    - 这是高性能计算环境对数据可靠性的严格要求

本节小结

    • ICRC:覆盖不变字段,确保端到端数据内容完整性
    • VCRC:覆盖整个数据包,检测任何位置的损坏
    • 处理方式:损坏数据包被丢弃,由源端重传
    • 优势:与以太网单 CRC 相比,提供更强的端到端保障

七、OFED 管理命令实战

What — OFED 是什么?

OFED(OpenFabrics Enterprise Distribution)是 Mellanox/NVIDIA 提供的一套开源软件栈,包含驱动、协议栈和管理工具。提供一系列用于链路层监控和管理的命令行工具。

OFED 链路层核心命令
  
    +------------------+------------------------------------------+
    |     命令          |            功能                         |
    +------------------+------------------------------------------+
    | ibswitches      |  显示子网中所有交换机节点及其 LID        |
    | ibroutes        |  查询 InfiniBand 交换机转发表            |
    | iblinkinfo      |  显示结构中所有节点及连接信息            |
    | ibnetdiscover   |  执行结构发现并输出易读拓扑文件          |
    +------------------+------------------------------------------+
  
    输出格式注意:
    - LID 通常以十六进制显示(如 0xA = 十进制 10)
    - 交换机自身的 LID 映射到出口端口 0(内部处理)

Why — 为什么需要 OFED 命令?

问题一:这些命令分别用于什么场景?

    • ibswitches:快速查看子网中所有交换机及其 LID
    • ibroutes:查询特定交换机的 LFT,了解数据包如何被路由
    • iblinkinfo:查看链路状态、速度、端口信息
    • ibnetdiscover:发现完整网络拓扑结构

问题二:没有 OFED 工具会发生什么?

    • 无法发现网络拓扑,故障定位困难
    • 无法查看交换机转发表,路由问题难以排查
    • 无法监控链路状态,潜在故障无法预警
How — 命令输出解析示例
# ibswitches 示例输出
  $ ibswitches
  Switch : 0x0002c90200001a2c ports 36 "Voltaire 4036"
  Switch : 0x0002c90200001b3d ports 36 "Voltaire 4036"
  
  # ibroutes 示例输出(LID 以十六进制显示)
  $ ibroutes 0x001
  DGID  LID         Out  Port
  0x001 0x0001      Yes     1
  0x002 0x0002      Yes     2
  0x003 0x0003      Yes     3
  
  # iblinkinfo 示例输出
  $ iblinkinfo
  CA: "mt2893 Family HCA"
  Port 1: LID 1, 100 Gbps, 4x
  
  # ibnetdiscover 示例输出
  $ ibnetdiscover
  CA "compute-node-01"[0x0002c90300002f78] "mt2893 Family HCA"
    1x-> "switch-01"[0x0002c90200001a2c] port 1

本节小结

    • ibswitches:显示交换机 LID
    • ibroutes:查询交换机转发表
    • iblinkinfo:显示链路状态
    • ibnetdiscover:发现网络拓扑
    • 格式注意:LID 以十六进制显示,端口 0 表示内部处理

FAQ(20 组)

以下是关于 InfiniBand 链路层的常见问题,每个问题都附有一句话结论和详细展开。

Q1. InfiniBand 链路层在架构中的位置是什么?

一句话结论:链路层位于物理层之上,是 InfiniBand 架构的核心组成部分,与传输层共同构成 InfiniBand 的核心。链路层负责本地子网内的数据包转发和链路操作,传输层则负责端到端的可靠性保障。

Q2. 链路层与传输层的主要区别是什么?

一句话结论:链路层解决"数据包怎么走到下一跳",传输层解决"数据包是否正确到达终点"。链路层基于 LID 进行本地路由,使用流量控制防止丢包;传输层基于 PSN 提供端到端的连接管理、分段重组和可靠传输服务。

Q3. InfiniBand 数据包分为哪两种类型?

一句话结论:管理数据包和数据数据包。管理数据包用于链路配置和维护,确定设备信息(如虚拟通道支持);数据数据包携带事务负载,支持 SEND、READ、WRITE 和 ACK 等操作。

Q4. 数据包有效载荷的典型大小范围是多少?

一句话结论:256-4096 字节。有效载荷位于传输头和 ICRC 之间,这个范围经过精心设计,足够容纳大多数 RDMA 操作的数据,同时保持较小的传输延迟。

Q5. LID 的作用是什么?

一句话结论:LID(本地标识符)是 InfiniBand 子网内数据包的路由标识。LID 位于数据包的本地路由头(LRH)中,交换机使用线性转发表(LFT)根据目标 LID 确定输出端口,实现本地子网内的数据包转发。

Q6. LID 在什么条件下被分配?

一句话结论:子网管理器初始化时和检测到拓扑变化时。分配规则为:每个 HCA 端口分配一个 LID,IC 交换机分配单个 LID,模块化交换机中每个交换机模块分配一个 LID。

Q7. 每个子网支持多少个 LID 地址?

一句话结论:48,000 个单播 LID 和 16,000 个多播 LID。这个容量对于大多数数据中心和 HPC 集群来说已经绰绰有余。

Q8. 服务级别(SL)的作用是什么?

一句话结论:SL 定义在本地路由头中,用于区分数据包的类别。SL 是 3 位字段,定义 8 个流量等级。它在每队列基础上区分不同数据流,是 QoS 实施的第一步。通过 SL 到 VL 的映射,不同优先级的流量被分发到不同的虚拟通道。

Q9. 虚拟通道(VL)有哪些特殊用途?

一句话结论:VL15 专用管理流量,VL0 用于所有数据流量,VL1-14 支持额外的数据流量隔离。这种设计确保管理流量不会因数据拥塞而延迟,对网络可用性至关重要。

Q10. InfiniBand 规范允许多少个虚拟通道?

一句话结论:16 个(VL0-VL15)。其中 VL15 保留给管理流量,VL0 为默认数据通道,VL1-14 可配置用于不同业务流的隔离。

Q11. 基于信用的流量控制工作原理是什么?

一句话结论:接收方主动推送信用,发送方在传输前等待信用。确保拥塞时数据包不会丢失而是排队等待。信用按 VL 分配,每个 VL 对之间存在一一对应关系。

Q12. 信用超时后会发生什么?

一句话结论:关联等待计时器超时后,多余的数据包被丢弃。虽然 InfiniBand 设计为无损网络,但异常情况下(如接收方故障或严重拥塞)仍会发生丢包,由传输层负责重传。

Q13. 流量控制如何缓解队头阻塞?

一句话结论:因为信用按 VL 独立分配,一个虚拟通道的拥塞不会影响其他通道。不同优先级的流量使用独立的缓冲区和控制机制,实现了真正的流量隔离。

Q14. ICRC 和 VCRC 的区别是什么?

一句话结论:ICRC 覆盖数据包中不变的字段,VCRC 覆盖整个数据包。ICRC 确保端到端数据内容的完整性,不受转发过程中的正常修改影响;VCRC 检测任何位置的数据损坏。

Q15. 检测到数据损坏后如何处理?

一句话结论:损坏的数据包被直接丢弃,由源端重传。InfiniBand 的数据完整性保障依赖于丢弃损坏数据包并重传的机制,而非尝试修复。

Q16. InfiniBand 双 CRC 与以太网单 CRC 有何不同?

一句话结论:InfiniBand 使用双 CRC 提供更强大的端到端完整性保障。以太网 CRC 仅覆盖帧从源到目的的单个链路,InfiniBand 双 CRC 提供端到端的完整性保障,既能检测真正的数据错误,又不会误判转发过程中的正常修改。

Q17. ibswitches 命令的作用是什么?

一句话结论:显示子网中所有 InfiniBand 交换机节点及其 LID。这是发现网络拓扑和定位交换机的基本命令。

Q18. ibroutes 和 ibnetdiscover 命令的作用分别是什么?

一句话结论:ibroutes 用于查询交换机转发表,ibnetdiscover 用于发现完整网络拓扑。ibroutes 指定交换机 LID 后可以查看 LFT,了解数据包如何被路由;ibnetdiscover 执行结构发现并输出易读的拓扑文件,显示节点类型、描述、链接端口号、LID 和 GUID。

Q19. OFED 输出中 LID 的显示格式是什么?

一句话结论:十六进制格式显示。例如,0xA 表示十进制 10。在解析输出时需要进行进制转换。另外,交换机自身的 LID 映射到出口端口 0,表示内部处理逻辑。

Q20. iblinkinfo 命令显示哪些信息?

一句话结论:显示结构中所有节点及连接信息,包括 LID、GUID、主机名、链路速度等。这是综合性的链路状态查看工具,便于快速了解整个子网的健康状况。

全篇总纲

本篇围绕 InfiniBand 链路层 建立了完整的知识体系:

  • 链路层定位:位于物理层之上,与传输层共同构成 InfiniBand 核心
  • 数据包管理:管理包/数据包类型,有效载荷 256-4096 字节
  • LID 寻址:16 位本地标识,SM 分配,48k 单播/16k 多播容量
  • QoS 机制:SL(3 位 8 等级)到 VL(16 个通道)的映射
  • 流量控制:Receiver-Driven 模式,信用按 VL 独立分配
  • 数据完整性:双 CRC(ICRC 不变字段/VCRC 全包)
  • OFED 命令:ibswitches/ibroutes/iblinkinfo/ibnetdiscover

Roadmap 预告

后续延伸学习路径

本篇深入探讨了 InfiniBand 链路层的核心知识,后续内容将依次深入:

    • 子网初始化流程:SM 选举机制、LID 分配算法、路径编程
    • 传输层语义:RDMA Read/Write/Send/Recv 操作语义
    • 拥塞控制算法:PFC(Priority Flow Control)、ECN 机制
    • 网络层架构:GRH 头部、跨子网路由、GID 生成

建议读者在掌握本篇内容后,继续学习传输层语义,这将为你理解 RDMA 操作打下坚实基础。

posted @ 2026-08-04 17:32  左扬  阅读(15)  评论(0)    收藏  举报