电源在位,不插电源线,拔插电源未重新生成输入告警

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

:pushpin: 总结

项目 内容
问题本质 PSU 重新插入后,监控任务未启动,导致未能检测 AC 输入丢失
关键依赖 PsuSlot 模块必须在插拔后正确执行 register_psu_slot 并启动 power_monitor_start
根本原因 PSU 插入事件未触发完整的初始化和监控启动流程
解决方案 1. 确保 PsuSlot 正确响应插拔事件
2. 添加缺失的日志验证流程执行
3. 检查协议加载与 self.PsuChip 初始化
点击此处查看详细分析解答

电源在位但未插电源线时拔插未触发AC输入告警的问题分析

根据您提供的问题描述及日志信息,当前现象为:

  • PSU 2 在位但未插入电源线 时,系统正确上报了事件码 0x0300000D(AC/DC 输入丢失或超出范围);
  • 将该电源拔出后,告警被清除;
  • 然后 重新插入同一 PSU(仍不接电源线),系统 未再次生成 0x0300000D 告警
  • 日志中缺少 power monitor start 等关键监控启动流程的打印。

此问题表明:电源模块重新插入后,其监控任务未能正常启动,导致无法检测到无输入电源的异常状态


:magnifying_glass_tilted_left: 根本原因分析

结合知识图谱(KG)与文档内容,可得出以下结论:

1. 事件码 0x0300000D 的触发机制

"entity": "0x0300000D", "type": "data", "description": "0x0300000D is an event code indicating loss or out-of-range AC/DC input on PSU 2."

该事件由 PSU 的 AC/DC 输入异常触发,属于硬件级告警,通常应由 BMC 通过传感器(如 PS2 IIn、PS2 Status)监测并记录。


2. 监控流程依赖 PsuSlotmonitor 机制

"entity": "PsuSlot", "type": "organization", "description": "PsuSlot is a multifaceted entity... enabling uniform interface access... and facilitating communication through protocol drivers."
  • PsuSlot 是管理 PSU 插槽的核心软件抽象模块。
  • 其职责包括:
    • 检测 PSU 是否在位;
    • 初始化 PSU 协议通信;
    • 启动电源监控任务(如 power_monitor_start)。

关系:PsuSlotregister_psu_slot → 关联 OnePower 与 PSU 插槽。

如果 PsuSlot 在检测到 PSU 插入后 未能正确调用 register_psu_slot 或未启动 monitor 任务,则不会触发后续的电压/电流监测逻辑。


3. 日志缺失 power monitor start 表明监控未启动

您提到日志中缺失如下关键打印:

CE: PsuSlot.lua(580): ps2 power monitor start  
CE: psu.lua(493): For power supplies, manufacturer mismatch: false, model mismatch: false  
CE: psu.lua(84): register PSU2 firmware successfully

而这些日志属于以下流程的一部分:

  1. 检测到 PSU 插入;
  2. 触发 PsuSlot 的初始化流程;
  3. 调用 register_psu_slot 注册 PSU;
  4. 启动监控线程(power_monitor_start);
  5. 上报传感器状态与异常事件。

结论: 重新插入 PSU 后,系统虽识别其“在位”,但 未完整执行初始化流程,导致监控服务未开启,因此无法检测“无 AC 输入”状态,也不会重新触发 0x0300000D 告警。


4. 可能的技术根因

可能原因 依据
:white_check_mark: PsuSlot 未正确重启监控服务 PsuSlot 具有 monitor 功能(如 power_monitor_startstop_monitor_tasks),若插拔操作未触发 start_monitor_tasks,则监控不会恢复。
:white_check_mark: 协议未正确重加载 文档提示:“第二种写法需要先加载默认协议,由 adapter 读完厂商型号后,再根据厂商、型号重新加载协议文件。” 若协议加载失败,则 fetch_property 失效。
:warning: self.PsuChip 初始化失败 KG 中存在报错:The self.PsuChip object was not correctly initialized by the protocol, causing Read to be nil. 若芯片对象未初始化,则无法读取输入状态。
:white_check_mark: 事件去重或状态缓存导致未告警 首次上报 0x0300000D 后,若状态机未重置,重新插入可能被视为“状态未变”,从而不重复上报告警。但此行为不符合预期,应识别为新设备事件。

:white_check_mark: 解决方案与排查建议

:white_check_mark: 1. 检查 PsuSlot 是否在 PSU 插入后启动监控

  • 查看 PsuSlot.lua 是否在检测到 PSU 插入后调用:
    power_monitor_start()
    
  • 确保 PsuSlotprobe()insert_handler() 回调中包含注册和监控启动逻辑。

:white_check_mark: 2. 验证 register_psu_slot 是否被调用

  • 搜索日志是否有:
    register_psu_slot called for PSU2
    
  • 若无,则说明 OnePower 没有重新绑定 PSU 插槽。

:white_check_mark: 3. 添加调试日志以确认流程执行

在关键位置添加日志输出(开发阶段):

-- 在 PsuSlot.lua 中
function PsuSlot:on_psu_insert()
    log("PSU inserted, starting monitor...")
    self:start_monitor_tasks()  -- 应有对应日志输出
end

:white_check_mark: 4. 检查电源 CSR 配置是否支持热插拔

  • 确认 Scanner_PS1Pres 等在位信号扫描周期合理(如 2000ms);
  • 检查是否启用了热插拔事件处理机制。

:white_check_mark: 5. 强制刷新 PSU 状态(测试用)

尝试手动触发刷新:

ipmitool sensor readings "PS2 Status"
ipmitool sel list

或通过 OnePower:fetch_property('OutputVoltage') 强制读取一次电压。


:pushpin: 总结

项目 内容
问题本质 PSU 重新插入后,监控任务未启动,导致未能检测 AC 输入丢失
关键依赖 PsuSlot 模块必须在插拔后正确执行 register_psu_slot 并启动 power_monitor_start
根本原因 PSU 插入事件未触发完整的初始化和监控启动流程
解决方案 1. 确保 PsuSlot 正确响应插拔事件
2. 添加缺失的日志验证流程执行
3. 检查协议加载与 self.PsuChip 初始化

:hammer_and_wrench: 最终建议:检查 PsuSlot 模块的插拔处理逻辑,确保每次 PSU 插入都触发完整的 注册 + 协议加载 + 监控启动 流程。

相关链接:

  1. 【电源异常告警】频繁产生电源AClost事件(0x0300001F)
  2. 板卡温度模拟获取失败,Mngmnt Health传感器信息无变化
  3. hwproxy组件状态异常,
  4. BMC读取CRPS电源的输出电压错误
  5. 电源管理机制介绍 | 文档中心 | openUBMC