AC或者DC时出现获取不到cpu和内存温度的告警问题分析
更新时间: 2026/06/01
在Gitcode上查看源码

问题背景

  • 单板类型:S950
  • 软件版本:openUBMC 26.03
  • 涉及功能:CPU温度获取,IMU/IPMB 通信
  • 触发条件:AC或DC电源循环过程中,IMU(Intelligent Management Unit)尚未完全就绪。
  • 业务表现:预期AC/DC cycle后无异常告警;实际出现"failed to obtain of the memory/cpu1 core temperature"告警,告警产生后快速解除。

问题复现步骤

  1. 执行DC cycle或AC cycle操作。
  2. 检查BMC告警信息,出现获取不到CPU和内存温度的告警。

关键日志信息

app.log日志文件截图: 上下电日志:

定位过程

  1. web页面告警信息可知,AC/DC之后,产生了CPU内存温度获取失败告警之后又恢复,app.log日志可知,在AC或者DC过程中,IMU通信失败;
  2. 确认CPU温度来源,即通过ipmb通道从imu获取,目前温度值获取不到可能是ipmb通道不通或者是imu存在问题。
  3. 使用ipmb调试命令跟踪通道状态,检查app.log中IMU通信相关异常打印。
  4. 发现IMU在BMC读取温度时未完全初始化,可在读取中增加对PMU status的检查过滤。

问题原因

AC/DC 电源循环过程中,IMU短时间尚未完全就绪,BMC 即尝试通过 IPMB 通道获取 CPU 和内存温度,通信链路暂时不可用导致读取失败并上报告警。IMU就绪后告警自动解除。

解决方案

  1. 临时规避:在温度读取函数中增加前置条件判断(如检查 PMU status),当IMU未就绪时跳过本次读取,避免误报告警。
  2. 根本修复:与闭源 compute 组件团队协同,调整系统上电时序或IMU初始化逻辑,确保BMC访问传感器时IMU已完全就绪。
  3. 调试手段:通过 ipmb命令跟踪通信链路,分析 app.log 中 IMU 相关错误日志。