RAStool注入内存UCE,属性未发生变更

问题描述



Setup下开启内存巡检功能,在OS下–E=0x22注入内存巡检UE错误,等待巡检到错误后查看sel日志是否有上报
预期有上报,实际未上报。
fdm_output有大量错误

有配置内存的UCE事件

但是DiagnosticFault属性值未发生变化。

环境信息

  • 软件版本:[如 OpenUBMC2509]

重现步骤

Setup下开启内存巡检功能,
./RASTool --E=0x22 --Sy=0x21000000
在OS下–E=0x22注入内存巡检UE错误,等待巡检到错误后查看sel日志是否有上报

期望结果

产生内存UCE sel记录

实际结果

未产生

分析结论

需要帮忙确认,这种错误在FDM内是否有监控和管理?


一键收集:
巡检UE无sel日志上报.tar.gz (7.7 MB)

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

五、结论

项目 结论
问题是否真实存在 是,现象合规但流程断裂
FDM是否检测 是,错误已在fdm_output中高频记录
SEL未上报原因 BIOS未将此错误封装为IPMI事件上报至BMC
DiagnosticFault不变 因BMC未收到诊断事件
根本原因 注入路径绕过了BIOS的RAS上报机制,且MemPatrolScrubAlarmEnabled可能默认关闭
解决路径 打开内存巡检告警开关 + 使用标准EINJ工具注入 + 验证BIOS配置

六、附加建议

:white_check_mark: 建议添加如下调试命令 以辅助定位:

# 查看当前内存错误计数器
mdbctl lsprop RASC_HIS_UNCORR_CNT        # 不可纠正错误计数
mdbctl lsprop CurrentPeriodUncorrectableECCErrorCount

# 监听IPMI事件接收情况
ipmitool sel list | tail -20

# 检查FDM事件生成器状态
ps | grep fdm
cat /var/log/fdm.log | grep -i ue

:white_check_mark: 建议将此案例纳入测试流程规范

“测试内存UCE告警功能时,不应仅依赖RASTool直接注入,而应使用EINJ标准注入工具,并确保BIOS开启了Patrol Scrub Alerting。”


:green_circle: 最终结论:FDM已监控该错误,但由于BIOS未上报IPMI事件且告警开关可能关闭,导致BMC未生成SEL与告警。开启MemPatrolScrubAlarmEnabled并改用EINJ注入可解决此问题。

点击此处查看详细分析解答

RASTool注入内存UCE故障后属性未变更及未上报SEL日志的分析与解决方案


一、问题描述

用户使用RASTool工具在操作系统环境下注入内存不可纠正错误(UE),具体命令为:

./RASTool --E=0x22 --Sy=0x21000000

尽管命令执行成功,fdm_output中也出现了大量不可纠正错误告警(如“[Major Warning] DIMM@E0 uncorrect error”),但存在以下问题:

  1. 未上报SEL日志:系统事件日志(SEL)中未记录对应的内存UCE事件。
  2. DiagnosticFault属性未变化:该属性值持续为0,未触发故障状态。
  3. 无告警产生:尽管配置了相应的事件,Web界面和日志均未显示预期告警。

目标是确认:RASTool注入的UE错误类型是否被FDM系统识别并正确处理?是否应有SEL记录?以及诊断属性为何未更新。


二、关键信息提取与分析

1. 注入错误类型分析

  • 使用参数 --E=0x22 表示注入的是 内存巡检不可纠正错误 (Patrol Scrubbing Uncorrectable Error)
  • 日志中的 IERRCODE: 0X48IERRCODE: 0X49 分别对应:
    • 0X48: HA access non-mirror space uncorrect error (poison enable) — 访问非镜像空间的不可纠正错误。
    • 0X49: Patrol scrubbing read uncorrect error — 巡检读取时发生的不可纠正错误。

结论:本次注入错误属于 巡检过程中触发的UE,而非运行时突发错误。


2. SEL日志未上报的原因

:white_check_mark: SEL机制依赖BIOS上报

根据知识图谱内容:

  • SEL(System Event Log) 是由 BIOS采集硬件事件并通过IPMI接口上报给BMC 的。
  • BMC本身不会主动观测底层寄存器,而是依赖 BIOS/Firmware上报IPMI事件 才能生成SEL条目。

示例:

文档ID 4114 提到:通过RASTool注入CPU UCE后,虽然fdm_log有打印,但“web界面无uce告警”,说明底层事件被触发,但未进入SEL上报流程

:cross_mark: RASTool间接注入 ≠ BIOS直接上报

  • RASTool 是一种 直接写入硬件寄存器或模拟错误条件 的工具,其产生的错误可能 绕过BIOS RAS管理层
  • 若BIOS未检测到该错误(如未通过标准ARER/EDAC上报路径),则不会向BMC发送IPMI SEL消息。

:magnifying_glass_tilted_left: 引用知识:

  • “FDM记录数据相关CPU UCE故障”(Entity: CPU UCE Fault → FDM)
  • “SEL requires CPU UCE fault to generate alerts”(Relationship)

:light_bulb: 推论:RAM错误需经BIOS检测并封装为IPMI事件才能写入SEL。若BIOS未感知,BMC不会记录。


3. DiagnosticFault属性不更新的原因

:round_pushpin: DiagnosticFault含义

该属性是 位于BMC端的一个标志性状态字段,用于指示某内存DIMM是否已被诊断为存在严重故障。它并非原始硬件寄存器值,而是一个 由BMC根据BIOS/IPMI事件或FDM分析结果置位的逻辑状态

:magnifying_glass_tilted_left: 分析条件链

从知识库可知:

  • 内存UCE异常 → FDM记录 → BIOS封装为IPMI Event → BMC接收 → 更新DiagnosticFault → 触发告警
  • 当前现象是:FDM能检测错误,但 DiagnosticFault未置位 → 说明 BMC未接收到有效的IPMI诊断事件

:link: 相关关系:

  • "CPU UCE Fault" → "SEL":CPU类UCE需SEL支持告警
  • "FDM records data related to CPU UCE Fault" → BMC的FDM模块负责收集错误
  • "RASTool --E=0x22" → 注入Memory UCE,应由Memory_UE(见ref 6分析)处理

4. FDM是否监控和管理此类错误?

:white_check_mark: 是,FDM确实监控内存巡检UE

在用户提供的截图中:

Name: MEMORY_UE        Type:0x0020
Name: MEMORY_ES_UE     Type:0x0022

这表明FDM已配置对 内存不可纠正错误(MEMORY_UE)及其扩展模式(MEMORY_ES_UE) 进行监控。

同时,--E=0x22 正好与 Type: 0x0022 对应。

此外,在ARER日志中看到:

Error Type: Uncorrected error, Latent or Restartable error (UEO)

这是标准的非致命性不可纠正错误(一般用于巡检场景)

:white_check_mark: 结论:FDM已经正确识别了该错误类型,并进行了多次记录(fdm_output多条重复告警)


5. 配置层面:事件配置已开启

用户已配置事件:

"EventKey0E0UCE": {
  "EventKeyId": "Memory.MemoryUncorrectableErr",
  "Reading": "</Memory_15.DiagnosticFault",
  "Enabled": true
}

这意味着:

  • DiagnosticFault == 1 时,应触发事件 MemoryUncorrectableErr
  • 当前 DiagnosticFault == 0 → 不满足条件 → 不触发告警

所以根本原因在于:错误未导致DiagnosticFault置位


6. 巡检UE vs. 运行时UE 的区别(核心要点)

类型 巡检UE(Patrol Scrubbing UE) 运行时UE(Runtime UE)
错误来源 内存控制器定期巡检过程 CPU访问内存时发生
可恢复性 Latent / UEO(延后处理) Fatal / UER(立即致命)
是否中断执行流
是否自动上报BIOS 依赖策略 通常会立即上报
是否计入CE bucket或触发预测 部分系统会计入 直接触发FDM响应
IPMI上报行为 可能不主动上报SEL 多数情况下会上报

:warning: 关键区别

  • 巡检发现的UE 是“背景扫描”发现的,可能被视为 非紧急错误,默认策略可能是 仅上报FDM日志,不强制生成SEL 或不置位DiagnosticFault
  • 某些系统需配合特定 内存Patrol Scrub Alarm Switch 才会上报。

三、根本原因总结

问题 根本原因
未生成SEL日志 BIOS未将此RASTool注入的巡检UE错误封装并上报IPMI SEL事件,导致BMC无法记录
DiagnosticFault未置位 BMC未收到任何IPMI诊断事件(如Memory Replace FailedUncorrectable Error Detected),因此没有理由修改状态
无告警产生 告警基于DiagnosticFault,其值为0,规则未命中
FDM是否监控 是的,FDM已记录错误并在fdm_output中持续输出警告
配置生效吗 配置正确,但前提条件未满足(DiagnosticFault需先为1)

四、解决方案与建议

:white_check_mark: 方案1:验证BIOS是否支持巡检UE主动上报

  • 查阅BIOS RAS配置项中是否存在以下选项:
    • Patrol Scrub Reporting Mode
    • Report PATROL errors via IPMI
    • Enable Memory Patrol Uncorrectable Error Alerting
  • 确保这些选项 设置为“Enabled”

:pushpin: 依据:搜索结果中有评审通过的开关:

  • MemPatrolScrubAlarmEnabled:控制内存巡检不可纠正错误是否触发告警
  • 默认关闭,需要显式打开

:check_mark: 建议操作

# 查询资源树是否支持该开关
dbusc get /bmc/kepler/Systems/1/FDMDomain bmc.kepler.Systems.FDMService MemPatrolScrubAlarmEnabled
# 若支持且为false,则启用
dbusc set /bmc/kepler/Systems/1/FDMDomain bmc.kepler.Systems.FDMService MemPatrolScrubAlarmEnabled true

:white_check_mark: 方案2:使用更标准的注入方式(推荐用于测试SEL)

RASTool方式过于底层,易绕过BIOS管理层。建议改用 APEI EINJ(ACPI Platform Error Injection)

# 加载模块
insmod apei/einj.ko

# 设置错误类型为 memory uncorrectable (UE)
echo 0x8 > /sys/kernel/debug/apei/einj/error_type

# 注入
echo 1 > /sys/kernel/debug/apei/einj/error_inject

:white_check_mark: 优势:

  • 该方法经过标准ACPI路径,BIOS/RAS组件会识别为“正式错误”,大概率触发IPMI上报

:white_check_mark: 方案3:检查内存RAS配置参数

确保以下BIOS设置正确:

Advanced → RAS Configuration → Memory RAS Configuration
  - Patrol Scrubbing: Enabled
  - PATROL Error Handling: Log & Alert
  - Correctable Error Threshold: >0
  - Error Logging Limit: 3

部分系统要求连续出现多个CE/UE才会置位诊断状态。


:white_check_mark: 方案4:确认DIMM可更正性(是否支持UEO处理)

  • 某些低端或无ECC功能的内存模块对UE无响应策略。
  • 确认DIMM为 RDIMM/LRDIMM DDR5 并支持 UEO(Uncorrectable Error Only)模式
  • 可通过以下命令查看内存健康状态:
    ipmitool sdr list | grep -i memory
    get_dimm_info.sh
    

:white_check_mark: 方案5:联系BIOS团队确认注入路径是否合规

  • 提供ARER日志、IERRCODE、RASTool参数,询问:

    “使用RASTool参数--E=0x22注入Patrol UE,预期会触发哪类IPMI事件?是否需要特殊BIOS配置才能使其被上报?”

  • 因为不同SoC平台(TotemA/B)可能对--E=0x22解释不同。


五、结论

项目 结论
问题是否真实存在 是,现象合规但流程断裂
FDM是否检测 是,错误已在fdm_output中高频记录
SEL未上报原因 BIOS未将此错误封装为IPMI事件上报至BMC
DiagnosticFault不变 因BMC未收到诊断事件
根本原因 注入路径绕过了BIOS的RAS上报机制,且MemPatrolScrubAlarmEnabled可能默认关闭
解决路径 打开内存巡检告警开关 + 使用标准EINJ工具注入 + 验证BIOS配置

六、附加建议

:white_check_mark: 建议添加如下调试命令 以辅助定位:

# 查看当前内存错误计数器
mdbctl lsprop RASC_HIS_UNCORR_CNT        # 不可纠正错误计数
mdbctl lsprop CurrentPeriodUncorrectableECCErrorCount

# 监听IPMI事件接收情况
ipmitool sel list | tail -20

# 检查FDM事件生成器状态
ps | grep fdm
cat /var/log/fdm.log | grep -i ue

:white_check_mark: 建议将此案例纳入测试流程规范

“测试内存UCE告警功能时,不应仅依赖RASTool直接注入,而应使用EINJ标准注入工具,并确保BIOS开启了Patrol Scrub Alerting。”


:green_circle: 最终结论:FDM已监控该错误,但由于BIOS未上报IPMI事件且告警开关可能关闭,导致BMC未生成SEL与告警。开启MemPatrolScrubAlarmEnabled并改用EINJ注入可解决此问题。

1.patrol scrubbing read uncorrect error简称巡检UCE,是由BIOS定期对内存全量颗粒做数据校验,故障上报后一般不会对系统产生影响,所以BMC默认不会对该场景触发SEL告警,可以通过北向开关控制告警使能;

2.可以通过修改资源树控制

path:/bmc/kepler/Systems/1/FDMDomain

interface:bmc.kepler.Systems.FDMService

prop:MemPatrolScrubAlarmEnabled

3.该配置也支持通过redfish配置

URL:/redfish/v1/Managers/manager_id/FDMService

prop:MemPatrolScrubAlarmEnabled

2 个赞

这个开启后就会在巡检UCE上报时,将DiagnosticFault属性修改为1,然后触发告警是吗?Event事件需要额外适配吗。

不需要

再问一下哈,这个有其它的方式进行修改吗?比如说定制项或者IPMI命令。
客户要求出厂监控这种情况的UCE,估计要在定制化阶段或者什么时候默认开启。

另外,Memory类的DiagnosticFault和MemoryRAS类的UncorrectableECCError、CorrectableECCError等属性有什么关联吗?如果我要配置一个内存的UCE告警,需要关联的是哪个属性呢?

patrol scrubbing read uce开关已经提供redfish标准接口修改,暂时没有IPMI或者配置导入导出接口

DiagnosticFault置位依据是BMC内置专家规则,依据明确
UncorrectableECCError是仅从级别置位,比较粗暴,范围比较大,存在误更换的情况
根据产品使用的运维策略调整使用属性