约 3 分钟

SM5396/BCM5396 排查丢包时值得盯的几个寄存器

排查交换芯片丢包时,最费时间的往往是不知道该看哪里。这篇记录调试 SM5396 时最有用的几个寄存器,以及它们能回答什么问题。SM5396 的手册写明寄存器与 BCM5396 相同,所以细节要查 BCM5396 手册。

值得盯的寄存器

以下寄存器都在 SerDes 页,页号为 0x10 + 端口号。

寄存器 作用 要点
STS1(0x28) 看链路状态和发生过的错误 bit15:7 是锁存错误位,读清;bit6:0 是当前状态,其中 bit1 是 link
ERR_CNT(0x2E) 统计误码和 CRC 错误 高 8 位是 BER,累加,到 FF 封顶,用 CTRL2 bit14 清零;低 8 位是 CRC,读清,到 FF 封顶
CTRL1(0x20) 决定能不能数到 CRC bit7 CRC_DIS 默认为 1,也就是 CRC 检查默认关闭;bit11 决定 ERR_CNT 低 8 位计 CRC 还是接收包数
MII_STS(0x02) 看 link 状态 link 位锁存低,第一次读到的可能是历史状态,要读两次

有两点最容易漏掉:

STS1 的错误位

STS1 里最关键的是这三个错误位,它们能区分误码有没有造成丢包:

怎么看 BER 和 CRC

BER 反映链路质量,CRC 反映实际丢帧。 BER 高不一定丢包,要看误码是否落在帧内。

两者都是本端口接收方向的统计。 哪个口的计数高,就查发往这个口的那条路径,问题的方向由此确定。

BER 是定位利器。 丢包是低概率事件,要等很久才能碰上一次,而 BER 每秒都有数据。不用等丢包,每秒采样一次各端口的 BER,就能比较各条链路的好坏。有问题的链路通常一眼就能看出来,健康的端口 BER 基本为 0。

ping 的流量小,会掩盖问题。 每秒几百的 BER 也可能只丢一两个包,换成大流量可能严重得多。

排查方法

访问寄存器的坑

其他容易踩的坑

关于本文

由 Shane 撰写, 采用 CC BY-NC 4.0 许可协议.

#SM5396#BCM5396#交换机#SerDes#嵌入式