问题描述
设备拓扑:

模拟Switch下挂的设备的UCE告警,查询到有上报dev bus的0x88
但从SEL查看到上报的是RootPort的BDF,不是设备的BDF
从获取到的属性来看,也是0x86:
bmc.kepler.Systems.FDMDomain.UnknownPCIeRASCollector
BandwidthReduction=0
CorrectableError=0
CorrectableErrorOverfrequency=0
CorrectableErrorStorm=0
DevBus=134
DevDevice=0
需要支持上报设备级BDF号,用于定位Switch下挂的哪个设备告警
答案内容由AI生成,仅供参考:
总结:
要实现Switch下挂设备UCE告警中的设备级BDF上报,您需要在SR配置中确保下挂设备被正确识别并创建独立的PCIeDevice对象,然后在事件定义中引用该对象的设备BDF属性(DevBus、DevDevice、DevFunction),并检查FDM和RAS收集器的处理逻辑是否将正确的设备BDF传递给告警接口。具体配置可参考pcie_device组件的拓扑建立和事件注册流程(如 [2] 中的 register_rpc 及事件模板),必要时需要为Switch下挂的每个设备单独定义事件对象。
点击此处查看详细分析解答
根据提供的上下文,您所描述的问题(触发Switch下挂设备的UCE,但SEL上报的是RootPort的BDF而非设备自身的BDF)的核心原因在于:当前事件配置中关联的PCIeDevice对象是根端口(Root Port)或桥设备(即Switch对应的根BDF),而非下挂的具体设备对象。
在上下文中,与PCIe设备BDF相关的属性有明确区分:
- RootBDF(桥BDF):对应PCIeDevice资源树对象的
Bus、Device、Function 属性,表示PCIe桥或根端口的总线地址。
- 设备BDF(DevBDF):对应PCIeDevice资源树对象的
DevBus、DevDevice、DevFunction 属性,表示设备自身的总线地址。
从文档 [3] 和知识图谱(PCIeDevice_1)可知,PCIeDevice对象同时承载这两组BDF信息。但您观察到的 UnknownPCIeRASCollector 属性中仅出现了 DevBus=134,而SEL告警却显示为RootPort的BDF,说明该RAS收集器或事件触发逻辑可能只提取了根BDF,或未正确关联下挂设备对应的PCIeDevice对象。
要支持上报设备级BDF,根据上下文中的机制,需要确保:
-
为每个下挂设备创建独立的PCIeDevice对象
在PCIe设备自动发现过程中,pcie_device组件会依据BIOS上报的BDF(或通过PMU查询的四元组)为每个物理设备创建对应的PCIeDevice对象(如文档“PCIe设备零配置纳管”所述)。这些对象会包含该设备自身的 DevBus/DevDevice/DevFunction 属性(参考 [3] 中HuangDing对BDF与RootBDF的说明)。
若Switch下挂设备未被正确发现,则无法在事件中引用其设备BDF。此时需要检查:
- 带内BIOS是否已成功上报该设备的BDF(步骤 [2] 中的“查看BDF上报情况”)。
- 丝印和PSR配置中的端口映射是否正确,以确保pcie_device能创建对应的PCIeDevice。
-
修改事件(Event_PCIeCardUCE)的Reading关联
在事件配置中(参考 [2] 中的示例),Event_PCIeCardUCE 的 Reading 字段原本指向 PCIeDevice_1.UCEByBIOS 或 PCIeDevice_1.UncorrectableError。如果该对象是根端口对象,则需要改为指向目标下挂设备对象的 UCEByBIOS(或 UncorrectableError),并确保事件的 Condition、OperatorID 等设置与FDM输出的设备级UCE状态匹配。
同时,设备对象的 UCEByBIOS 属性由FDM通过 ImplPCIEDevicesPCIEDevicesSetUCEByBIOS 方法设置(见 [2] 中 register_rpc 代码),该方法会调用 device_service:method_set_uce_by_bios。需要确认该方法在传递参数时是否包含了正确的设备BDF,从而使得后续的SEL能够提取设备级BDF。
-
检查UnknownPCIeRASCollector的采集逻辑
从上下文看,UnknownPCIeRASCollector 可能是一个用于收集未知或聚合PCIe错误的组件。当前它记录的是 DevBus=134(设备BDF)而非根BDF,但SEL仍然显示根BDF,这可能是因为告警生成时(如通过FDM或设备事件)仍使用了根端口的定位信息。需要确保在告警上报时,优先使用设备对象的 DevBus、DevDevice、DevFunction 作为SEL的BDF字段。
总结:
要实现Switch下挂设备UCE告警中的设备级BDF上报,您需要在SR配置中确保下挂设备被正确识别并创建独立的PCIeDevice对象,然后在事件定义中引用该对象的设备BDF属性(DevBus、DevDevice、DevFunction),并检查FDM和RAS收集器的处理逻辑是否将正确的设备BDF传递给告警接口。具体配置可参考pcie_device组件的拓扑建立和事件注册流程(如 [2] 中的 register_rpc 及事件模板),必要时需要为Switch下挂的每个设备单独定义事件对象。
当前社区对Switch下的功能没有原生支持,但是可以从如下方面入手适配:
-
pcie_device会在bios启动阶段收到带内上报的全量拓扑,见SetFDMInfoMultiSystemPCIeAddrInfo这条ipmi指令,可以根据收到的拓扑判断带内pcie树关系
-
26.03后的sdk,支持先使用bdf向pcie_device组件触发告警(而不是rootBDF)。
-
具体运作和上报方式见
支持BOX PCIe故障诊断功能.md
获取pcie_addr_info的能力迁移到pcie_device组件.md
支持不加载pcie switch下的设备.md
三篇详设,均在pcie_device仓库的docs仓下