Layer 1 故障排除

本章介绍如何排除可能影响将交换机连接到网络的端口模块的第 1 层问题。

高速以太网技术

规范

以下规范对于理解和排除第 1 层问题非常有用

  • IEEE 802.3 规范定义了各种类型和速度的以太网技术的技术和链路特性。
  • SFF MSA 规范定义了 SFP 和 QSFP 模块硬件结构和功能实现的具体细节。

外形尺寸

现代以太网模块有两种外形尺寸

  • 小型可插拔 (SFP)
  • 四通道小型可插拔 (QSFP)
  • 八通道小型可插拔 (OSFP)

每种外形尺寸都包含一个 EEPROM,其中包含有关模块功能的信息,以及各种必需或可选的寄存器组,用于查询或控制模块的各个方面。ethtool -m <swp> 命令的输出解码了主要值。

SFF MSA 规范定义了 EEPROM 中字段的存储位置和通用寄存器

标识符位于模块存储器映射的第一个字节中

  • 0x03:SFP/SFP+/SFP28 - 一个 10G 或 25G 通道 - 小型可插拔
  • 0x0d:QSFP+ - 四个 10G 通道 - 四通道 SFP(总共 40G)
  • 0x11:QSFP28 - 四个 25G 或 50G 通道(总共 100G 或 200G)- 具有 25G 或 50G 通道的四通道 SFP;包括 QSFP28、QSFP56 和更新的 QSFP 标准
  • 0x18:QSFP-DD - 八个 50G 通道(总共 400G)- 具有凹陷额外卡缘连接器的四通道 SFP,可实现 8 个 50G 通道
  • 0x19:OSFP - 八个 100G 通道(总共 800G)

编码

高速以太网的两个部分在 ethtool -m <swp> 命令的输出中属于编码

  • 在线缆或光纤上表示位的方式

    • NRZ(也称为 PAM2)具有两个电压(或激光)电平,分别表示 0 和 1。负电压电平 = 0,正电压 = 1。用于所有通道速度低于 50Gbps 的以太网技术。
    • PAM4 编码具有四个信号电平,表示两位(00、01、10、11)。这些电平比 NRZ/PAM2 中的电平更接近,因此信号完整性是更受关注的问题。PAM4 编码用于 50G 通道。
  • 将位连接到一起以形成的方式,以便于时钟恢复以及错误检查和纠正等功能

    • 64B/66B:在 64 位帧的前面添加两个具有 1/0 转换的控制位,以确保时钟可以每 66 位同步一次。
    • RS-FEC 编码 (528,514) 或 (544,514):使用 14 或 30 位来纠正接收端的误码(请参阅下面的 FEC 部分)。
    • BaseR FEC 编码:窃取 64B/66B 控制字中的一位以重新编码,并添加比 RS-FEC 更小程度的纠错。

下表描述了通道速度和编码方法之间的关系

通道速度编码
10G使用 64B/66B 帧结构,然后以 NRZ 编码 — 实际在线缆上为 10.3125 Gbps。
25G使用 64B/66B 帧结构,然后以 NRZ 编码 — 实际在线缆上为 25.78125 Gbps。也可以使用 RS-FEC (528,514) 或 Base-R FEC。
50G使用 PAM4 编码和 RS-FEC (544,514)。
100G使用 PAM4 编码。

SerDes(串行器/解串器)是端口中将字节数据转换为一组比特流(通道)和从一组比特流(通道)转换字节数据的组件,其中

  • SFP 端口使用 1 个通道
  • QSFP 端口使用 4 个通道
  • QSFP-DD 端口使用 8 个通道
  • OSFP 端口使用 8 个通道

在 ASIC 上,40G、100G 和 200G SerDes 设备为 4 通道;400G SerDes 使用 8 个通道。因此,SFP 端口实际上是四通道 SerDes 上的一个通道。根据平台设计,这有时会影响您配置和分出 SFP 端口的方式。

端口速度是使用以下公式创建的

端口速度通道数量
1G一个以 1G 时钟频率运行的 10G 或 25G 通道。或者,在 1G 固定铜缆交换机上,一个 1G 通道。
10G一个 10G 通道。
25G一个 25G 通道。
40G四个 10G 通道。
50G两个 25G 通道 (NRZ) 或一个 50G 通道 (PAM4)。
100G四个 25G 通道 (100G-SR4/CR4 NRZ)、两个 50G 通道 (100G-CR2 PAM4) 或一个 100G 通道。
200G四个 50G 通道或两个 100G 通道。
400G八个 50G 通道或四个 100G 通道。
800G八个 100G 通道。

有源和无源模块和电缆

从端口的角度来看,模块和电缆可以分为有源无源

有源电缆和模块包含发射器,这些发射器在线缆上重新生成比特信号。所有光模块都是有源的。10/100/1000BaseT 和 10GBaseT 是有源模块,包含一个板载 PHY,用于处理 BaseT 自动协商和到远程 BaseT 设备的 TX/RX。对于有源模块,端口只需向模块提供具有基本功率电平的 TX 信号,模块使用其在端口电源总线上接收的功率来将信号重新生成到远程端。

虽然一些铜缆组件是有源的,但它们非常罕见。

无源电缆(铜缆 DAC)将模块的端口侧直接连接到组件中模块另一侧的铜缆双绞线介质。端口 TX 线提供驱动信号到远端的功率。端口通过与远端端口的训练序列来调整功率 TX 和 RX 参数,以优化接收到的信号并确保在每个 RX 端正确进行时钟和数据恢复。

一致性代码、以太网类型、Ethmode 类型、接口类型

一致性代码、以太网类型、Ethmode 类型和接口类型都是模块实现的以太网技术类型的术语。

为了使端口了解插入模块的特性,SFP 或 QSFP 模块 EEPROM 具有一组标准化的数据来描述模块特性。这些值出现在 ethtool -m <swp> 的输出中。

一致性代码描述了模块实现的以太网技术类型,例如 1000Base-T、10GBase-SR、10GBase-CR、40GBase-SR4 和 100GBase-CR4。

一致性代码的第一部分给出了技术的完整线路速率速度。一致性代码的最后一部分指定了以太网技术和使用的通道数量

  • -T:双绞线。
  • CR:铜缆双绞线(无源 DAC)。CR4 使用 4 根双绞线电缆捆绑用于 4 个通道,CR2 使用 2 根电缆,CR 使用 1 根。
  • SR:光纤短距离。SR4 使用 4 根光纤捆绑用于 4 个通道。
  • LR:光纤长距离。LR4 在一对光纤上使用 4 个波长来传输 4 个通道,用于长距离(公里)。
  • xWDM(SWDM、CWDM、DWDM):光纤波分复用技术(各种)。多个通道通过不同的波长传输。

具有无源模块一致性代码的有源模块或具有有源模块一致性代码的无源模块会导致端口设置不正确,并可能影响信号完整性。

一些模块具有供应商特定的编码,是较旧的模块,或者使用未在标准中列出的专有供应商技术。因此,默认情况下无法识别它们,需要覆盖为正确的一致性代码。在 NVIDIA 交换机上,端口固件会自动将某些受支持的模块覆盖为正确的一致性代码。

数字诊断监控/数字光监控 (DDM/DOM)

DDM/DOM 是供应商可以在其光收发器上实现的可选功能,用于显示有关光功率的测量值。这些值通常在 10% 的容差范围内是可靠的。0.0000 值通常表示供应商未实现该值。

排除链路问题时,最有用的 DDM/DOM 值是

  • RX 光功率(接收器信号平均光功率)
  • TX 光功率(激光输出功率)

DDM/DOM 字段的位置是标准化的。如果模块上存在 DDM/DOM 功能,则这些值将显示在 NVUE nv show platform transceiver <interface> 命令或 Linux ethtool -m <swp> 命令的输出中。

对于每个 DDM/DOM 值,都可能存在阈值,用于标记高或低警告或当值超过该阈值时标记警报

警报值指示信号保持在供应商设计容差范围内的所需电平,而警告电平稍微接近预期规范。

当警告或警报被触发时,标志从关闭翻转为开启。使用 ethtool -m 或 NVIDIA NetQ(或某些其他监控软件)读取该值后,会将此标志重置回关闭

自动协商

有 3 种不同类型的自动协商(IEEE 802.3 条款 28、37、73),适用于 Cumulus Linux 支持的各种以太网技术

  • 10/100/1000/10GBASE-T(双绞线,条款 28):原始以太网自动协商,协商速度和双工(全/半)以及全双工时的流控制(链路暂停)。对于双绞线上的 1G/10G 数据速率是必需的。
  • 1000BASE-X(光纤,条款 37):检测单向链路状况(一侧没有 RX)。如果发生单向链路状况,条款 37 自动协商会向端口发出信号以断开链路;这避免了流量黑洞。
  • 40G/100G/25G/50G/200G/400GBASE-CR(DAC,条款 73):协商速度,执行链路训练以提高误码率 (BER),并协商 FEC。

Cumulus Linux 交换机中使用的许多以太网技术不具备自动协商功能

  • 没有 10G DAC 或光链路具有自动协商;只有 10GBASE-T 和背板链路具有自动协商标准。Cumulus Linux 交换机端口上不存在背板链路。
  • 除 1G 光纤外,没有光链路具有自动协商。

只有大约一半的现代链路类型支持自动协商。以下小节提供了有关何时以及如何启用自动协商的指导。

1000BASE-T 和 10GBASE-T 固定铜缆端口需要自动协商才能实现 1G 和 10G 速度。这是默认设置;您无法禁用 1G 速度的自动协商。禁用这些端口上的自动协商需要将速度设置为 100Mbps 或 10Mbps 以及正确的双工设置。

1000BASE-T SFP 具有板载 PHY,可在 RJ45 侧自动执行自动协商,而无需端口参与。不要更改这些端口上的默认自动协商设置;在 NVIDIA 交换机上,自动协商为开启

对于 1000BASE-X,强烈建议在 1G 光链路上使用自动协商来检测单向链路故障。

对于除 1000BASE-X 之外的所有其他光模块,没有自动协商标准。

对于 10G DAC,没有自动协商。

对于速度高于 25G 的 DAC 电缆,自动协商是不必要的,但它很有用,因为它可以提高信号完整性(通过链路训练)。它还会协商速度和 FEC,这不太有用,因为邻居速度和 FEC 通常是已知的。

通用自动协商指南

  • 当以太网类型支持自动协商时,链路的两侧都必须配置相同的自动协商设置。
  • Cumulus Linux 根据 ASIC 和端口速度为每个端口设置自动协商和速度、双工和 FEC 的默认值。在运行 Cumulus Linux 的 NVIDIA 平台上,自动协商默认为开启
  • 如果自动协商为关闭 — 这称为强制模式 — 则如果需要端口的非默认值,还必须指定速度、双工和 FEC。如果自动协商为开启,则不应指定速度、双工和 FEC。唯一的例外是对于 1000BASE-X 光接口,其中速度为 1000,自动协商为开启,以获得单向链路检测。
  • 如果在不支持自动协商的链路类型上启用了自动协商,则端口进入自动检测模式(请参阅下一节)以确定最有可能的速度和 FEC 设置以建立链路。此功能通常会成功,但如果链路未建立,则可能需要禁用自动协商并手动设置这些链路设置。
  • 没有 MTU 自动协商的概念。要将 MTU 从默认设置更改为其他设置,请显式配置它
  • 通常,您可以忽略双工设置,除非在 10M/100M 链路上。默认值为全双工。虽然您可以配置双工设置,但除了高于 1G 的速度外,它没有其他选项,并且在 1000BASE-T 链路上自动协商。

自动检测

由于对自动协商何时适用于链路类型感到困惑,包括 Cumulus Linux 在内的许多以太网软件供应商允许在每种接口类型上配置自动协商开启。当自动协商为开启,但在链路类型上不受支持时,端口软件会尝试确定最有可能的链路设置以建立链路。Cumulus Linux 将此功能称为自动检测,但它不是直接可配置的。

当在端口上启用自动协商时,行为如下

  • 当自动协商为开启时,端口始终处于自动检测模式。端口遍历端口和模块组合的可能自动协商、速度和 FEC 设置列表,直到链路建立。默认配置为自动协商开启

自动检测是一项本地功能。假定邻居配置为自动协商关闭,并且手动设置了速度、双工和 FEC,或者使用某些等效算法来确定正确的速度、双工和 FEC 设置。

要查看用户配置的自动协商、速度、双工和 FEC 设置与端口硬件上的实际运行状态相比,请使用 l1-show 命令。

自动检测功能通常会成功,但如果链路未建立,请禁用自动协商并手动配置链路设置。

FEC

前向纠错 (FEC) 是一种用于纠正介质上误码的算法。FEC 对数据流进行编码,以便远程设备可以通过解码数据流来纠正一定数量的误码。

高速以太网中的目标 IEEE 误码率 (BER) 为 10-12。在 25G 通道速度及以上速度时,如果不进行纠错,则可能无法实现此目标,具体取决于介质类型和长度。有关某些电缆类型的 FEC 要求的更详细讨论,请参阅交换机端口属性

链路的两侧必须启用相同的 FEC 编码算法,链路才能建立。如果两侧似乎都具有工作信号路径,但链路已断开,则配置中可能存在自动协商不匹配或 FEC 不匹配。

FEC 编码算法和设置

  • Reed-Solomon RS-FEC(528,514) 算法向 514 位流添加 14 位编码信息。它替换并使用 64B/66B 编码中相同的开销量,因此比特率不受影响。该算法可以纠正 514 位流中的 7 个误码。RS(528,514) 用于 25G (NRZ) 通道,包括 25G、50G-CR2 和 100G-SR4/CR4 接口。
  • Reed-Solomon RS-FEC(544,514) 算法添加 30 位开销,以纠正每 514 位 14 个以上的误码。FEC RS 是 50G (PAM4) 通道所必需的;所有 200G、400G、100G-CR2 和 50G-CR 接口。
  • Base-R(也称为 FireCode/FC)FEC 每 32 个 64B/66B 块添加 32 位,以纠正每 2048 位 11 位。它替换每个块中的一位,因此它使用与 64B/66B 编码相同的开销量。它仅在 25G 接口中使用。该算法的执行速度比 RS-FEC 算法快,因此延迟降低。RS-FEC 和 Base-R FEC 都在硬件中实现。
  • 无/关:FEC 是可选的,通常在 25G 通道上很有用,包括 100G-SR4/CR4 和 50G-CR2 链路。如果电缆质量足够好,可以在没有 FEC 的情况下实现 10-12 的 BER,则没有理由启用它。10G/40G 链路永远不需要 FEC。如果 10G/40G 链路有错误,请更换导致错误的电缆或模块。
  • 自动:FEC 可以在 2 个设备之间自动协商。当自动协商为开启时,默认 FEC 设置为自动,以启用 FEC 功能信息与邻居发送和接收。端口 FEC 活动/操作设置设置为协商结果。自动是 NVIDIA 交换机上的默认设置(自动协商开启是默认设置)。
  • 如果 100G 和 25G 接口上禁用了自动协商,您必须将 FEC 设置为OFF*、RS 或 BaseR,以匹配邻居。当禁用自动协商时,FEC 默认设置 *auto* 不会建立链路。

在某些情况下,配置的值可能与实际操作值不同。在这种情况下,l1-show 命令会同时显示这两个值。例如

  • 已配置:自动,实际操作:RS。
  • 已配置:RS,但链路已断开,因此实际操作为:无/关闭

信号完整性

以太网协议和技术的目标是使链路一侧生成的比特能够被链路另一侧正确接收。接下来的两节将提供有关链路断开或比特未被正确接收时链路层可能发生的情况的信息。

各种特性显示链路的状态。并非所有特性都可以在所有平台上显示。

  • RX 功率:在具有 DDM/DOM 功能的光模块上,模块会显示接收信号的功率水平。请注意,模块可以接收到功率充足的信号,但仍然可能无法从信号中恢复数据,因为它可能已失真。
  • 信号检测:本地端口接收器从远程设备接收到信号。
  • 信号锁定:本地端口接收器已锁定到从远程端接收到的良好信号。
  • 载波检测:链路的两端都能够理解发送给它们的数据。链路在两端都应处于up状态。
  • RX 故障(无、本地、远程或本地/远程):本地端或远程端正在发出警报,表示它没有接收和/或理解良好的信号和比特流。
    • 本地故障指示本地端没有信号锁定,或者无法理解在其 RX 路径上发送给它的数据。
    • 远程故障指示本地端 RX 路径具有信号锁定,并且可以理解来自邻居的比特流,但是远程邻居正在通过该工作路径发送警报,指示它没有信号锁定,或者无法理解通过其自身的 RX 路径发送给它的数据。

眼图

当一个 1 或 0 比特在链路上传输时,它在端口的电气侧表示为高电压电平或低电压电平。如果将示波器连接到这些引线,当比特流在其中传输时,1 和 0 之间的转换会形成一个眼状图案。

1 和 0 之间的距离越远,眼图看起来越张开。眼图越张开,比特被误读的可能性就越小。当比特被误读时,会导致比特错误,从而导致接收到的整个数据包出现 FCS 错误。较低的眼图测量值通常转化为较高的误码率 (BER)。FEC 可以在一定程度上纠正比特错误。

眼图不在固定铜缆端口上测量,也不在链路断开时测量。

每个硬件供应商都实现了某种眼图的定量测量和某种定性测量。

在 NVIDIA 交换机上,眼图被赋予一个以 mV 为单位的高度和一个等级。对于低于 100G 的速度(NRZ 编码),当等级低于 4000 时,链路的错误率或稳定性可能会受到负面影响。

链路的测量值可能低于这些值,但没有稳定性问题,并且 FEC 可能会纠正此类链路上的所有错误。对于某些接口类型,需要 FEC 来消除错误,直至介质上预期的 BER 水平。

对于 50G 通道(支持 200G 和 400G 的端口),链路使用 PAM4 编码,它有 3 个眼图堆叠在一起,因此眼图测量值要小得多。这些链路上需要 FEC。

显示第 1 层信息

使用 NVUE nv show platform transceiver <interface> 命令或 Linux l1-show 命令来显示 Cumulus Linux 端口和链路的所有第 1 层方面的信息。

cumulus@switch:~$ nv show platform transceiver swp2
cable-type             : Active cable 
cable-length           : 3m 
supported-cable-length : 0 om1, 0 om2, 0 om3, 3 om4, 0 om5 
diagnostics-status     : Diagnostic Data Available 
status                 : plugged_enabled 
error-status           : Power_Budget_Exceeded 
vendor-data-code       : 210215__ 
identifier             : QSFP28 
vendor-rev             : B2 
vendor-name            : Mellanox 
vendor-pn              : MFA1A00-C003 
vendor-sn              : MT2108FT02204 
temperature: 
  temperature         : 48.74 C 
  high-alarm-threshold: 80.00 C 
  low-alarm-threshold : -10.00 C 
  alarm               : Off 
voltage: 
  voltage             : 3.2692 V 
  high-alarm-threshold: 3.5000 V 
  low-alarm-threshold : 3.1000 V 
  alarm               : Off 
channel: 
  channel-1: 
    rx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -13.31 dBm 
        alarm            : low 
    tx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -11.40 dBm 
        alarm            : Off 
    tx-bias-current: 
        current          : 0.000 mA 
        high-alarm-thresh: 8.500 mA 
        low-alarm-thresh : 5.492 mA 
        alarm            : low 
  channel-2: 
    rx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -13.31 dBm 
        alarm            : low 
    tx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -11.40 dBm 
        alarm            : low 
    tx-bias-current: 
        current          : 0.000 mA 
        high-alarm-thresh: 8.500 mA 
        low-alarm-thresh : 5.492 mA 
        alarm            : low 
  channel-3: 
    rx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -13.31 dBm 
        alarm            : low 
    tx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -11.40 dBm 
        alarm            : low 
    tx-bias-current: 
        current          : 0.000 mA 
        high-alarm-thresh: 8.500 mA 
        low-alarm-thresh : 5.492 mA 
        alarm            : low 
  channel-4: 
    rx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
       low-alarm-thresh : -13.31 dBm 
        alarm            : low 
    tx-power: 
        power            : 0.0000 mW / -inf dBm 
        high-alarm-thresh: 5.40 dBm 
        low-alarm-thresh : -11.40 dBm 
        alarm            : low 
    tx-bias-current: 
        current          : 0.000 mA 
        high-alarm-thresh: 8.500 mA 
        low-alarm-thresh : 5.492 mA 
        alarm            : low

由于 Linux 以太网工具对于影响第 1 层的各个供应商驱动程序实现和领域没有统一的方法,因此 Cumulus Linux 使用 l1-show 命令来显示 Cumulus Linux 端口和链路的所有第 1 层方面的信息。

您必须以 root 用户身份运行 l1-show 命令。该命令的语法是

cumulus@switch:~$ sudo l1-show PORTLIST

以下是来自同一链路另一端的 NVIDIA SN2410 交换机的输出

cumulus@2410-switch:~$ sudo l1-show swp43
Port:  swp43
  Module Info
      Vendor Name: Mellanox               PN: MCP2M00-A003
      Identifier: 0x03 (SFP)              Type: 25g-cr
  Configured State
      Admin: Admin Up     Speed: 25G      MTU: 9216
      Autoneg: On                         FEC: Auto
  Operational State
      Link Status: Kernel: Up             Hardware: Up
      Speed: Kernel: 25G                  Hardware: 25G
      Autoneg: On (Autodetect enabld)     FEC: None
      TX Power (mW): None
      RX Power (mW): None
      Topo File Neighbor: bcm-switch-1, swp43
      LLDP Neighbor:      bcm-switch-1, swp43
  Port Hardware State:
      Compliance Code: 100GBASE-CR4 or 25GBASE-CR CA-L
      Cable Type: Passive copper cable
      Speed: 25G                          Autodetect: Enabled
      Eyes: 79                            Grade: 5451
      Troubleshooting Info: No issue was observed.

在 Spectrum-4 交换机上,l1-show 命令输出显示相同的眼图和等级值。

输出分为以下几个部分

  • 模块信息:根据模块 EEPROM 显示有关模块的基本信息。
  • 配置状态:显示端口的配置信息,如内核中定义的那样。
  • 实际操作状态:显示硬件和内核中端口实际链路状态的概要信息。
  • 端口硬件状态:显示来自交换机 ASIC 上端口的底层端口信息。

模块信息

供应商名称、供应商部件号、标识符(QSFP/SFP 类型)和类型(合规性代码)来自供应商 EEPROM。有关说明,请参阅上面的合规性代码、以太网类型、Ethmode 类型、接口类型

Module Info
    Vendor Name: Mellanox               PN: MCP2M00-A003
    Identifier: 0x03 (SFP)              Type: 25g-cr

配置状态

配置状态反映了您使用 ifupdown2 应用于内核的配置。switchd 守护程序将内核状态转换为平台硬件状态并保持它们同步。

Configured State
    Admin: Admin Up     Speed: 25G      MTU: 9216
    Autoneg: On                         FEC: Auto
  • 管理状态:
    • 管理状态 Up 表示内核已使用 NVUE、ifupdown2 或临时使用 ip set line <swp> up 启用了端口。
    • 管理状态 Down 表示内核已禁用端口。
  • 速度:
    • 内核中配置的速度。
    • 您可以使用 NVUE 或 ifupdown2 降低速度。
    • 如果您启用自动协商,此输出将显示协商或自动检测到的速度。
  • MTU:内核中配置的 MTU 设置。
  • Autoneg:内核中配置的自动协商状态。有关更多信息,请参阅自动协商
  • FEC:内核中配置的 FEC 状态。有关更多信息,请参阅上面的FEC

实际操作状态

实际操作状态显示内核和交换机硬件中链路的当前状态。

  Operational State
      Link Status: Kernel: Up             Hardware: Up
      Speed: Kernel: 25G                  Hardware: 25G
      Autoneg: On (Autodetect enabld)     FEC: None
      TX Power (mW): None
      RX Power (mW): None
      Topo File Neighbor: switch-1, swp43
      LLDP Neighbor:      switch-1, swp43
  • 链路状态速度:内核状态和硬件状态匹配,除非链路处于某种不稳定或瞬时状态。
  • AutonegAutodetect:有关更多信息,请参阅上面的自动协商
  • FEC:链路上 FEC 的实际操作状态。有关更多信息,请参阅上面的FEC
  • TX 功率RX 功率:这些值来自模块 DDM/DOM 字段,用于指示模块上测量的光功率强度(如果模块实现了该功能)。交换机支持两者、仅 RX 或两者都不支持。这不适用于 DAC 和双绞线接口。
  • 拓扑文件邻居:如果您填充 /etc/ptm.d/topology.dot 文件并且 ptmd 守护程序处于活动状态,则会显示与此接口匹配的条目。
  • LLDP 邻居:如果 lldpd 守护程序正在运行并且交换机从邻居接收到 LLDP 数据,则邻居信息将在此处显示。

端口硬件状态

端口硬件状态显示额外的底层端口信息。不同供应商的输出有所不同。

以下是 NVIDIA 平台上的输出

  Port Hardware State:
      Compliance Code: 100GBASE-CR4 or 25GBASE-CR CA-L
      Cable Type: Passive copper cable
      Speed: 25G                          Autodetect: Enabled
      Eyes: 79                            Grade: 5451
      Troubleshooting Info: No issue was observed.

NVIDIA 端口固件会自动排除链路问题,并在本输出的故障排除信息部分显示关注项。

有关更多详细信息,请参阅上面的FEC自动协商信号完整性

排除第 1 层问题

本节提供故障排除流程和清单,以帮助解决模块的第 1 层问题。

第 1 层问题的根本原因分为以下三个类别之一

  • 配置问题:一个邻居或另一个邻居配置错误,或者邻居之间配置不匹配。
  • 硬件问题:光纤跳线或模块故障,以及极少数情况下,QSFP 或 SFP 端口故障。
  • 交换机驱动程序在处理特定模块类型时出错。这些错误很少见,通常可以解决。

要解决第 1 层问题,请按照以下步骤操作

  • 描述和分类问题。
  • 设计一个最能显示该问题行为的最低级别指标的测试。l1-show 的层次结构视图通常是查找此指标的最佳工具。您也可以使用 NVUE nv show platform transceiver <interface> 命令。
  • 根据问题类型进行更改,以帮助隔离故障的根本原因。使用测试来跟踪进度。
    • 确定问题可能是配置问题还是硬件问题。如果不清楚,请首先从配置开始。
    • 对于配置问题,请确保链路两端的配置与本指南以及交换机端口属性中的指导相符。
    • 对于硬件问题,请按照下面隔离故障硬件中所述,通过有条不紊地移动和更换组件来隔离故障组件。
  • 隔离根本原因后,请进行永久性更改以解决问题。对于故障硬件,请更换故障组件。

分类第 1 层问题

您可以按如下方式分类第 1 层问题

有关每种问题类型的具体指导,请参阅以下各节。

隔离故障硬件

当您怀疑链路中的某个组件出现故障时,请使用以下方法确定哪个组件出现故障。

首先,在尽可能低的级别识别故障行为,然后设计一个最能显示该行为的测试。使用 l1-show 的层次结构输出找到最佳指标。以下是一些您可以使用的测试示例

  • 无 RX 功率:检查 l1-show 输出的实际操作状态部分中的RX 功率
  • 远程端正在发送RX 故障:检查故障排除信息中是否显示邻居正在发送远程故障
  • 在不需要 FEC 时链路上的错误:检查 ethtool -S <swp> 中的 HwIfInErrors 计数器,以查看它们是否随时间递增。

尝试更换模块和光纤,以确定哪个组件损坏。

  • 用已知良好的电缆更换路径上的 DAC、AOC 或光纤跳线。测试是否表明症状发生变化?
  • 在本地和远程之间交换模块。测试是否表明症状随模块移动,还是停留在同一邻居上?
  • 环回测试:将其中一个模块移动到邻居,并将两个模块背靠背连接在同一交换机中,最好使用相同的电缆。现在测试表明什么?现在,将两个模块都移动到另一侧并重复。尝试将问题隔离到单根光纤、模块、端口、平台或配置。
  • 一次更换一个模块,更换为相同类型的不同模块;当前的模块可能已损坏。
  • 将每个模块更换为来自不同供应商的不同模块。使用 Cumulus Linux 交换机支持的模块。

断开或抖动的链路可能表现出以下任何或所有症状

  • l1-show 为实际操作状态返回链路状态:内核:断开硬件:断开
  • ip link show <swp> 返回 *<NO-CARRIER,BROADCAST,MULTICAST,UP>*。up 链路返回类似于 *<BROADCAST,MULTICAST,UP,LOWER_UP>* 的内容。
  • ip link show 每隔一两秒更改一次,表明链路正在抖动(up 或 down)。
  • /var/log/linkstate 中的日志消息指示载波正在抖动(up 或 down)。
  • 交换机未接收到任何 LLDP 数据,或者链路正在抖动。

要开始故障排除,请尽可能检查链路两端的 l1-show 输出。输出包含所有相关信息,可帮助排除链路故障。

cumulus@switch~$ sudo l1-show swp10
Port:  swp10
  Module Info
      Vendor Name: FINISAR CORP.          PN: FTLX8574D3BCL
      Identifier: 0x03 (SFP)              Type: 10g-sr
  Configured State
      Admin: Admin Up     Speed: 10G      MTU: 9216
      Autoneg: On                         FEC: Auto
  Operational State
      Link Status: Kernel: Up             Hardware: Up
      Speed: Kernel: 10G                  Hardware: 10G
      Autoneg: On (Autodetect enabld)     FEC: None
      TX Power (mW): [0.5267]
      RX Power (mW): [0.5427]
      Topo File Neighbor: qct-ix8-51, swp3
      LLDP Neighbor:      qct-ix8-51, swp3
  Port Hardware State:
      Compliance Code: 10G Base-SR
      Cable Type: Optical Module (separated)
      Speed: 10G                          Autodetect: Enabled
      Eyes: 411                           Grade: 41609
      Troubleshooting Info: No issue was observed.

从链路两端的 l1-show 输出的顶部到底部,询问下面列出的问题。

检查模块信息

Module Info
    Vendor Name: FINISAR CORP.          PN: FTLX8574D3BCL
    Identifier: 0x03 (SFP)              Type: 10g-sr
  • 模块供应商名称和供应商部件号是否与连接到交换机的模块匹配?此端口是否是存在链路问题的正确端口?是否安装了正确的模块?
  • 模块类型是否与此链路的技术匹配?例如,如果存在 100G DAC,此值是否为类型:100G-CR4?有关更多信息,请参阅合规性代码、以太网类型、Ethmode 类型、接口类型
  • 远程端的设备是否将模块识别为与本地交换机识别的以太网类型相同?供应商输出有所不同。如果远程设备不是 Cumulus Linux 设备,请查阅供应商文档以确定如何显示已安装模块的以太网类型。

检查配置状态

Configured State
    Admin: Admin Up     Speed: 10G      MTU: 9216
    Autoneg: On                         FEC: Auto
  • 管理状态:链路是否为管理状态 Up?链路是否已配置并启用?
  • 速度:配置的速度是否正确?它是否与远程端配置的速度匹配?
  • MTU:两端的 MTU 是否匹配?请注意,MTU 不匹配不会阻止链路启动,但会影响流量转发。
  • Autoneg:此设置是否与配置匹配,并且是否符合您的预期?请参阅自动协商
  • FEC:FEC 设置是否配置正确?请参阅FEC

检查实际操作状态

Operational State
    Link Status: Kernel: Up             Hardware: Up
    Speed: Kernel: 10G                  Hardware: 10G
    Autoneg: On (Autodetect enabld)     FEC: None
    TX Power (mW): [0.5267]
    RX Power (mW): [0.5427]
    Topo File Neighbor: qct-ix8-51, swp3
    LLDP Neighbor:      qct-ix8-51, swp3
  • 链路状态(内核和硬件):两者的当前状态是什么?
    • 通常,这些值应该同步。
    • 在排除链路断开问题时,这些值中的一个或两个为断开(通常两者都是)。
    • 在链路抖动问题中,这些值中的一个或两个可能每秒或更短时间更改一次,因此此字段的输出可能不代表下一时刻的值。
  • 速度(内核和硬件):实际操作速度是否与配置的速度匹配?
    • 当链路处于 up 状态时,内核和硬件实际操作值应彼此同步,并与配置的速度同步。
    • 当链路断开且自动协商开启时,内核值为未知!,因为硬件未同步到速度。
    • 当链路断开且自动协商关闭时,内核速度显示配置的值。硬件字段显示各种值,具体取决于特定硬件接口的实现。
  • AutonegAutodetect:通常,实际操作值与配置的值匹配。这仅供参考,但了解 autodetect 是否开启很有用。请参阅自动协商自动检测
  • FEC:此字段仅用于提供信息。它仅在链路处于 up 状态时显示实际的 FEC。
    • 当链路断开时,实际操作 FEC 为
    • 当链路处于 up 状态时,此字段显示链路上工作的实际 FEC 值。
  • TX 功率RX 功率(仅限光模块):如果模块支持激光功率 DDM/DOM,这些值是否在工作范围内?
    • 检查 ethtool -m <swp> 输出中的激光发送功率高/低报警激光接收功率高/低警告阈值,以查看预期的低值和高值是多少。
    • 短距离模块的发送功率应在 0.6 到 1.0 mW 范围内,接收功率应在 > 0.05 mW 范围内工作。
    • 长距离光模块的 TX 功率高于 1.0 mW。
    • 如有疑问,请查阅特定模块的技术规范。
    • 值为 *0.0000* 或 *0.0* 表示模块不支持 DDM/DOM TX 或 RX 功率,或者模块未发送或接收信号。
      • 如果 TX 功率为 *0.0000* 或 *0.0*,则表示模块不支持 TX DDM/DOM,或者模块激光器由于某种原因已关闭。
      • 如果 RX 功率为 *0.0000* 或 *0.0*,则表示模块不支持 RX DDM/DOM,或者模块接收器未接收到信号。
      • 值为 *0.0001* 表示模块支持 DDM/DOM,但模块未接收或发送信号。
        • 如果 TX 功率为 *0.0001*,则模块激光器可能由于某种原因被禁用。
        • 如果 RX 功率为 *0.0001*,则模块接收器未接收到信号。
      • 在 QSFP 模块上,检查四个通道中每个通道的值。有时只有一个通道发生故障,结果导致整个链路断开。
  • 拓扑文件邻居:如果您在交换机上配置了 ptmd 拓扑文件,则可以识别您期望的链路邻居。
  • LLDP 邻居:这是否与预期的邻居和端口匹配?
    • 此值是 LLDP 报告的邻居和端口。
    • 如果链路断开,此值通常为空白。

检查端口硬件状态

以下值来自 NVIDIA 端口固件

Port Hardware State:
    Compliance Code: 25GBASE-CR CA-S
    Cable Type: Passive copper cable
    Speed: N/A                          Autodetect: Enabled
    Eyes: 0                             Grade: 0
    Troubleshooting Info: Auto-negotiation no partner detected.
  • 合规性代码:
    • 固件识别的接口类型是否与已安装模块的类型匹配?固件是否正确识别模块类型?
  • 电缆类型:固件识别的电缆类型是否与已安装的电缆类型匹配?
  • 速度:
    • 速度是否与预期的速度匹配?
    • 如果自动协商开启且链路断开,则会显示 *N/A* 或您不期望的速度。
  • 自动检测:
    • 如果为已启用,则链路算法可能与邻居发生故障。
    • 尝试禁用自动协商并设置强制速度。
    • 有关更多指导,请参阅自动协商自动检测
  • 眼图等级
    • 如果链路未启动,则显示全零。
    • 如果链路已启动,则显示 RX 眼图 (mV) 和等级值。
    • 有关更多信息,请参阅眼图
  • 故障排除信息:
    • 固件评估的问题是什么?虽然此信息位于输出的末尾,但有时这是查找基本指导的首要位置。
    • 示例
      • 端口已通过命令关闭。请检查接口是否已启用。 配置端口,使其处于管理状态 Up
      • 电缆已拔下。 固件未检测到模块。检查此端口中是否有模块,或重新安装模块。
      • 自动协商未检测到合作伙伴。 链路断开,因为它没有看到邻居。这对于单独确定原因没有太大帮助。
        • 检查两侧的配置是否存在自动协商或 FEC 配置不匹配的情况。
        • 如果链路是光纤链路且模块支持 RX/TX 功率 DDM/DOM,请检查 l1-show实际操作状态输出中的 *RX 功率*和 *TX 功率*值,以帮助确定哪个组件发生故障。
        • 按照隔离故障硬件中的步骤操作;使用此值或 *RX/TX 功率* DDM/DOM 值作为测试。
      • 强制模式未检测到合作伙伴。 自动协商或自动检测已关闭,链路断开,因为它没有看到邻居。这对于单独确定原因没有太大帮助。
        • 检查两侧的配置是否存在速度、自动协商或 FEC 配置不匹配的情况。
        • 如果链路是光纤链路且模块支持 RX/TX 功率 DDM/DOM,请检查 l1-show实际操作状态输出中的 *RX 功率*和 *TX 功率*值,以帮助确定哪个组件发生故障。
        • 按照隔离故障硬件中的步骤操作;使用此值或 *RX/TX 功率* DDM/DOM 值作为测试。
      • 邻居正在发送远程故障。链路的这一端正在接收来自邻居的数据,但邻居未接收到来自本地端口的可识别数据。有关详细信息,请参阅上面信号完整性中的 *RX 故障*。本地设备未发送数据,远程接收器未接收到可识别数据或正在接收损坏的数据。

RX 信号故障示例

以下是来自 l1-show 的输出,适用于通道 3 上 RX 发生故障的 AOC(在 swp6 上)。由于 AOC 是集成的光纤组件,因此您必须更换整个组件。

  Port:  swp6
  Module Info
      Vendor Name: XXXXX                  PN: AOC-XXXX
      Identifier: 0x0d (QSFP+)            Type: 40g-sr4
  Configured State
      Admin: Admin Up     Speed: 40G      MTU: 9216
      Autoneg: Off                        FEC: Off
  Operational State
      Link Status: Kernel: Down           Hardware: Down <=Link is down, Kernel and Hardware
      Speed: Kernel: 40G                  Hardware: 40G
      Autoneg: Off                        FEC: None (down)
      TX Power (mW): [1.1645, 1.171, 1.1155, 1.0945]
      RX Power (mW): [0.159, 0.1732, 0.153, 0.0067]  <=Low power on lane 3
      Topo File Neighbor: switch_1, swp6
      LLDP Neighbor:      None, None
  Port Hardware State:
      Rx Fault: Local  <=Local RX Failed  Carrier Detect: no <=No bi-directional communication
      Rx Signal: Detect: YYYY             Signal Lock: YYYN  <=No signal lock on lane 3
      Ethmode Type: 40g-sr4               Interface Type: SR4
      Speed: 40G                          Autoneg: Off
      MDIX: ForcedNormal, Normal          FEC: Off
      Local Advrtsd: None                 Remote Advrtsd: None
      Eyes: L: 357, R: 326, U: 211, D: 219, L: 328, R: 312, U: 206, D: 211,
            L: 359, R: 343, U: 211, D: 200, L: 0, R: 0, U: 0, D: 0 <= No valid eye on lane 3

以下是通道 0 和 1 发生故障的 AOC 的 l1-show 输出。请注意,信号锁定正在跳动,有时显示 *Y*。您必须更换 AOC。

Port:  swp8
  Module Info
      Vendor Name: XXXX                   PN: AOC-XXXX
      Identifier: 0x0d (QSFP+)            Type: 40g-sr4
  Configured State
      Admin: Admin Up     Speed: 40G      MTU: 9216
      Autoneg: Off                        FEC: Off
  Operational State
      Link Status: Kernel: Down           Hardware: Down <=Link is down, Kernel and Hardware
      Speed: Kernel: 40G                  Hardware: 40G
      Autoneg: Off                        FEC: None (down)
      TX Power (mW): [1.1762, 1.1827, 1.1272, 1.1062]
      RX Power (mW): [0.0001, 0.0001, 0.5255, 0.64]  <=Low power on lanes 0,1
      Topo File Neighbor: switch_2, swp10
      LLDP Neighbor:      None, None
  Port Hardware State:
      Rx Fault: Local  <=Local RX Failed  Carrier Detect: no <=No bi-directional communication
      Rx Signal: Detect: YYYY             Signal Lock: YNYY  <=No lock on lane 1 at moment of capture
      Ethmode Type: 40g-sr4               Interface Type: SR4
      Speed: 40G                          Autoneg: Off
      MDIX: ForcedNormal, Normal          FEC: Off
      Local Advrtsd: None                 Remote Advrtsd: None
      Eyes: L: 0, R: 0, U: 0, D: 0, L: 0, R: 0, U: 0, D: 0,  <=No valid eyes on lanes 0,1
            L: 359, R: 359, U: 214, D: 226, L: 359, R: 359, U: 243, D: 264

如果您有信号完整性问题,或者您未在特定模块或电缆类型上配置所需的 FEC 类型,则链路会发生物理错误。

高速以太网中的目标误码率 (BER) 为 10-12。当 BER 超过此值时,请配置正确的 FEC 设置或更换边际模块、电缆或光纤跳线。如果配置正确的 FEC 的链路上的最终 BER 仍然不可接受,则需要更换链路中的硬件组件之一以解决错误。

有关更多详细信息,请参阅FEC排除信号完整性问题

要查看端口的错误计数器,请运行 ethtool -S <swp> | grep Errors 命令。如果 FEC 处于开启状态,则这些计数器仅计算 FEC 未纠正的错误。

在 NVIDIA 交换机上,要查看 FEC 在链路上纠正的误码计数,请运行 sudo l1-show <swp> --pcs-errors 命令。

由于错误可能在链路 up 和 down 转换期间发生,因此最好在一段时间内检查错误计数器,以确保它们定期递增,而不是显示链路上次转换 up 或 down 时的陈旧计数。/var/log/linkstate 日志文件显示交换机上的历史链路 up 和链路 down 转换。

排除信号完整性问题

信号完整性问题通常是各种症状的根本原因

  • 如果信号完整性非常差或不存在,则链路保持断开状态。

  • 如果信号完整性太差,则链路可能会在 FEC 开启或未开启的情况下抖动。

  • 如果信号完整性较差,则链路可能会显示物理错误计数。根据链路速度和电缆类型,模块或电缆可能在信号完整性方面存在一定的误差容限。在这些情况下,使用 FEC 纠正错误,以使链路上的目标 IEEE 误码率 (BER) 达到 10-12。有关指导,请参阅FEC

    如果 FEC 处于开启状态,并且比特流无法可接受地恢复,则链路保持断开状态。如果信号完整性较差,但糟糕到 FEC 无法纠正可接受的错误率,则当 FEC 发出重启链路的信号以尝试恢复可接受的比特流时,链路会抖动。

要查看端口的错误计数器,请运行 ethtool -S <swp> | grep Errors 命令。如果 FEC 处于开启状态,则这些计数器仅计算 FEC 未纠正的错误。

要查看 FEC 在链路上纠正的误码计数,请运行 sudo l1-show <swp> --pcs-errors 命令。

信号完整性问题是物理问题,通常,您必须更换链路中的某些硬件组件才能修复链路。按照隔离故障硬件中的步骤操作,以隔离和更换故障硬件组件。

在极少数情况下,如果交换机无法正确识别模块并且模块类型错误(主动而不是被动),则可能会导致信号完整性问题。

有关更多详细信息,请参阅主动和被动模块及电缆合规性代码、以太网类型、Ethmode 类型、接口类型检查模块信息

排除 MTU 大小不匹配问题

通常,当 OSPF 邻接关系等较高层协议失败或您丢失不可分片的数据包时,会出现 MTU 大小不匹配的情况。通常,MTU 设置不匹配不会影响链路实际操作状态。

要排除可疑的 MTU 问题,请查看 l1-show 输出中的配置状态部分

Configured State
    Admin: Admin Up     Speed: 10G      MTU: 9216 <===
    Autoneg: On                         FEC: Auto
  • 将 MTU 配置与邻居的配置进行比较。它们是否匹配?
  • 请注意,不同的供应商有时对 MTU 值的解释不同,并且可能与另一供应商相差几个字节。研究供应商文档以确定是否需要在配置中调整此值以匹配邻居。

排除高功率模块问题

SFF 规范允许不同功耗级别的模块,以及用于启用更高级别的请求和授权程序。

SFP 模块可以有 3 个不同的功率等级

  1. 1.0W
  2. 1.5W
  3. 2.0W

Cumulus Linux 默认启用功率等级 2 (1.5W)。所有 Cumulus Linux 交换机都同时支持所有 SFP 端口上的 1.5W。

QSFP 模块可以有 8 个不同的功率等级

  1. 1.5W
  2. 2.0W
  3. 2.5W
  4. 3.5W
  5. 4.0W
  6. 4.5W
  7. 5.0W
  8. 10.0W

低功耗模式是功率等级 1 (1.5W)。这是初始启动期间的状态。

硬件初始化后,Cumulus Linux 默认在 QSFP 模块上启用正常功率模式— 功率等级 2-4,2.0W 到 3.5W。

所有 Cumulus Linux 交换机都同时支持所有 QSFP 端口上的 3.5W。

某些模块需要高功率模式来驱动长距离激光器。功率等级 5-8 — 4.0W、4.5W、5.0W、10.0W — 是高功率模式。如果模块需要高功率模式,它可以请求它,如果端口支持,交换机将授予它。

要确定交换机是否支持更高的功率模式,请查阅硬件制造商的交换机功率限制规范。

NVIDIA 交换机对高功率模块的支持各不相同。例如,在某些 NVIDIA Spectrum 1 交换机上,只有前两个和后两个 QSFP 端口支持高达 QSFP 功率等级 6 (4.5W),并且只有前两个和后两个 SFP 端口支持 SFP 功率等级 3 (2.0W) 模块。其他 Spectrum 1 交换机根本不支持高功率端口。有关哪些端口支持高功率模块的确切详细信息,请查阅硬件制造商的规范。

总线总功率额定值是每种端口类型的默认功率额定值(SFP:1.5W,QSFP:3.5W)乘以总线上存在的每种类型的端口数量。

要查看高功率模块的请求和启用状态,请查看 sudo ethtool -m 的输出。以下输出来自功率等级在 1 到 4 之间的设备(1.5W 到 3.5W)。模块未请求高功率等级,或者交换机未启用它。

cumulus@switch:mgmt:~# sudo ethtool -m swp53
        Identifier                                : 0x11 (QSFP28)
        Extended identifier                       : 0x00
        Extended identifier description           : 1.5W max. Power consumption <= ignore for high power modules
        Extended identifier description           : No CDR in TX, No CDR in RX
        Extended identifier description           : High Power Class (> 3.5 W) not enabled <= high power mode not requested or enabled

以下是来自功率等级 7 (5.0W) 模块的输出。模块正在请求功率等级 7,但交换机不支持或未启用它。交换机在此端口上仅支持功率等级 6。

cumulus@switch:mgmt:~# sudo ethtool -m swp49
[sudo] password for cumulus:
       Identifier                                : 0x11 (QSFP28)
       Extended identifier                       : 0xcf
       Extended identifier description           : 3.5W max. Power consumption  <= ignore for high power modules
       Extended identifier description           : CDR present in TX, CDR present in RX
       Extended identifier description           : 5.0W max. Power consumption,  High Power Class (> 3.5 W) not enabled <= Request 5.0W, not enabled
 

以下是来自功率等级 6 (4.5W) 模块的输出。模块正在请求功率等级 6,并且交换机已启用它。

cumulus@switch:mgmt:~# sudo ethtool -m swp3
        Identifier                                : 0x11 (QSFP28)
        Extended identifier                       : 0xce
        Extended identifier description           : 3.5W max. Power consumption <= ignore for high power modules
        Extended identifier description           : CDR present in TX, CDR present in RX
        Extended identifier description           : 4.5W max. Power consumption,  High Power Class (> 3.5 W) enabled <= Request 4.5W, enabled

排除 I2C 问题

以太网交换机包含多个 I2C 总线,这些总线设置为供交换机 CPU 与系统内的端口模块、风扇和电源进行低速控制信息通信。

在极少数情况下,具有缺陷 I2C 组件或固件的端口模块可能会发生故障并锁定一个或多个 I2C 总线。根据交换机的特定硬件设计以及故障发生的方式,此故障会显示不同的症状。通常,流量在这种故障情况下会继续工作一段时间,但有时故障会导致模块配置不正确,从而导致链路故障或链路上的错误率增加。在最坏的情况下,交换机重新启动或锁定。

由于 I2C 问题存在于模块的低速控制电路中,因此高速流量速率不会影响模块的数据侧。Cumulus Linux 中的软件错误不会导致这些问题。

当 I2C 总线出现问题或锁定时,已安装的端口模块可能不再显示在 sudo l1-show <swp>sudo ethtool -m <swp> 的输出中。/var/log/syslog 中可能存在大量 smbusi2cEEPROM read 错误。在一个模块锁定总线后,一些或所有其他模块随后也会出现问题,这使得几乎不可能判断哪个模块导致了故障。

低质量的 I2C 组件或端口模块中的缺陷设计会导致大量的 I2C 锁死。 低价供应商模块是造成大多数故障的原因,但即使是高价、高质量的模块也可能发生故障,只是发生率要低得多; 它们具有更高的 MTBF 评级。

逐个移除端口模块,直到问题消失,您或许可以解决此问题; 这可能表明哪个模块导致了故障。 然而,总线经常以某种方式阻塞,需要重启或断电重启才能清除 I2C 故障。 以这些方式之一清除故障可以暂时解决问题,但是当条件再次合适时,几小时、几天或几个月后,有缺陷的 I2C 组件可能会再次发生故障并锁定交换机。

在最坏的情况下,一台交换机可能从同一供应商批次中拥有多个不良或有缺陷的 I2C 模块,这使得难以确定哪个或哪些模块是坏的。

因为 I2C 问题可能非常有害,通常在问题清除后很久才会再次出现,所以要迅速而有力地处理它们。

要验证是否正在发生 I2C 故障,请运行 sudo tail -F /var/log/syslog 并查找持续出现或成 bursts 出现的 smbusi2cEEPROM read 错误。

根据您发现问题时的故障情况,选择何时解决此问题; 立即解决或在维护窗口期间解决。

  • 如果流量或交换机运行不正常,并且您无法通过冗余网络路由流量,则必须立即采取措施。
  • 如果您可以绕过发生故障的交换机路由流量,从而可以在发生故障的交换机上进行故障排除,请继续重路由流量,以便找到合适的时间来对发生故障的交换机进行故障排除。
  • 要排除故障并恢复交换机正常工作,请根据情况的紧急程度使用以下选项
    • 逐个移除端口模块,查看情况是否消除。 这种方法清除 I2C 故障的可能性较低,但可能对流量的影响较小。 如果成功,此方法可能会揭示问题模块。
    • 通过运行 sudo systemctl reset-failed ; sudo systemctl restart switchd 命令来重启 switchd。 验证重启完成后情况是否消除。 这种方法清除 I2C 故障的可能性中等,对流量的影响也中等。 它没有提供一种方法来发现哪个模块发生故障。
    • 重启交换机并验证重启完成后情况是否消除。 这种方法清除 I2C 故障的可能性很高,但对流量的影响也很大。 它没有提供一种方法来发现哪个模块发生故障。
    • 断电重启交换机并验证重启完成后情况是否消除。 这种方法清除 I2C 故障的可能性非常高,但对流量的影响也非常大。 它没有提供一种方法来发现哪个模块发生故障。
    • 如果 I2C 故障在断电重启后很快再次发生,您需要结合二分法策略,每次移除一半的模块并断电重启。
    • 如果在移除所有模块并断电重启后,I2C 错误仍然发生,则下一步是在断电重启之间逐个移除每个电源和风扇,以查看其中一个设备是否阻塞了 I2C 总线。
    • 如果您移除所有模块和每个电源,并且您独立测试了风扇,但 I2C 故障仍然发生,那么最后一步是更换交换机。

如果交换机由于上述方法之一再次运行,但您尚未确定导致故障的模块,请尝试以下方法

  • 如果 syslog 文件中有在故障发生前某个模块偶尔出现错误的记录,请首先移除或更换该模块。
  • 更换任何过去曾引起问题的模块。
  • 更换交换机中的所有模块。

如果需要,请联系 NVIDIA 企业支持团队 以获得更多帮助。