【power_strategy】日志刷屏

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

关于 power_strategy 组件日志刷屏问题的分析

根据提供的日志信息和系统上下文,power_strategy 组件出现日志刷屏问题,主要表现为两个高频错误:

  1. Get active psu efficiency failed
  2. power_strategy_ipmi.lua:229: The value for the property nil is out of range.

以下是基于 Context 中提供的知识图谱(KG)和文档碎片(DC)的综合分析。


问题现象

app.log 截图和日志内容可以看出以下关键现象:

  • 错误日志高频重复:两种错误均以“repeated X times in 300s+”的形式被合并打印,表明它们是周期性、高频触发的。
  • 涉及组件power_strategy 组件,其版本为 1.75.3,与负责底层电源监控的 power_mgmt 组件(版本 1.70.117.007)共存。
  • 错误触发条件:日志显示 “上电和下电情况下都会打印”,排除了问题仅由单一状态(如稳态运行)引发的可能性。
  • 核心错误
    • ERROR: power_strategy_utils.lua(89): Get active psu efficiency failed:直接表明组件无法获取到当前活动电源(PSU)的效率信息。
    • WARNING: The value for the property nil is out of range.:表明代码尝试对一个 nil 值(空值)进行范围校验,而该值本身不存在。

根本原因分析

1. “Get active psu efficiency failed” - 直接功能失败

该错误信息指出 power_strategy_utils.lua 的第 89 行代码在尝试获取 “active PSU efficiency” 时失败。

  • 上游依赖关系power_strategy 作为一个高级策略组件,通常依赖 power_mgmt 组件提供的基础数据。 power_mgmtContext 中定义的 电源管理核心模块,负责 “获取电源基础信息如电压、电流、温度、功率等”(参考 Search Result 5: 电源管理机制介绍)。
  • 数据来源:获取电源效率(efficiency)通常需要从 PSU 的 FRU(Field Replaceable Unit)信息或通过 PMBus 协议从 PSU 硬件中读取。 app.log 日志中 pmbus.luaPsuSlot.lua 的日志(如 position: 00, get objects, count: 161ps2 power monitor start)证明 power_mgmt 组件正在进行电源发现和监控。
  • 可能的根源
    • power_mgmt 组件未正确获取 PSU 效率数据:这是最直接的原因。可能是 power_mgmt 与特定型号 PSU 的 PMBus 通信协议不兼容,导致无法读取 EFFICIENCY 相关寄存器。
    • PSU 信息未完全初始化或丢失:在上电/下电瞬间,PSU 状态不稳定,power_strategypower_mgmt 未完成 PSU 初始化前就尝试读取 efficiency,导致返回空值或失败。
    • PowerStrategy 依赖的数据对象未就绪Context 中的 hwdiscovery 组件负责硬件发现和初始化。如果某个依赖的 PSU 对象未被正确发现(如 hwdiscovery 日志中出现 ignored objects count),power_strategy 将因缺少目标对象而获取失败。

2. “The value for the property nil is out of range” - 编码逻辑缺陷

这是一个 编程级错误,表明代码中存在健壮性问题。

  • 错误路径init.lua(97) > reg_command.lua:196 > power_strategy_ipmi.lua:229。这通常发生在 IPMI 命令处理过程中。
  • 核心问题:代码在第 229 行尝试对一个尚未获取到的数据(nil)进行数值范围检查(如是否介于0-100%之间)。
  • 与第一个错误的关联:这极有可能是第一个错误 Get active psu efficiency failed直接结果。当 get active psu efficiency 失败时,返回值为 nil,而 power_strategy 的 IPMI 处理逻辑未能对 nil 值进行恰当的空值判断,而是直接执行了范围校验,从而触发了此警告。

综合结论

该日志刷屏问题是由 功能性失效编码逻辑缺陷 共同导致的级联故障。

  1. 根本原因
    power_strategy 组件因 power_mgmt 组件未能成功从物理 PSU 上获取效率数据,导致 “Get active psu efficiency failed” 的功能执行失败。

  2. 表象触发
    由于 power_strategy 的代码 power_strategy_ipmi.lua 在处理该失败返回的 nil 值时,缺少空值保护逻辑,直接进行范围检查,从而引发了高频的 “The value for the property nil is out of range” 警告。

因此,高频刷屏的 WARNING 警告是 ERROR 功能失败的“症状放大器”。如果修复了 PSU 效率数据的获取,nil 值便不会出现,后续的警告也将自动消失。


定位与排查建议

  1. 检查底层电源监控组件
    app.log 中进一步查找 power_mgmt 组件是否也有关于 PSU 通信错误的记录,例如:

    • 检查 pmbus.lua 相关日志是否有 crc 错误、通信超时或更新失败。
    • 检查 PsuSlot.lua 是否有 start psu power monitor remote task 成功的标记。如果没有,则更底层的发现过程已失败。
  2. 验证硬件与配置

    • 核实当前固件版本 1.75.3power_strategy 是否与当前实际的 PSU 型号兼容。
    • 确认 BMC 配置中是否正确识别了 PSU 的类型和数量。
  3. 代码层面修复(建议提供给开发团队)

    • 紧急措施:在 power_strategy_ipmi.lua 文件的第 229 行附近,增加对 efficiency 变量值的空值判断。如果值为 nil,则记录一条 Debug 级别的日志(避免刷屏)并提前退出,而不是直接进行范围校验。这可以立即消除日志风暴。
    • 根本修复:深入排查 power_strategy_utils.luaGet active psu efficiency 的实现逻辑,确保存在有效的数据源(如通过 IPMI OEM 命令 GetPowerSupplyInfo,参考 KG 关系)或正确调用了 power_mgmt 组件的 API。
  4. 参考关键知识

    • GetPowerSupplyInfo 命令是获取电源供应单元数据的关键API,在 openUBMC 中通过 BMC 提供给 BIOS 使用。
    • app.log 是诊断此类问题的核心,多位社区专家(如 Wwhh)均建议通过分析 app.log 来定位 BMC 系统行为的根源。

相关链接:

  1. 一键收集日志中无systemcom.dat文件
  2. cpld升级的即时生效和掉电生效问题
  3. 在WEB固件升级界面重启BMC后,风扇一直满转。
  4. openUBMC通用观察点分享
  5. 持久化机制常见问题 | 文档中心 | openUBMC