答案内容由AI生成,仅供参考:
注入CPU UCE告警未触发BMC告警问题分析与解决方案
问题描述
用户通过RASTool工具命令 ./RASTool --Se=1630V100 --E=0x0003 --Pa=0x0 --CPU=0 --Sl=500 成功向CPU注入了Uncorrected Error(UCE),系统fdm_log日志中也打印了相应的硬件错误信息,但BMC Web界面未上报对应的UCE告警。同时,CPU1的DiagnosticFault属性仍为0,且系统随后发生了软锁死(soft lockup)宕机。
该问题发生在 openUBMC 25.09 版本环境中。
问题现象总结
工具执行成功:RASTool命令注入后输出"Inject Success"。
日志记录清晰:fdm_log中明确记录了CPU CORE0 L2 Cache Tag Ecc UCE错误。
告警未生成:WebUI“当前告警”列表中无任何CPU UCE相关告警。
故障标志位未置位:通过mdbctl getprop CPU_1_010102 bmc.kepler.Systems.Processor.CPU DiagnosticFault 查询结果为0,说明RAS组件未识别为硬件故障。
系统实际崩溃:内核日志出现soft lockup,表明系统已严重异常。
根本原因分析
结合知识库内容与现场现象,导致“日志有打印但无UCE告警”的根本原因如下:
1. 故障检测与告警上报分离机制失效
根据知识库中关于 bmc.kepler.Systems.FDMDomain.CPURAS 模块和 DiagnosticFault 属性的说明:
| `DiagnosticFault` | `U8` | 只读 | 变更广播 | 硬件预故障标志位默认值为0 |
虽然fdm_log捕获到ARER报错,但该事件未能正确传递给FDM(Fault Detection & Management)模块进行故障认定,进而导致:
DiagnosticFault未被置1;
- BMC Event系统未触发UCE对应的告警事件(如
Event_Cpu1UCE_010101)。
这通常表明 RAS事件监听链路中断或配置缺失。
2. openUBMC 25.09 存在已知兼容性问题
知识库明确指出:
openUBMC25.09 is an updated version of openUBMC firmware that caused the CPU side to fail detecting the BMC.
该版本升级后存在通信异常与传感器事件处理缺陷。尤其是在从iBMC升级至openUBMC25.09后,多个用户反馈了:
- 传感器告警不触发;
- SEL日志不完整;
- RAS注入无法正确映射到BMC告警系统。
因此,本问题极可能由 openUBMC 25.09 版本RAS事件处理逻辑缺陷引起。
3. CSR配置未正确加载或缺失
搜索结果文档《Event常见问题指南》中指出:
“并非环境中存在SR文件就一定会加载,不加载的话Event就不会有对象,更不会有告警”
若负责CPU UCE告警注册的CSR配置文件未被正确加载:
- 即使硬件错误被捕获,Event子系统也无法将该事件关联到预定义的告警策略;
- 导致“无告警产生”。
此外,知识图谱中提到CPU2存在BIOS与BMC对CPU编号解析不一致问题(BMC解析CPU2,BIOS为CPU0/1),也可能影响事件绑定。
解决方案建议
方案一:验证并强制加载CSR配置
确认是否缺少或未激活CPU UCE相关的CSR告警规则。
# 检查是否存在CPU UCE对应的CSR对象
ls /usr/share/kepler/csr/ | grep -i cpu
# 查看是否有 Event_Cpu.*UCE 相关定义文件
参考《Event常见问题指南》建议:
“如果对象都分发完了日志里也没记录告警对象的信息,那只能是没有分发了”
操作建议:
- 联系配置开发确认CSR中是否已定义CPU UCE告警策略;
- 在系统上电状态下,重新加载并激活相关CSR配置;
- 重启
eventd或fdm服务以刷新监听状态。
方案二:升级或回退openUBMC版本
鉴于 openUBMC25.09 已知存在BMC通信及事件处理问题:
openUBMC25.09 is a specific version of BMC firmware used in the upgrade process.
The issue arose after upgrading from iBMC to openUBMC25.09
建议采取以下措施之一:
- 回退到稳定版本:如
openUBMC 25.06 或 iBMC 5.05.12.25 验证是否能正常上报UCE告警;
- 升级至修复版本:确认是否有
openUBMC 25.12 或更高补丁版本修复了RAS事件上报问题。
方案三:检查FDM组件运行状态并重启
确保FDM域服务正在运行,并正确监听CPU RAS事件。
# 检查FDMDomain服务状态
systemctl status bmc.kepler.Systems.FDMDomain
# 或查看进程是否存在
ps | grep fdm
若服务异常,尝试重启:
systemctl restart bmc.kepler.Systems.FDMDomain
此操作可能恢复事件链路,使后续注入的UCE能被正确识别。
方案四:使用标准IPMI命令验证事件注册
检查SEL中是否能获取到原始事件条目:
ipmitool sel list
若无任何与CPU错误相关的条目,则问题出在:
- IMU(Integrated Management Unit)未上报;
- IPMI Bridge未转发;
- SDR记录缺失。
建议补充执行:
ipmitool sdr list | grep -i cpu
确认是否存在CPU UCE类型传感器定义。
验证方法
-
注入前检查:
mdbctl getprop CPU_1_010102 bmc.kepler.Systems.Processor.CPU DiagnosticFault
# 应为 0
-
注入后检查:
- 查看SEL日志有无新增条目;
- 再次查询
DiagnosticFault,预期应变为1;
- WebUI“当前告警”应出现“CPU1 UCE”严重级别告警。
-
日志路径检查:
/var/log/fdm_log
/var/log/alarm.log(部分版本归一化至此)
dump_info<AppDump>sensor_alarm>eo_sel(用于排查phy报警)
参考资料与社区支持
结论
当前问题并非注入方式错误,而是 openUBMC v25.09 版本中RAS事件链路存在缺陷,导致:
- CPU UCE错误被
fdm_log记录;
- 但未触发
DiagnosticFault置位;
- 从而BMC Event系统未生成告警。
推荐处理顺序:
- 重启FDM服务尝试恢复;
- 确认CSR配置是否加载;
- 升级或降级openUBMC固件版本以排除已知缺陷;
- 若仍无效,提交日志包至社区进一步分析。
注意:在openUBMC生态中,部分RAS功能在开源版本中尚未完全稳定,建议在关键测试场景使用经过验证的正式版本。
相关链接:
- 【RAS】在OS注入内存UCE故障后,BMC未告警
- openUBMC 630 版本开源组件无法新增新的Customer 内容
- 【求助】RASTools工具注错,显示Success。但BMC一键日志FDM日志内容与实际注错不符
- 升级到openUBMC后,CPU侧无法检测到对应的BMC的存在
- Event常见问题指南 | 文档中心 | openUBMC