答案内容由AI生成,仅供参考:
总结
| 项目 | 内容 |
|---|---|
| 问题本质 | 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等关键监控启动流程的打印。
此问题表明:电源模块重新插入后,其监控任务未能正常启动,导致无法检测到无输入电源的异常状态。
根本原因分析
结合知识图谱(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. 监控流程依赖 PsuSlot 与 monitor 机制
"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)。
关系:
PsuSlot→register_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
而这些日志属于以下流程的一部分:
- 检测到 PSU 插入;
- 触发
PsuSlot的初始化流程; - 调用
register_psu_slot注册 PSU; - 启动监控线程(
power_monitor_start); - 上报传感器状态与异常事件。
结论: 重新插入 PSU 后,系统虽识别其“在位”,但 未完整执行初始化流程,导致监控服务未开启,因此无法检测“无 AC 输入”状态,也不会重新触发 0x0300000D 告警。
4. 可能的技术根因
| 可能原因 | 依据 |
|---|---|
PsuSlot 未正确重启监控服务 |
PsuSlot 具有 monitor 功能(如 power_monitor_start 和 stop_monitor_tasks),若插拔操作未触发 start_monitor_tasks,则监控不会恢复。 |
文档提示:“第二种写法需要先加载默认协议,由 adapter 读完厂商型号后,再根据厂商、型号重新加载协议文件。” 若协议加载失败,则 fetch_property 失效。 |
|
self.PsuChip 初始化失败 |
KG 中存在报错:The self.PsuChip object was not correctly initialized by the protocol, causing Read to be nil. 若芯片对象未初始化,则无法读取输入状态。 |
首次上报 0x0300000D 后,若状态机未重置,重新插入可能被视为“状态未变”,从而不重复上报告警。但此行为不符合预期,应识别为新设备事件。 |
解决方案与排查建议
1. 检查 PsuSlot 是否在 PSU 插入后启动监控
- 查看
PsuSlot.lua是否在检测到 PSU 插入后调用:power_monitor_start() - 确保
PsuSlot的probe()或insert_handler()回调中包含注册和监控启动逻辑。
2. 验证 register_psu_slot 是否被调用
- 搜索日志是否有:
register_psu_slot called for PSU2 - 若无,则说明
OnePower没有重新绑定 PSU 插槽。
3. 添加调试日志以确认流程执行
在关键位置添加日志输出(开发阶段):
-- 在 PsuSlot.lua 中
function PsuSlot:on_psu_insert()
log("PSU inserted, starting monitor...")
self:start_monitor_tasks() -- 应有对应日志输出
end
4. 检查电源 CSR 配置是否支持热插拔
- 确认
Scanner_PS1Pres等在位信号扫描周期合理(如 2000ms); - 检查是否启用了热插拔事件处理机制。
5. 强制刷新 PSU 状态(测试用)
尝试手动触发刷新:
ipmitool sensor readings "PS2 Status"
ipmitool sel list
或通过 OnePower:fetch_property('OutputVoltage') 强制读取一次电压。
总结
| 项目 | 内容 |
|---|---|
| 问题本质 | PSU 重新插入后,监控任务未启动,导致未能检测 AC 输入丢失 |
| 关键依赖 | PsuSlot 模块必须在插拔后正确执行 register_psu_slot 并启动 power_monitor_start |
| 根本原因 | PSU 插入事件未触发完整的初始化和监控启动流程 |
| 解决方案 | 1. 确保 PsuSlot 正确响应插拔事件2. 添加缺失的日志验证流程执行 3. 检查协议加载与 self.PsuChip 初始化 |
最终建议:检查
PsuSlot模块的插拔处理逻辑,确保每次 PSU 插入都触发完整的 注册 + 协议加载 + 监控启动 流程。
相关链接: