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"告警,告警产生后快速解除。
问题复现步骤
- 执行DC cycle或AC cycle操作。
- 检查BMC告警信息,出现获取不到CPU和内存温度的告警。
关键日志信息
app.log日志文件截图: 上下电日志:
定位过程
- web页面告警信息可知,AC/DC之后,产生了CPU内存温度获取失败告警之后又恢复,app.log日志可知,在AC或者DC过程中,IMU通信失败;
- 确认CPU温度来源,即通过ipmb通道从imu获取,目前温度值获取不到可能是ipmb通道不通或者是imu存在问题。
- 使用ipmb调试命令跟踪通道状态,检查app.log中IMU通信相关异常打印。
- 发现IMU在BMC读取温度时未完全初始化,可在读取中增加对PMU status的检查过滤。
问题原因
AC/DC 电源循环过程中,IMU短时间尚未完全就绪,BMC 即尝试通过 IPMB 通道获取 CPU 和内存温度,通信链路暂时不可用导致读取失败并上报告警。IMU就绪后告警自动解除。
解决方案
- 临时规避:在温度读取函数中增加前置条件判断(如检查 PMU status),当IMU未就绪时跳过本次读取,避免误报告警。
- 根本修复:与闭源 compute 组件团队协同,调整系统上电时序或IMU初始化逻辑,确保BMC访问传感器时IMU已完全就绪。
- 调试手段:通过 ipmb命令跟踪通信链路,分析 app.log 中 IMU 相关错误日志。