线缆检测
更新时间: 2026/04/23
在Gitcode上查看源码

线缆检测

而线缆检测会读取实际的插线情况,并和PSR(白名单)上配置的情况进行对比,如果有不符合预期的插线会进行告警。

线缆告警:

  • 0x28000033(Cable.UBNotPresent)代表对于某个组件的线缆配置,当前线缆连线缺了
  • 0x28000031(Cable.UBIncorrectConnection)代表对于某个IEU,A1口预期连BCU的B1,A2口预期连BCU的B2,但是IEU A1口连了BCU B2口,连错了。
  • 0x28000035(Cable.UnitNotSupported)代表对于某个IEU的口,连了BCU的A口,但是在配置中不需要连A口。
  • 0x2800003D(Cable.UnitUBNotPresent)线缆连线缺失的特殊情况,在部分场景下支持将缺线精确到具体的线缆上。

1. 线缆信息

pcie_device通过SMC命令字读取线缆信息,有如下内容:

信息说明举例
UID组件ID,对于同一型号组件唯一"00000001040302023940"
SrcPortName源端端口标识,确定线缆在BCU上的源端端口"A1a"
TargetPortId对端端口ID,确定线缆在组件上的端口编号17
Index所接CPU的ID,部分机型没有1
BCUIndex所接BCU的ID,部分不通过TopoNode区分BCU的机型有1

1.1 线缆信息能确定什么

线缆信息可以确定某一个BCU上的源端端口,它插了哪个型号的组件的哪个端口,它从哪个BCU的哪个CPU出。

1.2 线缆信息不能确定什么

线缆信息不能精确到具体的组件,它只能确定对端是某个型号的组件,如下图中将两个同UID组件的线交叉,依靠线缆检测信息无法检测错插

插法1:正常连接

插法2:交叉错插

2. 线缆告警事件

线缆告警事件分为四种类型,分别对应不同的线缆连接异常场景。告警检测流程如下:

2.1 线缆错插告警(0x28000031)

告警代码: Cable.UBIncorrectConnection

告警含义: 线缆在基础板(BCU)的一端连接正确,但在对端组件(IEU/EXU/SEU)上的端口连接错误。

触发条件(TOPO_STATUS.INCORRECT_CONNECTION = 2):

  • 线缆检测信息中的SrcPortName与白名单配置中的SrcPortName匹配
  • 线缆检测信息中的TargetPortID与白名单配置中的TargetPortID不匹配

一般情况:

说明: 配置要求A1a接端口17、A2a接端口33,但实际A1a接了端口33、A2a接了端口17,触发线缆错插告警。

告警位置: BCU(基础板),精确到基础板UBC丝印(如A1a、A2a)。

关键日志:

  • 日志路径:dump_info\LogDump\app.log
  • 关键字:INCORRECT_CONNECTIONBizTopoMonitor

2.2 组件不支持告警(0x28000035)

告警代码: Cable.UnitNotSupported

告警含义: 线缆连接了BCU上的某个UBC端口,但该端口在白名单配置中未被使用(未配置SrcPortName)。

触发条件(TOPO_STATUS.UNIT_NOT_SUPPORT = 3):

  • 线缆检测信息中的UID不在白名单配置中
  • 或线缆检测信息中的SrcPortName不在白名单配置的SrcPortName列表中

一般情况:

说明: 白名单只配置了A1a和A2a端口,但实际线缆连接了A3a端口,触发组件不支持告警。

告警位置: BCU(基础板),精确到基础板UBC丝印。

特殊情况(FlexIO/EXU):

对于FlexIO和EXU组件,当config.matched_times == 0时,状态为UNIT_NOT_EXIT(组件不存在),而非UNIT_NOT_SUPPORT。这是因为FlexIO/EXU可能存在多种配置,未匹配成功时不一定是不支持。

2.3 线缆漏插告警(0x28000033)

告警代码: Cable.UBNotPresent

告警含义: 对于某个组件的线缆配置,当前实际连接的线缆数量少于白名单配置要求的数量。

触发条件(TOPO_STATUS.INCOMPLETE_CONNECTION = 5):

  • connected_times > 0(有线缆连接)
  • matched_times < #config.src_ports_name(连接数量少于配置数量)

一般情况:

说明: 白名单配置要求连接A1a、A2a、A3a三个端口,但实际只连接了A1a,触发线缆漏插告警。

告警位置: PSR,精确到组件UID和组件丝印。

特殊情况(SEU硬盘背板):

SEU组件的线缆漏插告警有特殊逻辑,需要结合bios加载状态和RAID卡存在情况判断:

  1. bios未加载完成时: 状态为IGNORE_VALUE(255),不产生告警,防止BMC重启时误告警
  2. 发现RAID卡时: 状态为MATCHED,不告警(因为RAID卡可能通过其他方式连接)
  3. bios加载完成且无RAID卡: 状态为INCOMPLETE_CONNECTION,产生线缆漏插告警

关键代码逻辑(topo_monitor.lua):

lua
-- SEU场景特殊处理
if is_seu then
    status = def.TOPO_STATUS.IGNORE_VALUE  -- bios未加载完时忽略
end
if is_seu and monitor.has_raid then
    status = def.TOPO_STATUS.MATCHED  -- 有raid卡时不告警
end
if is_seu and monitor.bios_complete_count >= SMBIOS_CHECK_COUNT and not monitor.has_raid then
    status = def.TOPO_STATUS.INCOMPLETE_CONNECTION  -- 无raid卡时告警
end

2.4 线缆精细化漏插告警(0x2800003D)

告警代码: Cable.UnitUBNotPresent

告警含义: 基于PSR的线缆漏插告警,针对组件上行连接器的必插线缆漏插情况,告警精确到组件上的线缆位置丝印。

触发条件:

  • 组件存在(UID匹配)
  • 组件上行连接器的某些必插线缆未连接
  • 基于所有配置的共同最大子集判断必插线缆

判断逻辑: 线缆精细化告警通过计算所有配置的共同最大子集来确定必插线缆。只有属于必插线缆的端口漏插才会产生精细化告警。

一般情况:

说明: 配置中有两种插法,插法1要求A1a和A2a都插,插法2只要求A1a。因此A1a是必插线缆(共同最大子集),A2a是可选线缆。当A1a未连接时,触发精细化告警;当只有A2a未连接时,只产生普通漏插告警。

共同最大子集计算:

假设组件有两种配置:

  • 配置1:SrcPortName = ["A1a", "A2a"],TargetPortID = [17, 33]
  • 配置2:SrcPortName = ["A1a"],TargetPortID = [17]

共同最大子集为:["A1a"] -> TargetPortID = [17]

只有端口17的线缆漏插才会触发精细化告警,端口33的线缆漏插只触发普通漏插告警。

告警位置: IEU(组件CSR),精确到组件线缆丝印。

关键代码逻辑(topo_monitor.lua):

lua
-- 找共同最大子集
self.solid_config[k].target_ports_largest_subset = self.solid_config[k].target_ports_lists[1]
for _, target_port_id_list in pairs(self.solid_config[k].target_ports_lists) do
    temp_set = {}
    for _, target_port in pairs(self.solid_config[k].target_ports_largest_subset) do
        if cmn.find(target_port_id_list, target_port) ~= nil then
            table.insert(temp_set, target_port)
        end
    end
    self.solid_config[k].target_ports_largest_subset = temp_set
end

3. 一键收集中的线缆信息

在一键收集日志中可以找到线缆连接信息,在/dump_info/AppDump/cable_info,如:

json
[BizTopoMonitor] BCU1 Port: name=A1a, status=1, unit=[uid=00000001040302023940, index=1, port_id=17]
[BizTopoMonitor] BCU1 Port: name=A2a, status=1, unit=[uid=00000001040302023940, index=1, port_id=33]

4. 小结

告警是在BCU(基础板),精确到基础板UBC丝印。

  • 0x28000031(Cable.UBIncorrectConnection),UB线缆或连接器连接错误。
  • 0x28000035(Cable.UnitNotSupported),组件不支持。

告警是在PSR,精确到组件UID、组件丝印。

  • 0x28000033(Cable.UBNotPresent),UB线缆不在位或连接器未插稳

告警是在IEU(组件CSR),精确到组件线缆丝印。

  • 0x2800003D(Cable.UnitUBNotPresent),组件UB线缆不在位或连接器未插稳

5. 代码流程

组件线缆不在位,组件UBC精细化告警