冷复位BMC产生电源冗余告警

答案内容由AI生成,仅供参考:

冷复位 BMC 产生电源冗余告警问题分析

根据您提供的信息,问题并非 event 组件存在 Bug,而是由 BMC 冷复位过程中的时序逻辑异常 导致的 偶发现象。以下是基于提供的知识图谱和文档的详细分析。


:magnifying_glass_tilted_left: 问题本质:时序竞争导致误告警

虽然 RedundancyFailurefalse 表示冗余正常,但在 BMC 冷复位(Cold Reset)过程中,该状态会经历一个短暂的变化周期(falsetruefalse)。告警触发的原因是这个状态在短时间内为 true,而非 false


:bar_chart: 详细分析与链路还原

1. 整体故障链路

graph TD
    A[BMC 冷复位] --> B[系统重启初始化]
    B --> C[PowerStrategy_1.RedundancyFailure 设置为 true]
    C --> D[OnePower 组件尚未加载]
    D --> E[PSU 状态未同步]
    E --> F[RedundancyFailure 持续为 true 超过阈值]
    F --> G[Event_PSURedundancyLost_01010A 被触发]
    G --> H[SEL 日志记录 PSU 冗余丢失告警]
    H --> I[BMC 完成初始化]
    I --> J[OnePower 加载完成]
    J --> K[RedundancyFailure 恢复为 false]
    K --> L[告警解除]

2. 关键组件交互分析

:white_check_mark: RedundancyFailure 状态机行为

  • 默认值false(冗余正常)
  • 触发为 true 的条件:
    • AC 上电时检测到可用 PSU 数量 < 配置数量
    • 系统运行中 PSU 故障或移除
    • BMC 初始化阶段,主动设置为 true(来自 power_strategy 模块)
  • 恢复为 false 的时机:
    • 检测到所有 PSU 可用且输出稳定
    • 依赖 OnePower 模块加载完成并上报状态

来源:搜索结果1 中的 CSR 配置字典 明确定义:

RedundancyFailure: 冗余失效(当环境电源数少于AC上电时的电源数时,置为true)

:white_check_mark: Event_PSURedundancyLost_01010A 触发逻辑

  • 事件对象Event_PSURedundancyLost_01010A
  • 触发条件Reading <= /PowerStrategy_1.RedundancyFailure
  • 操作符OperatorId: 5(表示“小于等于”)
  • 条件值Condition: 1
  • Hysteresis(回差)0(无防抖)

来源:知识图谱中 DiscreteSensor_PSRedundancy_01010AEvent_PSURedundancyLost_01010A 的关系。

这意味着:

  • RedundancyFailure == true(即值为 1)时:
    • 1 <= 1True → 触发告警
  • RedundancyFailure == false(即值为 0)时:
    • 0 <= 1 → 依然为 True,但这是“恢复”条件,不会重复触发

:warning: 所以:只要 RedundancyFailure 曾短暂为 true,且持续时间足够触发事件判断,就会生成 SEL 告警


3. 冷复位过程中的异常时序

根据 文档 ID: 1 的日志分析:

2025-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]

可以看到:

  1. RedundancyFailure 被设置为 true
  2. 23 秒后 才触发告警(实际可能由事件轮询周期决定)
  3. 在此期间,OnePower 尚未加载,无法确认 PSU 是否真实冗余失效

:puzzle_piece: 为什么是偶发问题?

  • BMC 冷复位时间间隔为 15 分钟(来自 KG BMC 实体描述)
  • 每次重启后,OnePower 模块加载时间存在波动
  • 只有当 RedundancyFailure=true 的持续时间 超过事件检测延迟,才会触发告警
  • 因此表现为 概率性出现(656 次中出现 56 次)

:white_check_mark: 是否为 Event 组件 Bug?

:cross_mark: 不是 Bug

  • Event 组件严格按照 Reading <= Condition 判断:
    • true (1) <= 1 → 满足条件 → 触发告警
    • 这是正确的行为
  • 真正问题是 power_strategy 组件在初始化阶段过早设置 RedundancyFailure=true,且未设置状态防抖

:hammer_and_wrench: 根本原因总结

项目 说明
根本原因 power_strategy 模块在 BMC 重启时,在 PSU 状态尚未同步前就将 RedundancyFailure 设置为 true
触发条件 OnePower 加载延迟,导致该状态持续时间过长
告警生成 Event_PSURedundancyLost_01010A 正确检测到 RedundancyFailure=true 并告警
问题性质 逻辑时序缺陷,非 event 组件 Bug

:white_check_mark: 建议解决方案

  1. 增加状态防抖机制

    • PowerStrategy_1.RedundancyFailurefalse 变为 true 时,设置一个 30 秒的等待窗口,仅当持续为 true 才触发事件。
    • 修改 Event_PSURedundancyLost_01010AHysteresis 属性为 30(单位秒)。
  2. 延迟冗余状态判断

    • RedundancyFailure 设置为 true 的逻辑,推迟到 OnePower 模块加载完成之后
    • 可通过监听 OnePower 的初始化完成信号来实现。
  3. 优化初始化流程

    • energy_metric.lua(187) 中增加前置检查:
      if OnePower.isInitialized() then
          RedundancyFailure = true
      end
      

:pushpin: 参考资料

  • CSR配置字典之PowerStrategy类:定义了 RedundancyFailure 的语义
  • 事件定制告警配置机制介绍:说明了 EventDirHysteresis 的作用
  • KG 中的 Event_PSURedundancyLost_01010ADiscreteSensor_PSRedundancy_01010A:确认了事件触发逻辑

:white_check_mark: 结论:该问题为 初始化时序缺陷,建议在 power_strategy 模块中增加对 OnePower 的依赖判断,并在事件配置中增加 Hysteresis 防抖,即可解决偶发告警问题。

相关链接:

  1. 2506版本 BMC重启时,概率出现PSU冗余失败告警
  2. 离散传感器新增分享
  3. powercycle测试中BMC服务发生异常,导致关机后没有开机
  4. 关于电源主备的问题
  5. CSR配置字典之PowerStrategy类 | 文档中心 | openUBMC