power_strategy组件存在如下日志刷屏,
Get active psu efficiency failed
power_strategy_ipmi.llua:229: The value for the property nil is out of range.
产生条件:上电和下电情况下都会打印。
组件版本:
power_strategy组件存在如下日志刷屏,
Get active psu efficiency failed
power_strategy_ipmi.llua:229: The value for the property nil is out of range.
答案内容由AI生成,仅供参考:
根据提供的日志信息和系统上下文,power_strategy 组件出现日志刷屏问题,主要表现为两个高频错误:
Get active psu efficiency failedpower_strategy_ipmi.lua:229: The value for the property nil is out of range.以下是基于 Context 中提供的知识图谱(KG)和文档碎片(DC)的综合分析。
从 app.log 截图和日志内容可以看出以下关键现象:
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 值(空值)进行范围校验,而该值本身不存在。该错误信息指出 power_strategy_utils.lua 的第 89 行代码在尝试获取 “active PSU efficiency” 时失败。
power_strategy 作为一个高级策略组件,通常依赖 power_mgmt 组件提供的基础数据。 power_mgmt 是 Context 中定义的 电源管理核心模块,负责 “获取电源基础信息如电压、电流、温度、功率等”(参考 Search Result 5: 电源管理机制介绍)。app.log 日志中 pmbus.lua 和 PsuSlot.lua 的日志(如 position: 00, get objects, count: 161 和 ps2 power monitor start)证明 power_mgmt 组件正在进行电源发现和监控。power_mgmt 组件未正确获取 PSU 效率数据:这是最直接的原因。可能是 power_mgmt 与特定型号 PSU 的 PMBus 通信协议不兼容,导致无法读取 EFFICIENCY 相关寄存器。power_strategy 在 power_mgmt 未完成 PSU 初始化前就尝试读取 efficiency,导致返回空值或失败。PowerStrategy 依赖的数据对象未就绪: Context 中的 hwdiscovery 组件负责硬件发现和初始化。如果某个依赖的 PSU 对象未被正确发现(如 hwdiscovery 日志中出现 ignored objects count),power_strategy 将因缺少目标对象而获取失败。这是一个 编程级错误,表明代码中存在健壮性问题。
init.lua(97) > reg_command.lua:196 > power_strategy_ipmi.lua:229。这通常发生在 IPMI 命令处理过程中。nil)进行数值范围检查(如是否介于0-100%之间)。Get active psu efficiency failed 的直接结果。当 get active psu efficiency 失败时,返回值为 nil,而 power_strategy 的 IPMI 处理逻辑未能对 nil 值进行恰当的空值判断,而是直接执行了范围校验,从而触发了此警告。该日志刷屏问题是由 功能性失效 和 编码逻辑缺陷 共同导致的级联故障。
根本原因:
power_strategy 组件因 power_mgmt 组件未能成功从物理 PSU 上获取效率数据,导致 “Get active psu efficiency failed” 的功能执行失败。
表象触发:
由于 power_strategy 的代码 power_strategy_ipmi.lua 在处理该失败返回的 nil 值时,缺少空值保护逻辑,直接进行范围检查,从而引发了高频的 “The value for the property nil is out of range” 警告。
因此,高频刷屏的 WARNING 警告是 ERROR 功能失败的“症状放大器”。如果修复了 PSU 效率数据的获取,nil 值便不会出现,后续的警告也将自动消失。
检查底层电源监控组件:
在 app.log 中进一步查找 power_mgmt 组件是否也有关于 PSU 通信错误的记录,例如:
pmbus.lua 相关日志是否有 crc 错误、通信超时或更新失败。PsuSlot.lua 是否有 start psu power monitor remote task 成功的标记。如果没有,则更底层的发现过程已失败。验证硬件与配置:
1.75.3 的 power_strategy 是否与当前实际的 PSU 型号兼容。代码层面修复(建议提供给开发团队):
power_strategy_ipmi.lua 文件的第 229 行附近,增加对 efficiency 变量值的空值判断。如果值为 nil,则记录一条 Debug 级别的日志(避免刷屏)并提前退出,而不是直接进行范围校验。这可以立即消除日志风暴。power_strategy_utils.lua 中 Get active psu efficiency 的实现逻辑,确保存在有效的数据源(如通过 IPMI OEM 命令 GetPowerSupplyInfo,参考 KG 关系)或正确调用了 power_mgmt 组件的 API。参考关键知识:
GetPowerSupplyInfo 命令是获取电源供应单元数据的关键API,在 openUBMC 中通过 BMC 提供给 BIOS 使用。app.log 是诊断此类问题的核心,多位社区专家(如 Wwhh)均建议通过分析 app.log 来定位 BMC 系统行为的根源。相关链接:
第一个问题还是需要改下,之前有类似问题对齐过,不在白名单内的电源,不做电源能效曲线处理,日志不打印什么的。
已在进行修改,330版本后解决
第二个能提供下对应的IPMI命令吗?看不见是什么IPMI,BIOS同事无法进行定位
IPMI相关命令涉及产品信息,请联系产品进行支撑,当前无法直接答复
第二个问题BMC与BIOS都是闭源的,麻烦帮忙跟踪确认一下