reboot过程中闪现CPU VRD和VDDQ告警

问题描述

执行reboot后,系统启动过程中闪现CPU相关的温度获取失败告警

环境信息

  • 软件版本:OpenUBMC2509

重现步骤

  1. 具体操作步骤/实际结果】
    步骤1:执行reboot长稳结束后,手动检查环境日志(有CPU相关告警上报)

    步骤2:reboot长稳日志检查(有CPU相关告警上报)

    步骤3:一键收集日志检查(有CPU相关告警上报)

期望结果

没有告警

实际结果

产生VRD和VDDQ告警

尝试过的解决方案

加powergood判断

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

关于 reboot 过程中闪现 CPU VRD 和 VDDQ 温度获取失败告警的分析报告


一、问题描述

在执行 reboot 指令后,系统启动过程中,BMC 日志中短暂出现 CPU VRD(Voltage Regulator Device)和 VDDQ 温度读取失败的“轻微”级别告警。这些告警随后被自动消除(Deasserted),但在事件日志中仍被记录。

  • 实际结果:重启期间上报了以下告警事件:
    • Failed to obtain data of the CPU 1 VRD temperature
    • Failed to obtain data of the CPU 2 VRD temperature
    • Failed to obtain data of the CPU 2 VDDQ temperature
  • 期望结果:系统重启过程中不应上报此类告警,或应通过机制屏蔽瞬态异常。

二、环境信息

项目 内容
软件版本 OpenUBMC 2509
操作系统 Linux-based Host OS
硬件平台 支持双 CPU 架构的服务设备
日志来源 BMC Web UI、SEL 日志、一键日志包(event.db / sel.txt)

三、相关告警事件分析

根据提供的日志截图与内容,整理关键事件如下:

事件码 级别 事件描述 状态 产生时间
0x00000061 轻微 Failed to obtain data of the CPU 2 VRD temperature Asserted → Deasserted 2026-01-10 06:04:57/58
0x00000062 轻微 Failed to obtain data of the CPU 1 VRD temperature Asserted → Deasserted 2026-01-10 06:04:58
0x00000025 轻微 Failed to obtain data of the CPU 2 VDDQ temperature Asserted → Deasserted 2026-01-10 06:04:58
0x00000026 轻微 Failed to obtain data of the CPU 1 VDDQ temperature Deasserted 2026-01-10 06:05:06

:white_check_mark: 结论:所有告警均发生在主机重启(The host was restarted...)前后约 10 秒内,且均被 Deasserted,属于瞬态现象


四、根本原因分析

结合知识库中的实体关系、代码配置逻辑以及防抖机制设计,可以得出以下结论:

1. 告警来源与监控机制
  • VRD 温度监控对象

    • 实体:VrdTemperatureCelsius
    • 类型:VrdMgmt 类的软件属性,由 vr_manager.lua 通过 IPMI 协议从 IMU 获取。
    • 用途:用于风扇调速与健康状态判断。
    • 关联实体:Chip_CpuIvrd3_01010109 Scanner_CpuIvrem345_vrdTemp_01010109
  • VDDQ 温度监控对象

    • 实体:CpuDDRVddqTemp
    • 实体:CpuNBDVDDTemp
    • 均属于 VrdMgmt 对象下的温度参数,监控 CPU 内存供电模块的温度。
    • 配置参考:CSR 配置字典中 VrdMgmt 类定义了这些属性。
2. 事件触发逻辑(代码级)

从提供的 JSON 片段可见,已尝试通过增加 PowerGood 判断 修改事件触发条件:

"Event_Cpu1VrdTempFail": {
  "Reading": "<?>Scanner_PowerGood.Value;<?>/VrdMgmt_1.VrdTemperatureCelsius |> expr{$1 == 0 ? 0 : ($2 == 32511 ? 1 : 0)}",
  ...
}
  • 逻辑解释
    • 只有当 Scanner_PowerGood.Value == 1(即系统处于上电稳定状态)时,才检查温度值。
    • VrdTemperatureCelsius == 32511(无效值或读取失败),则上报告警。
    • 否则不触发。
  • 目的:防止在系统未完全上电前(如 reboot 过程中)误报温度异常。
3. 瞬态告警的成因

尽管加入了 PowerGood 判断,但以下因素仍可能导致闪现告警:

因素 说明
:stopwatch: 信号同步延迟 Scanner_PowerGood 信号的更新可能滞后于温度采集任务的执行周期,导致短暂窗口期内进行无效读取。
:repeat_button: 采集周期不匹配 温度扫描器周期为 3000ms,而 PowerGood 检测为 8000ms,可能存在竞争条件。
:chart_decreasing: 传感器初始化顺序 CPU VRD/VDDQ 温度传感器依赖 BIOS 上报或 VRD 芯片初始化完成,在 reboot 初期尚未就绪。
:hammer_and_wrench: 防抖机制未完全覆盖 当前事件未启用 contbin_H10L5 类型的二值防抖(专用于温度读取失败),导致瞬态错误直接触发告警。

:magnifying_glass_tilted_left: 参考文档:搜索结果 中提及 contbin_H10L5 用于 “CPU温度读取失败”、“VRD温度读取失败” 等场景。


五、解决方案建议

:white_check_mark: 1. 补充防抖机制(推荐)

应在事件定义中引入 持续二值防抖 contbin_H10L5,确保仅在连续多次检测失败后才上报告警。

  • 配置建议

    Event_Cpu1VrdTempFail:
      Debounce: "#/Debounce_contbin_H10L5"
      Reading: "<?>Scanner_PowerGood.Value; ... "
    
  • 原理:即使某次读取失败,只要在 10 次高电平判断中不超过 5 次失败,就不会触发告警。

:white_check_mark: 2. 强化 PowerGood 条件判断

优化表达式,增强判空和状态联动:

"Reading": "<?>Scanner_PowerGood.Value; <?>/VrdMgmt_1.VrdTemperatureCelsius |> expr{$1 != 1 ? 0 : ($2 == 32511 || $2 < 0 ? 1 : 0)}"
  • $1 != 1 ? 0:非上电状态一律不告警。
  • $2 < 0:补充对负值或异常值的过滤。
:white_check_mark: 3. 关联系统重启状态(可选)

利用 The host was restarted 这类事件作为上下文,在重启完成前静默特定告警

  • 可通过规则引擎实现:
    if last_event.code == 0x2C00000F and time_since_event < 15s then
      suppress_event("CPU_VRD_TEMP_FAIL")
    end
    
:white_check_mark: 4. 升级版本确认修复

已有类似问题在后续版本中被修复(见 search result #4):

10月版本已解决

建议确认当前版本 OpenUBMC2509 是否包含相关修复补丁。若未包含,应提交至维护团队考虑合入。


六、总结

项目 内容
问题本质 系统重启过程中,因传感器未就绪与监控策略未充分防抖,导致 CPU VRD/VDDQ 温度读取失败告警短暂上报。
是否真实故障 :cross_mark: 否,属正常瞬态行为,非硬件或固件缺陷。
根本原因 1. 传感器初始化晚于监控采集
2. 缺少有效防抖机制
3. PowerGood 判断存在窗口期
推荐措施 立即生效
• 增加 contbin_H10L5 防抖
• 优化事件触发表达式
长期规划
• 升级至已知修复版本

七、附录:相关实体与配置参考

实体 类型 描述
VrdTemperatureCelsius 软件属性 VRD 温度值,用于调速与告警
CpuDDRVddqTemp 软件属性 CPU DDR VDDQ 区域温度
CpuNBDVDDTemp 软件属性 CPU NB DVDD 区域温度
Scanner_PowerGood Scanner 检测系统是否处于稳定供电状态
VrdMgmt CSR Class VRD 电源与温度管理核心类
contbin_H10L5 防抖机制 用于温度读取失败的持续二值防抖

:books: 参考文档:

  • 《CSR配置字典之VrdMgmt类》
  • 《CSR硬件监控防抖机制》
  • 《CoolingRequirement类配置字典》

:white_check_mark: 建议闭环操作
将本次分析结果同步至研发团队,并推动将 Event_CpuXxxTempFail 类事件统一加上 contbin_H10L5 防抖机制,从根本上杜绝重启过程中此类“误报”问题。

相关链接:

  1. OS下用reboot命令和BMC的页面点重启BMC,系统事件提示的有歧义
  2. SmcDfxInfo映射的多个scanner取到的数值一样,可能是什么原因?
  3. 【iTestSmart 1.0.35】重启后查询电源信息,BMC重启成功,查询信息失败。
  4. AC循环概率出现CPU、内存温度拿不到的情况
  5. CSR配置字典之VrdMgmt类 | 文档中心 | openUBMC

app.log中 event会记录告警产生与恢复时的告警值

可以根据这个日志看当时的值是什么 为什么告警

2026-01-24 04:21:08.866263 event NOTICE: hardware_event.lua(580): Event_Cpu1VddqTempFail_010102|{“source”:{“expressions”:[“expr($1 == 0 ? 0 : ($2 == 32511 ? 1 : 0))”],“properties”:[{“Property”:“Value”,“Interface”:“bmc.kepler.Scanner”,“Path”:“/bmc/kepler/Scanner/Scanner_PowerGood_010102”,“Service”:“bmc.kepler.hwproxy”},{“Property”:“CpuNBDVDDTemp”,“Interface”:“bmc.kepler.Systems.VrdMgmt”,“Path”:“/bmc/kepler/Systems/1/VrdMgmt/VrdMgmt_1_010102”,“Service”:“bmc.kepler.general_hardware”}]},“value”:[1,32511],“type”:“synchronization”}

不是这个 你直接过滤这一块的日志截图吧

app.log.txt (2.1 MB)

告警时间大概是2026-01-24 04:21:08

[Event_Cpu1VddqTempFail_010102]generate an event [deassert] while reading change to [0]
[Event_Cpu1VddqTempFail_010102] generate an event [assert] while reading change to [1]

你这边看下 为什么是这个值

这个值就是你的配置传递过来的

可以结合appdump/event 下的 sync_property 文件看

这个告警是与imu通信失败,导致拿不到电源信息。需要找bios分析对应时间点,是否imu有异常,后续恢复通信后才上报数据

在这个地方去set的0x7EFF,感觉是从imu获取失败了

sync_property_trace.log.txt (701.4 KB)

看这两个值是否符合预期
image

符合的,powergood是电源状态,1是上电,温度能获取40度

我的意思是 指在0 和 1 之间变更的时候 就会产生告警和消除告警

你在结合上面app.log 日志的时间

如果认为当时的值不应该是0/1

再分析那个时间段的值

这跟告警无关了 要看告警配置了

那估计就是你环境上生效的SR的问题了

收集一下日志吧

麻烦提供一下邮箱呢

sunpeijun1@h-partners.com

很像误告警

意思是你关联了2个值

在第一次解析的时候

Scanner_PowaerGood.Value或者VrdMgmt_2.VrdTemperatureCelsius

读到了初始值

1s内更新了正确的值

所以我这边确实收到了1和0 2个告警值

你得VrdMgmt_2.VrdTemperatureCelsius是不是默认值就是32511