【电源异常告警】频繁产生电源AClost事件(0x0300001F)

电源出现频繁告警 ,告警间隔约为数秒一次。告警发生期间,操作系统处于正常上电并运行状态。

从 BMC 日志来看,可记录到 GPIO 电源相关信号发生变化并触发告警;但进一步读取 CPLD 寄存器,显示电源状态为正常上电,未发现异常。

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

电源异常告警(0x0300001F)频繁触发分析报告

根据您提供的 BMC 日志告警事件列表,系统存在频繁的“AClost Alert”(交流电源丢失)事件(事件码:0x0300001F),但实际 CPLD 寄存器显示电源状态正常且操作系统持续运行。以下为基于上下文信息的综合分析。


:magnifying_glass_tilted_left: 事件现象总结

  1. 告警特征:

    • 告警级别:严重(橙色)
    • 告警主体:PSU(电源单元)
    • 事件码:0x0300001F(AClost Alert)
    • 频率:约数秒一次,高度重复
    • 状态:Asserted(已触发)
    • 时间戳差异明显:告警“产生时间”与“电源发生时间”相差约 3分钟
  2. 日志线索:

    • BMC 日志中多次出现:
      power_mgmt NOTICE: log_service.lua(235): Get AC lost signal
      power_mgmt NOTICE: add_event.lua(21): touch power failure alarm
      
    • 表明 Power Management Component(电源管理组件)检测到了来自 GPIO 的 AC 掉电信号
    • CPLD 寄存器读取显示电源状态正常,说明实际电源未中断。
  3. 系统状态:

    • 操作系统持续运行,无重启记录。
    • 系统未经历真正的断电或重启流程。

:puzzle_piece: 根本原因分析

结合知识图谱中的实体与关系数据,可以得出以下结论:

:white_check_mark: 根本原因:GPIO 中断信号误触发导致“AClost Alert”反复上报

依据如下:

来源 关键信息
AClost Alert (KG) 由 GPIO 中断触发,用于判断前一次电源故障原因
AClost AlertPower Management Component (KG) 电源管理组件通过 GPIO 中断 检测 AC 掉电事件
BMC 日志 明确记录 Get AC lost signal 多达 240 次以上
CPLD 状态 寄存器确认 无电源故障,证明实际未掉电
告警时间差 “电源发生时间”滞后于真实系统时间约 3 分钟 → 为虚假时间记录

:warning: 结论:电源并未真正丢失,而是 GPIO 引脚误检测到低电平信号(模拟掉电信号),导致电源管理模块错误地认为发生了 AC 掉电,从而反复触发告警。


:pushpin: 为何会产生虚假信号?

可能原因包括:

  1. 硬件干扰或噪声:

    • GPIO 信号线受到电磁干扰(EMI),导致瞬时电平跳变。
    • 电源线缆松动、接触不良或接地异常引入噪声。
    • PCB 设计缺陷,如走线过长未屏蔽。
  2. 固件 Bug 或防抖机制缺失/不足:

    • 尽管有防抖机制支持(见搜索结果 #2 CSR硬件监控防抖机制),但可能:
      • 未对 AC 信号配置足够长的防抖时间(如 contbin_H5L5 或更高)
      • 使用了不合适的防抖策略(例如未启用“持续二值防抖”)
      • 防抖失效或被绕过
  3. 电源模块(PSU)内部信号抖动:

    • PSU 内部电路异常,导致向 BMC 上报不稳定的 “AC Present” 信号。
    • 可通过 psu_service.lua 收集 black_box_info 进一步排查(日志中已有调用该功能的记录)。
  4. 电源冗余配置异常:

    • 虽然当前无直接证据,但类似事件(如 PSUREDUNDANCYLOST_010101)存在于系统中(参见文档块 DC1),提示电源链路可能存在间歇性异常。

:gear: 相关模块与流程链路

graph LR
A[PSU AC Present信号] --> B(GPIO引脚)
B --> C{BMC检测中断}
C --> D[Power Management Component]
D --> E[log_service.lua: Get AC lost signal]
E --> F[add_event.lua: 触发PowerFailureAlarm]
F --> G[生成事件码0x0300001F]
G --> H[Web界面显示告警]
  • 关键脚本文件:

    • log_service.lua:负责捕获并处理 AC lost 信号
    • add_event.lua:生成并上报事件
    • psu_service.lua:可收集 PSU 黑匣子日志用于诊断
  • 核心组件:

    • Power Management Component:主控逻辑,响应电源状态变化
    • BMC:远程管理系统,独立运行于主机操作系统
    • CPLD:提供真实的硬件电源状态,用于交叉验证

:white_check_mark: 解决建议

1. 检查并增强 GPIO 防抖机制

  • 查看当前 AC Present GPIO 引脚是否配置了防抖。
  • 推荐使用 contbin_H5L5 或更高级别的防抖策略(见搜索结果 #2)。
  • 示例改进方向:
    -- 配置AC信号防抖策略为高5次低5次
    debounce_strategy = "contbin_H5L5"
    

2. 采集 PSU 黑匣子日志

  • 利用 psu_service.lua 获取 PSU 的 black_box_info 数据:
    # 触发手动采集(如支持)
    lua psu_service.lua --psu_id 1 --get_black_box_info
    
  • 分析是否有 输入电压波动、Vin_Uv_Fault、PMBus通信异常 等记录。

3. 验证硬件连接与电源质量

  • 检查 PSU 到主板的 电源连接器是否牢固
  • 测量 AC 输入电压稳定性
  • 更换 PSU 或主板以排除硬件故障

4. 校准时间戳同步机制

  • BMC 与主机系统时间存在偏差,建议启用 NTP 同步。
  • 确保 record real ac time 的来源准确,避免误判历史事件。

5. 升级 BMC 固件(若存在已知 Bug)

  • 检查是否存在针对 GPIO 误报 AClost 的已知问题(如 openUBMC 版本 1.70.117 之前版本)。
  • 提交日志至厂商进行比对分析。

:toolbox: 附加说明

  • 事件码 0x0300001F 的含义:

    • 属于 Platform Event Trap (PET) 中的 Power System Failure 类型。
    • 子类型为 AC Loss / Power Outage
    • 对应知识图谱中的 AClost Alert 事件。
  • 为何操作系统无感知?

    • 因为是 BMC 独立采集的外部信号,若 PSU 输出未中断(+12V, +5V 正常),主板不会重启,系统继续运行。
  • 当前状态是否影响业务?

    • 不影响运行,但:
      • 干扰运维判断
      • 掩盖真实电源问题
      • 长期可能导致日志溢出或误操作

:white_check_mark: 总结

项目 内容
事件类型 虚假 AC 电源丢失告警
根本原因 GPIO 信号误触发,未有效防抖
真实状态 电源正常,CPLD 无异常
解决方案 增强防抖机制 + 收集黑匣子日志 + 检查硬件连接
建议优先级 (虽不影响运行,但易导致误判)

建议立即执行 PSU 黑匣子日志采集GPIO 防抖策略审查,以彻底关闭此误告警问题。

相关链接:

  1. 冷复位BMC产生电源冗余告警
  2. 通过 BoardID 解决 Atlas 300ipro/vpro/v 系列加速卡无法识别正常区分问题
  3. Web下电产生AC闪断,导致执行通电开机策略,OS重新上电
  4. cpld升级的即时生效和掉电生效问题
  5. CSR 配置字典总览 | 文档中心 | openUBMC

power_mgmt在gpio_drived.lua文件中会监听gpio中断信号,就会产生这个事件,正常是发生掉电会收到这个信号,需要看下为什么反复收到这个信号