OS下电出现日志刷屏

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

问题描述

os下电,预期debug日志,预期:无刷屏,实际:

一、有iam ERROR: init.lua(97) 刷屏6分钟1次,必现

二、有power_strategy NOTICE: component.lua(95) 刷屏

环境信息

  • 操作系统:[如 Ubuntu 24.04]

  • 软件版本:[如 OpenUBMC2509]

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

重现步骤

  1. [第一步]

  2. [第二步]

  3. [第三步]

期望结果

[您希望实现什么]

实际结果

[实际发生了什么,包含错误信息]

尝试过的解决方案

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

分析结论

[详细总结您对此问题的分析结论]

日志后面发上来,第三个OS上电下电都会刷屏

KunLun2180V2_123456_20260318-0743.tar.gz (3.3 MB)

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

:white_check_mark: 总结

项目 内容
根本原因 系统未真正断电,BMC误判电源状态为“On”,导致 iampower_strategy 组件持续运行并输出日志
直接表现 iam ERRORpower_strategy NOTICE 每6分钟刷屏一次
关键证据 get_power_state: power ON 持续存在;session timeout 错误频发
解决方向 1. 修复电源状态上报逻辑
2. 优化组件在下电状态下的行为
3. 调整日志输出策略

建议操作:优先确认系统是否真正断电,并检查 fructrl 是否正确处理了 ACLost 状态持久化,同时对 power_strategyiam 增加电源状态依赖判断逻辑。

点击此处查看详细分析解答

OS下电出现日志刷屏问题分析与解决方案

根据用户提供的日志信息和系统行为,以下是对“OS下电后日志刷屏”问题的全面分析与定位结论。


:magnifying_glass_tilted_left: 问题描述

现象
在执行 OS 下电操作后,系统 BMC 日志持续刷屏输出 iam ERROR: init.lua(97)power_strategy NOTICE: component.lua(95) 等日志,每约6分钟重复一次,表现为:

  • iam组件高频报错

    iam ERROR: init.lua(97): ... The session has timed out, please log on again.
    iam ERROR: init.lua(97): There is no valid session established with the implementation.
    
  • power_strategy组件高频通知

    power_strategy NOTICE: component.lua(95): Get predict power table successfully, component: PSU/Fan...
    
  • 系统实际电源状态仍为“On”(从 get_power_state: system[1] get power power ON 可知)。

预期结果
OS下电后,系统应进入低功耗或断电状态,相关服务停止运行,无高频调试日志刷屏。

实际结果
BMC 侧持续轮询电源状态并执行策略计算,且用户会话异常被反复触发,导致日志刷屏。


:puzzle_piece: 根本原因分析

结合上下文日志、知识图谱及辅助资料,问题成因如下:

1. 系统未真正断电,BMC持续运行

尽管OS已下电,但物理电源并未关闭get_power_state: power ON 持续出现),BMC仍处于运行状态,其内部组件(如 power_strategyiam)仍在周期性执行任务。

  • power_strategy 每隔一段时间(约6分钟)执行功率预测策略更新,触发 component.lua(95) 日志。
  • iam 模块定时清理过期会话,但因某些会话无法正常释放,抛出超时错误。

:white_check_mark: 证据支持general_hardware NOTICE: fruct1_handler.lua(76): get_power_state: system[1] get power power ON 多次出现,说明BMC检测到电源状态始终为“On”。


2. IAM会话清理机制异常触发错误日志

iam ERROR: The session has timed out 属于正常会话过期行为,但由于:

  • 会话未正确注销;
  • 或会话状态残留;
  • web backend 在下电后未停止请求;

导致每次清理时均报错,且日志级别为 ERROR,造成刷屏。

:warning: 建议优化点:此类信息可降级为 WARNING 或通过条件过滤避免在非活跃状态下刷屏。


3. power_strategy 组件未感知系统下电状态,持续运行

power_strategy 组件负责电源节能策略管理,在系统下电后应暂停或降低轮询频率。然而当前设计中,该组件未根据实际系统状态动态调整行为。

  • 功率预测表更新(psu_policy.lua(586))和风扇策略获取频繁执行。
  • 即使系统已无负载,仍进行无意义的策略计算。

:pushpin: 关联文档:power_strategy 组件在 persistence 相关文档中被提及以 10分钟为周期 清空并重插数据,可能与此6分钟刷屏现象有关联。


4. 可能存在的配置问题:AC掉电后状态不一致

参考【持久化机制常见问题】文档中的案例:

PowerOnStrategy 设置为 LastState 时,ACCycle 掉电重启后应保持断电前状态。但存在 掉电前为下电状态,重启后变为上电 的异常。

说明系统对 掉电前后状态的持久化处理存在缺陷,可能导致 BMC 错误判断系统仍处于运行状态,从而继续执行策略轮询。


:hammer_and_wrench: 解决方案建议

:white_check_mark: 短期缓解措施

  1. 调整日志级别,避免刷屏干扰

    • iampower_strategy 组件,在系统下电后动态降低日志级别。
    • 使用 mdbctl 设置日志级别:
      mdbctl
      attach iam
      dloglevel warning
      
    • 或在代码中添加判断逻辑,仅在系统运行时输出详细日志。
  2. 增加日志过滤条件

    • init.lua(97) 处增加判断:
      if not system_is_powered_on() then return end
      
      避免在非运行状态输出无关错误。

:white_check_mark: 中长期修复建议

  1. 完善系统电源状态感知机制

    • 确保 fructrlpg_signal.lua 正确上报系统真实 PowerState
    • 确认 GetPropertyValueForOnePower 接口能准确反映 PSU 实际状态(参考 power_ipmi.lua 实现)。
  2. 优化 power_strategy 行为策略

    • 在检测到系统下电或无负载时,暂停功率预测轮询。
    • 增加状态监听钩子(如监听 Event_SystemACPISoftOffState_0101),自动关闭非必要服务。
  3. 修复持久化状态同步问题

    • 检查 fructrl 组件 set_ACLost 函数是否在 ACCycle 时错误地将 PwrStateBeforeACLost 设为 true(见文档ID 4、6)。
    • 确保掉电前的电源状态能正确持久化并恢复。
  4. 审查电源控制流程逻辑

    • 查看是否执行了强制下电命令。
    • 检查是否存在 Power off timeout 关键字(见《上下电常见问题指南》)。

:books: 参考资料支持

资料标题 内容关联点
《持久化机制常见问题》 提到 power_strategy 周期性清空数据导致Flash写入过大;SetACLost 函数错误恢复状态问题
《上下电常见问题指南》 明确指出 Power off timeout 是下电失败的关键日志关键字
Document Chunk 1 & 2 展示了 fruct1_handler.lua 轮询 get_power_statepower_ipmi.lua 实现电源查询接口
Knowledge Graph Ipmi Power Status 应与硬件状态同步;power_ipmi.lua 提供 GetPropertyValue 接口

:white_check_mark: 总结

项目 内容
根本原因 系统未真正断电,BMC误判电源状态为“On”,导致 iampower_strategy 组件持续运行并输出日志
直接表现 iam ERRORpower_strategy NOTICE 每6分钟刷屏一次
关键证据 get_power_state: power ON 持续存在;session timeout 错误频发
解决方向 1. 修复电源状态上报逻辑
2. 优化组件在下电状态下的行为
3. 调整日志输出策略

建议操作:优先确认系统是否真正断电,并检查 fructrl 是否正确处理了 ACLost 状态持久化,同时对 power_strategyiam 增加电源状态依赖判断逻辑。

power_strategy是节能预测功能,5分钟预测一次给用户推荐最优的节能策略,如果你不想启动这个功能,可以在csr里把PowerStrategy对象下的属性PowerPredictSupported值设置为false关闭节能预测功能