答案内容由AI生成,仅供参考:
关于 reboot 过程中闪现 CPU VRD 和 VDDQ 温度获取失败告警的分析报告
一、问题描述
在执行 reboot 指令后,系统启动过程中,BMC 日志中短暂出现 CPU VRD(Voltage Regulator Device)和 VDDQ 温度读取失败的“轻微”级别告警。这些告警随后被自动消除(Deasserted),但在事件日志中仍被记录。
- 实际结果:重启期间上报了以下告警事件:
Failed to obtain data of the CPU 1 VRD temperatureFailed to obtain data of the CPU 2 VRD temperatureFailed 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 |
结论:所有告警均发生在主机重启(
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 判断,但以下因素仍可能导致闪现告警:
| 因素 | 说明 |
|---|---|
Scanner_PowerGood 信号的更新可能滞后于温度采集任务的执行周期,导致短暂窗口期内进行无效读取。 |
|
| 温度扫描器周期为 3000ms,而 PowerGood 检测为 8000ms,可能存在竞争条件。 | |
| CPU VRD/VDDQ 温度传感器依赖 BIOS 上报或 VRD 芯片初始化完成,在 reboot 初期尚未就绪。 | |
当前事件未启用 contbin_H10L5 类型的二值防抖(专用于温度读取失败),导致瞬态错误直接触发告警。 |
参考文档:
搜索结果中提及contbin_H10L5用于 “CPU温度读取失败”、“VRD温度读取失败” 等场景。
五、解决方案建议
1. 补充防抖机制(推荐)
应在事件定义中引入 持续二值防抖 contbin_H10L5,确保仅在连续多次检测失败后才上报告警。
-
配置建议:
Event_Cpu1VrdTempFail: Debounce: "#/Debounce_contbin_H10L5" Reading: "<?>Scanner_PowerGood.Value; ... " -
原理:即使某次读取失败,只要在 10 次高电平判断中不超过 5 次失败,就不会触发告警。
2. 强化 PowerGood 条件判断
优化表达式,增强判空和状态联动:
"Reading": "<?>Scanner_PowerGood.Value; <?>/VrdMgmt_1.VrdTemperatureCelsius |> expr{$1 != 1 ? 0 : ($2 == 32511 || $2 < 0 ? 1 : 0)}"
$1 != 1 ? 0:非上电状态一律不告警。$2 < 0:补充对负值或异常值的过滤。
3. 关联系统重启状态(可选)
利用 The host was restarted 这类事件作为上下文,在重启完成前静默特定告警。
- 可通过规则引擎实现:
if last_event.code == 0x2C00000F and time_since_event < 15s then suppress_event("CPU_VRD_TEMP_FAIL") end
4. 升级版本确认修复
已有类似问题在后续版本中被修复(见 search result #4):
“10月版本已解决”
建议确认当前版本 OpenUBMC2509 是否包含相关修复补丁。若未包含,应提交至维护团队考虑合入。
六、总结
| 项目 | 内容 |
|---|---|
| 问题本质 | 系统重启过程中,因传感器未就绪与监控策略未充分防抖,导致 CPU VRD/VDDQ 温度读取失败告警短暂上报。 |
| 是否真实故障 | |
| 根本原因 | 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 |
防抖机制 | 用于温度读取失败的持续二值防抖 |
参考文档:
- 《CSR配置字典之VrdMgmt类》
- 《CSR硬件监控防抖机制》
- 《CoolingRequirement类配置字典》
建议闭环操作:
将本次分析结果同步至研发团队,并推动将 Event_CpuXxxTempFail 类事件统一加上 contbin_H10L5 防抖机制,从根本上杜绝重启过程中此类“误报”问题。
相关链接: