插拔电源、风扇期间概率性触发内存UCE错误,OS挂死。

问题描述:

插拔电源、风扇期间概率性触发内存UCE错误,OS挂死。上报告警日志如下:

DIMM101(CpuBoard1 DIMM101) triggered an uncorrectable error.

DIMM100(CpuBoard1 DIMM100) triggered an uncorrectable error.

相关app.log日志如下:

2026-04-27 06:46:00.408010 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:02.216935 fault_diagnosis NOTICE: fpc_diagnose.lua(566): [IFMM]: memory fault diagnosed, final_type: 0004
2026-04-27 06:46:02.221436 fault_diagnosis NOTICE: soc2_ras.lua(361): fpc_process: need bank_adddc
2026-04-27 06:46:02.223111 fault_diagnosis NOTICE: soc2_ras.lua(368): fpc_process: ADDDC is disable
2026-04-27 06:46:03.410722 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:03.704724 fault_diagnosis NOTICE: fpc_diagnose.lua(566): [IFMM]: memory fault diagnosed, final_type: 0004
2026-04-27 06:46:03.723699 fault_diagnosis NOTICE: soc2_ras.lua(361): fpc_process: need bank_adddc
2026-04-27 06:46:03.726604 fault_diagnosis NOTICE: soc2_ras.lua(368): fpc_process: ADDDC is disable
2026-04-27 06:46:03.871048 pcie_device ERROR: device_service.lua(1117): method_get_device_name fail
2026-04-27 06:46:03.873602 fault_diagnosis ERROR: silk.lua(156): get pcie silk fail: 1
2026-04-27 06:46:04.505892 ras ERROR: fdm_arm_address_translate.c(2611): [system_physical_addr_to_ddr_addr]input null or invalid ddr_addr.
2026-04-27 06:46:04.665898 pcie_device ERROR: device_service.lua(1117): method_get_device_name fail
2026-04-27 06:46:04.667286 fault_diagnosis ERROR: silk.lua(156): get pcie silk fail: 1
2026-04-27 06:46:05.251956 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:08.802588 fault_diagnosis NOTICE: fpc_diagnose.lua(566): [IFMM]: memory fault diagnosed, final_type: 0004
2026-04-27 06:46:08.811155 fault_diagnosis NOTICE: soc2_ras.lua(361): fpc_process: need bank_adddc
2026-04-27 06:46:08.814226 fault_diagnosis NOTICE: soc2_ras.lua(368): fpc_process: ADDDC is disable
2026-04-27 06:46:08.911056 fault_diagnosis ERROR: memory_ras.lua(834): mem params is nil
2026-04-27 06:46:09.724211 fault_diagnosis NOTICE: fpc_diagnose.lua(566): [IFMM]: memory fault diagnosed, final_type: 0001
2026-04-27 06:46:09.728369 fault_diagnosis NOTICE: soc2_ras.lua(207): fpc_process: need pageoffline
2026-04-27 06:46:09.730810 fault_diagnosis NOTICE: soc2_ras.lua(68): fpc_process: pageoffline switch is disable
2026-04-27 06:46:09.970350 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:10.028104 fault_diagnosis NOTICE: fpc_diagnose.lua(566): [IFMM]: memory fault diagnosed, final_type: 0001
2026-04-27 06:46:10.032711 fault_diagnosis NOTICE: soc2_ras.lua(207): fpc_process: need pageoffline
2026-04-27 06:46:10.035540 fault_diagnosis NOTICE: soc2_ras.lua(68): fpc_process: pageoffline switch is disable
2026-04-27 06:46:11.623262 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:12.211067 ras ERROR: fdm_arm_address_translate.c(2611): [system_physical_addr_to_ddr_addr]input null or invalid ddr_addr.
2026-04-27 06:46:16.090080 fault_diagnosis ERROR: memory_ras.lua(834): mem params is nil
2026-04-27 06:46:16.166207 ras ERROR: fdm_arm_address_translate.c(2611): [system_physical_addr_to_ddr_addr]input null or invalid ddr_addr.
2026-04-27 06:46:17.189792 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:18.172522 redfish NOTICE: alarm.lua(600): received a event[124-0].
2026-04-27 06:46:19.290304 unknown_service ERROR: bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out, val: , ret: -1
2026-04-27 06:46:19.894319 ras ERROR: fdm_arm_address_translate.c(2611): [system_physical_addr_to_ddr_addr]input null or invalid ddr_addr.
2026-04-27 06:46:25.392695 event NOTICE: events.lua(114): System critical count change 0 to 1 by [Event_Memory101UCE_010101].
2026-04-27 06:46:25.398168 event NOTICE: events.lua(127): System Health change Minor to Critical.
2026-04-27 06:46:25.448332 event NOTICE: hardware_event.lua(570): Event_Memory101UCE_010101|{“source”:{“properties”:[{“Path”:“/bmc/kepler/Systems/1/Memory/Memory_10_010101”,“Service”:“bmc.kepler.compute”,“Interface”:“bmc.kepler.Systems.Memory”,“Property”:“DiagnosticFault”}]},“value”:[1],“type”:“synchronization”}

想咨询一下ras上报的具体原理是什么?ras故障是否是bios通过bt传过来的?bios传过来的信息是怎么和DIMM进行对应的,日志中没有看到具体的CPU编号、channal编号、dimm编号的打印。

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

六、总结

项目 结论
RAS 是否接收来自 BIOS 的信息? :white_check_mark: 是,BIOS 是 UCE 错误的主要上报源
是否通过 BT 通道传递? :white_check_mark: 是,日志中 bt.lua 超时错误印证了该路径
DIMM 定位如何实现? :white_check_mark: BIOS 将物理地址转换为拓扑位置后上报,BMC 依据此生成告警
为何日志无编号信息? :cross_mark: 并非未定位,而是因功能禁用、地址翻译失败或日志级别限制未输出细节
插拔引发 UCE 的根源? :electric_plug: 电源/风扇插拔引起瞬态扰动 → 内存控制器误操作或训练失败 → 触发 UCE → OS 挂死
点击此处查看详细分析解答

RAS 上报内存 UCE 错误的原理及故障来源分析

根据您提供的问题描述和系统日志,以下是关于 RAS(Reliability, Availability, and Serviceability)上报内存不可纠正错误(UCE, Uncorrectable Error)的详细原理分析、故障路径解析以及对日志缺失信息的解释


一、RAS 上报 UCE 的基本原理

1. RAS 的角色定位

  • Ras 是 Baseboard Management Controller (BMC) 中的核心子系统,全称为 Reliability, Availability, and Serviceability
  • 它负责:
    • 硬件错误检测(如 CPU、内存、PCIe 故障)
    • 故障诊断与分类
    • 生成 SEL(System Event Log)
    • 触发告警(如 Critical 告警、LED 报警)
    • 启动自动恢复或隔离机制(如 Page Offline、Bank ADDC)

相关实体支持

  • Rasbmc.kepler.Systems.FDMDomain.MemoryRAS 子系统的管理进程,位于 /opt/bmc/apps/hica/subsys/ras/config.cfg
  • 它通过共享内存(Shared_Memory)与其他模块通信,并依赖 BIOS 和硬件上报原始错误数据

2. UCE 的定义与严重性

  • UCE(Uncorrectable Error)表示 无法被 ECC(Error Correcting Code)纠正的内存错误,通常会导致系统崩溃(OS hang)、数据损坏。
  • 相对的 CE(Correctable Error)可被自动修复,不中断运行。
  • RAS 必须处理 UCE,并触发上层响应(如 SEL 上报、健康状态降级)

知识图谱关联

  • RAS 包含 UCE 作为关键错误类别
  • BIOS 负责底层 ECC 错误检测和初步处理
  • MemoryRAS_1_01010117 是具体用于跟踪内存 RAS 状态的对象属性集合

二、RAS 故障是否由 BIOS 通过 BT 通道传入?

:white_check_mark: 结论:是的,RAS 接收的 UCE 故障主要来自 BIOS,且通过 BT(Block Transfer)接口通信

1. BIOS 是错误源头

  • BIOS 在系统运行时持续监控内存控制器状态。
  • 当发生硬件级内存错误(如地址线干扰、电源波动导致读写失效),内存控制器会生成 Machine Check Exception (MCE),由 BIOS 捕获并解析
  • BIOS 将错误摘要封装成 IPMI OEM 命令格式,通过 BT 接口发送给 BMC 的 RAS 模块

2. BT 接口的作用

  • BT 是一种基于 IPMI 的高速通信机制,用于 BMC 与主机操作系统/Bios/UEFI 之间的事件传递
  • 日志中的关键线索:
    bt.lua(84): bt[0], ioctl(BT_CMD_WRITE) failed: Connection timed out
    
    表明 BMC 的 bt 驱动尝试写入 BT 通道失败,连接超时——这正好发生在 UCE 触发期间。

:warning: 推论:插拔电源/风扇时可能引起瞬态电压波动 → BIOS 捕获到 UCE → 尝试通过 BT 向 BMC 发送错误 → BT 链路不稳定 → 写入超时 → BMC 虽未完整接收,但仍能从其他路径(如 FDM)诊断出问题 → 最终触发 RAS 告警


三、BIOS 如何将错误映射到具体 DIMM?为何日志无 CPU/Channel/DIMM 编号?

1. 错误定位流程:BIOS 完成物理映射

虽然 BMC 的日志中没有直接打印 CPU#, Channel, DIMM#,但以下机制确保了精准定位:

步骤 执行者 功能
1 CPU Memory Controller 捕获 MCE 异常,记录 ERR_ADDR(物理地址)
2 BIOS 将物理地址转换为 内存拓扑坐标(CPU ID, Channel ID, DIMM Slot, Rank, Bank)
3 BIOS 查询 SPD(Serial Presence Detect)信息,确定是哪个 DIMM
4 BIOS 将错误封装为 IPMI OEM Event 或 SEL Entry,包含目标 DIMM 标识
5 BMC RAS 解析 IPMI 消息,更新对应 RAS 属性对象(如 MemoryRAS_1_01010117)

知识支持

  • Get DIMM Info(NetFn 30h, Cmd 92h, SubCmd 2Bh)用于获取 DIMM 配置信息,BIOS 可利用此信息进行映射
  • memory resource info 由 BIOS 报告,包含内存配置细节,供 BMC 使用
  • ConfigErrorType 是由 CSR 寄存器定义的枚举类型,用于表示错误源

2. 为什么日志中看不到 CPU/Channel/DIMM 明细?

可能原因如下:

原因 说明
:small_blue_diamond: 日志级别设置过低 fault_diagnosisras 模块可能未启用 DEBUG 级输出,仅打印高级摘要(如 "memory fault diagnosed, final_type: 0004"
:small_blue_diamond: ADDC/PageOffline 功能禁用 日志明确显示:

fpc_process: ADDDC is disable
fpc_process: pageoffline switch is disable
这说明 BMC 收到了“需要执行内存隔离”的指令,但策略关闭,因此未深入打印定位细节 |
| :small_blue_diamond: 地址翻译失败(关键线索) | 多次出现:

[system_physical_addr_to_ddr_addr] input null or invalid ddr_addr.

表明 BMC 在尝试将物理地址映射回 DDR 地址空间时失败——无法完成 DIMM 定位,因此无法打印完整路径 |
| :small_blue_diamond: 错误来源非运行时访问,而是训练或初始化失败 | 插拔电源导致内存重新训练失败(Memory Training Failure),该类错误可能缺少完整的运行时地址信息 |


四、插拔操作引发 UCE 的根本原因分析

:electric_plug: 插拔电源/风扇 → 引发电源扰动 → 触发内存 UCE

可能机制包括:

因素 分析
:high_voltage: 电源瞬变(Power Glitch) 插拔电源瞬间造成 VRM 输出电压波动,内存供电(VDD/VDDQ)短暂超出容限 → 数据采样错误 → 触发 UCE
:tornado: 地弹(Ground Bounce)或噪声耦合 风扇启停产生电磁干扰(EMI),耦合到内存总线 → 地址/数据线误触发
:repeat_button: 内存重训练失败 断电再上电后,内存控制器需重新训练时序参数(training)。若此时电压不稳定,训练失败即视为硬件故障
:puzzle_piece: 时钟抖动(Clock Jitter) 电源不稳定导致内存时钟源漂移 → 采样时序偏移 → 多bit 错误 → UCE

:light_bulb: 证据支撑

  • 多次 bt 写超时 → 主控与 BMC 通信中断 → 发生在异常操作窗口
  • final_type: 00040001 是典型的内存故障分类码(IFMM:Integrated Fault Management Module)
  • 告警明确指出 DIMM100, DIMM101 → 表明最终定位成功(尽管日志未输出过程)

五、建议与排查方向

:white_check_mark: 短期缓解建议

措施 描述
1. 启用 ADDDC 与 Page Offline 功能 修改配置使能内存软隔离机制,防止 UCE 扩散
可通过 Redfish 或 CLI 设置:
/bmc/kepler/Systems/1/FDMDomain/MemoryRAS 中启用相关开关
2. 提高日志等级 设置 ras, fault_diagnosis 模块为 DEBUG 模式,捕获更详细的地址映射过程
3. 检查电源质量与冗余度 确保双电源负载均衡,避免单电源插拔引发整机压降

:wrench: 长期优化建议

措施 描述
1. 增加 PS UCE 告警开关控制 参考已评审需求《新增开关控制内存PS UCE告警策略》(见搜索结果 #8
默认关闭,允许高可靠性客户开启
2. 增强 BT 链路稳定性 优化 BT 超时重试机制,避免因短暂通信失败丢失关键错误信息
3. 完善地址翻译容错机制 system_physical_addr_to_ddr_addr 输入做校验与兜底处理,防止 null 导致后续流程中断
4. 在 SEL 中增强上下文输出 在上报 DIMM triggered an uncorrectable error 时,强制附加 CPU ID, Channel, Slot 等信息

六、总结

项目 结论
RAS 是否接收来自 BIOS 的信息? :white_check_mark: 是,BIOS 是 UCE 错误的主要上报源
是否通过 BT 通道传递? :white_check_mark: 是,日志中 bt.lua 超时错误印证了该路径
DIMM 定位如何实现? :white_check_mark: BIOS 将物理地址转换为拓扑位置后上报,BMC 依据此生成告警
为何日志无编号信息? :cross_mark: 并非未定位,而是因功能禁用、地址翻译失败或日志级别限制未输出细节
插拔引发 UCE 的根源? :electric_plug: 电源/风扇插拔引起瞬态扰动 → 内存控制器误操作或训练失败 → 触发 UCE → OS 挂死

:magnifying_glass_tilted_left: 建议下一步操作

  1. 收集完整的 fdm_logsel 记录
  2. 检查 MemoryRAS_1_01010117 属性值(使用 mdbctl lsprop
  3. 确认 ADDDCPageOffline 开关是否开启
  4. 重现实验时使用示波器监测内存供电稳定性

如有进一步日志或配置文件,可继续深入分析。

1.BIOS通过IPMB通道上报故障信息到BMC,fdm原始故障信息在fdm_log中,不是通过app.log查看的;

2.内存对应关系通过社区内存相关sr文件承载,具体可以查看Memory,MemoryChannel等对象的配置;