拔出电源线后很快拔出电源,当前告警界面显示数量和告警信息不匹配,6分钟后才记录电源拔出事件

// 此模板仅供参考,如果不适用可以修改

问题描述

拔出电源线后很快拔出电源模块,系统事件有输入丢失事件,当前告警界面显示数量为1,但不显示具体告警信息,6分钟后才记录电源拔出事件

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:OpenUBMC2512

  • 硬件配置:[如 CPU、内存等]

重现步骤

  1. 拔出电源线

  2. 很快拔出电源模块

  3. 查看当前告警和系统事件

期望结果

当前告警界面显示数量和告警信息正确

实际结果

当前告警界面显示数量为1,但不显示具体告警信息,系统事件有输入丢失事件,6分钟后才记录电源拔出事件,输入丢失事件解除

尝试过的解决方案

[列出您已经尝试过的解决方案及结果]

分析结论

测试反馈拔出电源线后,4S左右就拔出电源模块,就出现此现象

检测到电源输入丢失后,准备产生告警时,电源模块被拔出了,开始删除电源对象,没有generate an event日志

正常事件产生流程

event每间隔一分钟打印一次Object Event_VinUvFault_010109’s property Component access referenced object’s property xxx failed,总共六次

image

image

image

image

image

image

随后电源输入丢失事件解除,产生电源移除事件

诉求:

这样是符合预期的吗?应该电源移除后,输入丢失事件就解除,立马记录电源拔出事件,当前过了6分钟才处理的

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

:white_check_mark: 总结与回复诉求

问:这样是符合预期的吗?应该电源移除后,输入丢失事件就解除,立马记录电源拔出事件,当前过了6分钟才处理的

:red_circle: 答:不符合理想预期。

虽然由于防抖机制导致延迟有一定的合理性,但存在以下问题需改进:

  1. 事件生成与对象销毁的顺序不当,导致部分事件丢失;
  2. 缺乏中断驱动机制,过度依赖轮询,响应慢;
  3. UI 展示逻辑存在缺陷,出现“数量≠内容”的异常状态;
  4. 6分钟延迟过长,影响运维效率与故障定位及时性。
点击此处查看详细分析解答

关于电源模块快速拔出后告警处理延迟的问题分析

根据您描述的问题,即在拔出电源线后迅速拔出电源模块,导致当前告警界面显示数量与实际告警信息不匹配,且电源拔出事件延迟约6分钟才被记录,本文将结合 openUBMC 系统行为、事件机制和现有知识库信息进行综合分析,并回答您的诉求。


:magnifying_glass_tilted_left: 问题复现与现象概述

项目 内容
环境信息 - 操作系统:Ubuntu 24.04
- 软件版本:OpenUBMC 2512
- 硬件配置:典型服务器平台(如 Kunpeng 920 或 x86)
重现步骤 1. 拔出电源线(触发 AC/DC 输入丢失)
2. 数秒内快速拔出电源模块
3. 查看当前告警界面
实际结果 - 当前告警数量显示为 1
- 告警详情未显示具体信息
- 系统事件中能见到“输入丢失”事件,但未立即生成“电源移除”事件
- 约 6 分钟后,“电源移除”事件才被记录,同时“输入丢失”事件解除
期望结果 电源一旦被拔出,应立即结束相关告警流程,并即时记录“电源拔出”事件

:puzzle_piece: 问题根因分析

1. 事件处理流程中的异步与对象生命周期冲突

从日志片段可以看出:

11:36:11.354333 event ERROR: remote_ro_lua(83): Object Event_VinXvault_010109's property Component access referenced object's property Instance failed...

这表明:

  • 系统已检测到电源输入电压异常(Vin UV Fault),准备触发 Event_VinUvFault 告警。
  • 但在告警生成过程中,电源模块被迅速物理移除,系统开始销毁 PSU 对应的 D-Bus/BMC 对象(如 /xyz/openbmc_project/inventory/system/chassis/powersupply1)。
  • 此时,事件模块尝试访问已被删除或正在删除的对象属性(如 Instance),导致 D-Bus Error,无法完成事件完整生成流程。

:white_check_mark: 结论一:事件尚未完全 assert 成功,关联硬件对象已被删除 → 事件状态处于“悬空”状态,无法正常展示在前端告警列表中。


2. 延迟记录的“电源拔出事件”来源解析

从以下日志可看出典型处理流程:

11:36:11.626648 event NOTICE: [Event_Ps1Removed_0101] generate an event [assert] while Reading change to [0].
...
redfish NOTICE: alarm.lua(600): received a event [1969-0].

说明系统最终还是生成了“电源移除”事件。但为何延迟了6分钟?

结合 openUBMC 的 电源管理组件(Power Mgmt)事件模块(Event) 的设计机制:

:white_check_mark: 可能原因如下:

(1)电源状态监控周期默认为 60 秒一轮

  • power_mgmt 组件通过定时扫描电源在位状态(via I2C/CPLD/GPIO)判断 PSU 插拔。
  • 扫描周期默认为 60 秒,连续丢失信号 6 次(即 6 分钟)后才判定为“永久移除”,触发 PsRemoved 事件。
  • 如果是短暂断电或热插拔抖动,系统会尝试重试恢复,避免误报。

:red_exclamation_mark: 因此,“6分钟后才记录电源拔出事件”是系统为了防抖和稳定性保护所采取的设计策略。

(2)事件状态未及时同步至 Redfish 和 Web UI

  • 即使底层事件已生成,前端 UI 的“当前告警”页面依赖于 /redfish/v1/Systems/1/LogServices/EventLog/Entriesbmc.kepler.event 模块的实时推送。
  • 若事件因对象删除失败而未正确 assert,则不会广播至 redfishalarm 子系统,导致 UI 显示数量 ≠ 实际告警条目数。

:pushpin: 这是典型的“事件注册失败(Event Registration Failure)”场景。


:hammer_and_wrench: 是否符合预期?

:cross_mark: 不符合完全预期,但属于当前系统设计的边界情况

判断维度 结论
:warning: 是否应延迟 6 分钟才记录电源拔出事件? 不符合最佳实践。理想情况下,物理拔出瞬间可通过 CPLD 中断或 GPIO 上升沿立即感知,无需等待轮询。
:warning: 是否应在对象删除前完成事件 assert? 是。当前因对象销毁过早导致事件丢失,属于资源管理顺序问题。
:warning: 告警数量与内容不一致是否合理? 不合理。此为前端展示逻辑缺陷,应避免“计数有告警但无详情”的状态。

:light_bulb: 建议优化方向

:white_check_mark: 1. 优化电源拔出事件触发机制

  • 引入 GPIO/CPLD 中断驱动机制:当 PSU 拔出时,CPLD 上报中断,BMC 立即响应并生成 PSU Removed 事件,无需依赖轮询。
  • 参考文档:【openUBMC 支持CPLD升级平滑生效特性设计说明书】中提及的访问控制与状态监听机制。

:white_check_mark: 2. 事件模块增强容错能力

  • 在对象即将被删除时,先完成所有待定事件的 assert 操作,再执行 DeleteObject
  • 改进 event 模块对 D-Bus Error 的处理策略:当引用对象失效时,使用缓存值或默认值补全事件,而非丢弃。

:white_check_mark: 3. 前端 UI 告警展示逻辑优化

  • 若存在“无详情的告警计数”,应在 UI 展示“未知告警”或“待更新事件”占位符,提升可观测性。
  • 定期执行告警状态一致性校验,防止“僵尸计数”。

:white_check_mark: 4. 调整电源状态轮询周期(可选)

  • 在高可用场景下,可将 PSU 状态检测周期从 60 秒缩短至 10~30 秒,以加快响应速度。
  • 注意权衡:更短周期 → 更高 CPU 占用与 I2C 总线负载。

:books: 相关知识库支持点

实体/概念 关联性说明
PowerManagement 负责监控 PSU 输入状态,应能及时响应拔出事件
Event 作为告警核心模块,需保证事件生命周期完整
PSU 其在位状态是事件生成的基础
Power_Mgmt Component 生成 Server Power Failure Occurred 等事件,也应负责 PsRemoved 事件
Reading 用于判断传感器值变化,进而触发 event assert
AC Lost Signal 与 Vin UV 故障告警直接相关,应在 PSU 拔出后立即取消
Alert 最终呈现给用户的告警通知,需与事件流保持一致

:white_check_mark: 总结与回复诉求

问:这样是符合预期的吗?应该电源移除后,输入丢失事件就解除,立马记录电源拔出事件,当前过了6分钟才处理的

:red_circle: 答:不符合理想预期。

虽然由于防抖机制导致延迟有一定的合理性,但存在以下问题需改进:

  1. 事件生成与对象销毁的顺序不当,导致部分事件丢失;
  2. 缺乏中断驱动机制,过度依赖轮询,响应慢;
  3. UI 展示逻辑存在缺陷,出现“数量≠内容”的异常状态;
  4. 6分钟延迟过长,影响运维效率与故障定位及时性。

:megaphone: 建议后续动作

  1. 收集完整日志包(含 alarm.log, journalctl, event_readings.txt)进行根因确认
  2. 提交 Issue 至 openUBMC 社区,标题建议:

    “【问题单】快速拔出电源模块导致告警丢失及事件延迟上报”

  3. 建议 SIG-PowerMgmt 与 SIG-Event 联合评审事件生命周期管理机制
  4. 可参考 https://discuss.openubmc.cn/t/topic/2994/1 中类似案例的处理方式。

如需进一步提供日志分析脚本或告警流程图,也可继续协助。

一键日志

R220KV2_2101311ECC10R6100001_20260511-1138.tar.gz (9.5 MB)

电源拔插间隔时间久一点看看,间隔15s,看还会出不

我理解15S应该是没问题的,之前这么验证过间隔久一点是没这个问题的,当前这个event逻辑是否合理呢?我认为应该电源移除后,输入丢失事件就解除,立马记录电源拔出事件吧

当前这个event逻辑是否合理呢?

这个有结论吗