【问题求助】AC压测过程中,通电开机策略为保持上电,偶现服务器不上电

问题描述

AC压测过程中,通电开机策略为保持上电,偶现服务器不上电

环境信息

软件版本: OpenUBMC2512 LTS SP1

重现步骤

  1. AC操作

期望结果

AC后BMC正常给服务器上电

实际结果

AC后服务器未上电

分析结论

1.分析日志发现AC后BMC存在组件未拉起导致复位



2.framwork.log显示certificate组件拉起异常

3.分析未上电原因为AC后走通电开机策略,保持上电,下发上电通知给其他组件,当前服务器有DPU,添加了上电锁,在DPU OS启动完成后,释放上电锁时,正好遇到BMC maca进行BMC复位,导致未进行正式上电;maca将BMC复位后,fructrl读到的rest_type为softreset,所以未走通电开机策略

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

:white_check_mark: 结论

本次AC压测服务器不上电的根本原因在于:

BMC关键组件(certificate)启动失败 → 触发BMC软复位 → 复位类型误判为SoftReset → fructrl跳过通电开机策略 → 服务器未上电

解决路径

  1. 短期:优化启动时序,增加延时,规避竞态。
  2. 中期:修复组件启动问题。
  3. 长期统一BMC复位类型识别机制,确保AC场景下策略正确执行。

建议推动社区或内部团队完成 ResetType 公共属性的落地,从根本上避免此类问题复发。

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

AC压测中通电开机策略失效问题分析与解决方案

在对服务器进行AC(交流电源)压测时,即使将通电开机策略配置为“保持上电”,仍偶发服务器无法正常上电的问题。经日志分析,该问题与BMC系统内部组件启动异常和复位类型判断错误密切相关。以下为详细分析与解决方案。


:magnifying_glass_tilted_left: 问题概述

  • 故障现象
    在AC反复加电测试过程中,服务器未能按预期自动上电,尽管通电开机策略设置为“保持上电”。

  • 环境信息

    • 软件版本:OpenUBMC2512 LTS SP1
    • 通电开机策略:保持上电
    • 操作系统:主机含DPU(专用处理单元),存在上电时序依赖
  • 期望结果
    AC恢复后,BMC应自动执行“保持上电”策略,控制服务器正常启动。

  • 实际结果
    多次AC操作后,服务器未成功上电


:receipt: 问题分析

结合系统日志(SEL、framework.log等),确认问题发生过程如下:

1. BMC组件启动失败导致自动复位

  • 日志证据

    14810 -05-09 14:32:46.948524 maca ERROR: [certificate]StartupCheck failed, status: Starting, check count: 5
    ...
    14831 -05-09 14:32:52.943892 maca NOTICE: Force Reset begin
    
  • 分析
    BMC的 maca(模块化启动控制器代理) 组件在启动过程中检测到 certificate 组件初始化未完成,经过多次检查仍失败,触发BMC主动复位以尝试恢复。

  • 根本原因
    certificate 组件启动超时,可能与服务依赖延迟初始化死锁有关,最终导致BMC系统重启。


2. BMC复位类型被误判为 SoftReset

  • 日志证据

    2026-05-09 14:34:10.701550 firmware_mgmt NOTICE: reset type [SoftReset]
    
  • 分析
    尽管此次BMC复位是由AC断电后重新上电触发(应为 HardReset/ACReset),但BMC系统错误地识别为 SoftReset

    • 导致 fructrl 组件在检测到复位类型为 SoftReset 时,跳过通电开机策略,未执行“保持上电”逻辑。
    • 这是导致服务器未上电的直接原因
  • 背景参考(知识库):

    fructrl 组件在验证通电开机策略时,若错误识别复位类型为 soft_reset,则直接跳过策略执行。


3. 上电锁(Power-On Lock)释放时序冲突

  • 关键上下文

    • 该服务器配备 DPU(如Zijin-DPU),其操作系统启动较慢。
    • 为确保DPU完全启动后再进行主机OS上电,系统设置了上电锁
    • DPU OS启动完成后(日志显示“DPU OS is started”),释放上电锁,通知BMC可以上电
  • 问题触发点

    • 在上电锁即将释放时,BMC因certificate组件启动失败,触发了强制复位(Force Reset)
    • 复位发生后,fructrl因识别为 SoftReset,不再执行通电开机策略。
    • 最终导致:虽然允许上电,但BMC未发起上电命令

:warning: 影响链总结

graph TD
    A[AC Power Loss] --> B[AC恢复]
    B --> C[BMC启动, maca检查组件状态]
    C --> D[certificate组件启动失败]
    D --> E[maca触发BMC强制复位]
    E --> F[BMC复位类型被记录为SoftReset]
    F --> G[fructrl检测到SoftReset]
    G --> H[跳过通电开机策略]
    H --> I[服务器未上电]

:white_check_mark: 解决方案

1. 修复证书组件启动问题(根因)

  • 排查 certificate 组件延迟原因

    • 检查其依赖服务(如 spdmiamDBUS)是否启动过慢或失败。
    • 增加启动超时时间或优化初始化逻辑。
  • 建议

    • init.lua 中为 certificate 添加更详细的日志,定位卡住阶段。
    • 检查是否因证书文件缺失TPM/HSM未就绪网络服务阻塞导致。

2. 修正复位类型判断逻辑(关键修复)

  • 当前问题firmware_mgmtfructrl 组件依赖不稳定的接口(如 mc_sys_info.get_reset_type)判断复位类型。

  • 推荐方案(参考 openUBMC 社区):

    引入 统一的公共属性 bmc.kepler.Managers.BmcReset.ResetType,由 bmc_soc 服务在硬复位场景下显式写入为 HardReset

  • 短期规避

    • 修改 fructrl 策略判断逻辑,在AC信号有效时,即使复位类型为SoftReset,也执行通电开机策略
    • 增加对 AC_PRESENT 信号的监听,辅助判断是否为真实AC掉电。

3. 优化上电锁机制与DPU协同

  • 问题:上电锁释放与BMC复位存在竞态条件。

  • 建议改进

    • 上电锁释放前,先确认BMC处于稳定状态(所有核心组件已启动)。
    • 或由DPU主动发起“请求上电”命令,而非仅依赖BMC自动策略。

4. 增加延时以避免组件未就绪

  • 参考案例
    fructrl 执行通电开机策略前,增加固定延时(如5~10秒),确保 certificateiam 等关键服务已启动。

  • 配置建议

    # 在通电开机策略中增加延迟
    SetPowerOnStrategyExceptions(Reason=AC, Execute=DelayedPowerOn, EffectivePeriod=60s, Delay=8s)
    

:pushpin: 验证方法

  1. 修改代码后重新压测
    • 进行100次AC循环,验证是否仍有不上电现象。
  2. 检查SEL日志
    • 确认BMC复位原因是否正确记录为 AC Reset
    • 确认通电开机策略是否被触发。
  3. 抓取组件启动时间
    • 统计 certificateiamfructrl 等组件的启动耗时,评估稳定性。

:books: 参考资料

  • fructrl 通电开机策略实现逻辑(社区文档)
  • 【ISSUE】fructrl组件获取reset type错误(复位类型识别问题)
  • 【提案】新增 BmcReset.ResetType 公共属性(解决复位类型不一致)
  • AC后与BIOS交互的信息概率性获取不到(启动时序问题)

:white_check_mark: 结论

本次AC压测服务器不上电的根本原因在于:

BMC关键组件(certificate)启动失败 → 触发BMC软复位 → 复位类型误判为SoftReset → fructrl跳过通电开机策略 → 服务器未上电

解决路径

  1. 短期:优化启动时序,增加延时,规避竞态。
  2. 中期:修复组件启动问题。
  3. 长期统一BMC复位类型识别机制,确保AC场景下策略正确执行。

建议推动社区或内部团队完成 ResetType 公共属性的落地,从根本上避免此类问题复发。

dump_info.zip (8.9 MB)
dump_info_1.zip (9.8 MB)
日志

此处上下电的行为正常,原因实际是有组件启动异常了,需要分析下certificate组件启动异常的问题

看了下日志里面的组件版本, 部分组件版本如下:

capability_proxy/1.80.11@openubmc/stable
account/1.100.10@openubmc/stable

这些版本不是OpenUBMC2512 LTSOpenUBMC2512 LTS SP1 里面的组件版本。
请升级到LTS版本。

25.12 之前的版本已经EOS, 参考生命周期

确定一下,你应该看错日志了

嗯,看错日志了。 我再分析看下, 日志显示报错
2026-05-09 14:32:44.500945 certificate ERROR: [C](65535): [WSEC_CBB][][208] (UTC) 2026-05-09 06:32:44 KMC is running, not initialize repeatedly before finalized.