冷复位BMC产生电源冗余告警问题分析
更新时间: 2026/05/28
在Gitcode上查看源码问题背景
- 单板类型:NA;
- 软件版本:openUBMC 25.09;
- 涉及功能:事件&告警;
- 触发条件:冷重启BMC。
- 业务表现:预期重启正常无误告警;实际冷复位BMC偶现产生电源冗余告警。
问题复现步骤
冷复位BMC产生电源冗余告警。
关键日志信息
查看日志,确认报错如下:
定位过程
分析整体故障链路
关键组件交互分析
RedundancyFailure的状态
- 默认值:false(冗余正常)
- 触发为 true 的条件:
- AC 上电时检测到可用 PSU 数量 < 配置数量
- 系统运行中 PSU 故障或移除
- BMC 初始化阶段,主动设置为 true(来自 power_strategy 模块)
- 恢复为 false 的时机:
- 检测到所有 PSU 可用且输出稳定
- 依赖 OnePower 模块加载完成并上报状态
Event_PSURedundancyLost_01010A 触发逻辑
- 事件对象:Event_PSURedundancyLost_01010A
- 触发条件:Reading <= /PowerStrategy_1.RedundancyFailure
- 操作符:OperatorId: 5(表示“小于等于”)
- 条件值:Condition: 1
- Hysteresis(回差):0(无防抖)
这意味着:
- 当 RedundancyFailure == true(即值为 1)时:
- 1 <= 1 → True → 触发告警
- 当 RedundancyFailure == false(即值为 0)时:
- 0 <= 1 → 依然为 True,但这是“恢复”条件,不会重复触发
所以:只要 RedundancyFailure 曾短暂为 true,且持续时间足够触发事件判断,就会生成 SEL 告警。
日志中分析,确实存在异常时序:
text2025-07-21 07:56:15.119412 power_strategy NOTICE: base.lua(99): Sync object prop(NormalAndRedundancy_Supported): false 2025-07-21 07:56:19.610659 power_strategy NOTICE: energy_metric.lua(187): Set RedundancyFailure to true 2025-07-21 07:56:28.855209 power_strategy NOTICE: base.lua(99): Sync object prop(NormalAndRedundancy_Supported): false 2025-07-21 07:56:42.281822 event NOTICE: events.lua(110): System major count change 0 to 1 by [Event_PSRedundancyLost_01010A]RedundancyFailure 被设置为 true 约 23 秒后才触发告警(实际可能由事件轮询周期决定),在此期间,OnePower 尚未加载,无法确认 PSU 是否真实冗余失效。
问题原因
虽然 RedundancyFailure 为 false 表示冗余正常,但在 BMC 冷复位(Cold Reset)过程中,该状态会经历一个短暂的变化周期(false → true → false)。告警触发的原因是这个状态在短时间内为 true,而非 false。power_strategy 模块在 BMC 重启时,在 PSU 状态尚未同步前就将 RedundancyFailure 设置为 true,且未设置防抖。
解决方案
增加状态防抖机制:
- 在 PowerStrategy_1.RedundancyFailure 从 false 变为 true 时,设置一个 30 秒的等待窗口,仅当持续为 true 才触发事件。
- 修改 Event_PSURedundancyLost_01010A 的 Hysteresis 属性为 30(单位秒)。
延迟冗余状态判断:
- 将 RedundancyFailure 设置为 true 的逻辑,推迟到 OnePower 模块加载完成之后。
- 可通过监听 OnePower 的初始化完成信号来实现。
优化初始化流程:
- 在 energy_metric.lua(187) 中增加前置检查:
luaif OnePower.isInitialized() then RedundancyFailure = true end