问题描述
带内模拟注入内存CE故障超阈值,查看BMC只有“CorrectableECC”和“CorrectableECCOverflow”属性发生变更
“CorrectableECCError”并未发生变更 内存CE错误超门限,门限值是Bios选项中设置嘛?还是BMC哪里可以配置
答案内容由AI生成,仅供参考:
| 问题 | 回答 |
|---|---|
CorrectableECCError 如何触发? |
当在 Funnel Time 时间内,CE 错误次数 超过 BIOS 中设置的 Threshold 值,且 MemFaultIsolationEnabled = true |
| 门限在哪配置? | BIOS 中配置:Advanced → RAS → Memory RAS → Correct Error Threshold |
为何只看到 CorrectableECC 和 Overflow? |
可能是注入地址错误、未达阈值、MemFaultIsolationEnabled 未开,或 BMC 日志限流所致 |
| 如何确保触发成功? | 使用高地址注入、保证注入频次 > Threshold、关闭限流、确认 RAS 配置已使能 |
CorrectableECCError 的机制说明根据您提出的问题,以下是对内存可纠正错误(Correctable ECC, CE)超过门限后为何 CorrectableECCError 未触发,以及相关配置和触发机制的详细解释。
CorrectableECCError 是如何被触发的?CorrectableECCError 是一个标志位(flag),用于指示系统检测到多次可纠正 ECC 错误,并且已超过预设阈值。其触发机制如下:
MemFaultIsolationEnabled = true 才能完整上报告警信息(见下文)。
若仅
CorrectableECC变为 1,表示发生了单次可纠正错误;
若CorrectableECCOverflow变为 1,表示 CE 错误频率过高导致计数器溢出(即“漏斗溢出”);
但CorrectableECCError仍未置位,则极可能是门限未真正达到或配置未生效。
CE 错误的阈值主要在 BIOS 层面进行配置,BMC 负责读取并监控该设置。
Setup ➝ Advanced ➝ RAS Configuration ➝
Memory RAS Configuration ➝
• Correct Error Threshold: [用户设定值,例如3、5等]
• Funnel Time: [例如 60秒]
| 参数 | 含义 |
|---|---|
| Correct Error Threshold | 在一个漏斗周期内,允许的最大 CE 错误次数。超过此值将触发 CorrectableECCError=1 |
| Funnel Time (单位:秒) | 统计窗口时间,例如设为60秒,则系统每60秒清空一次 CE 计数 |
示例:若设置 Threshold = 3,Funnel Time = 60s,则在任意 60 秒内发生 4 次或以上 CE 错误,就会触发
CorrectableECCError=1。
CorrectableECCError 没有变化?可能出现以下几种原因导致该标志位未置位:
CurrentPeriodCacheUncorrectableECCErrorCount,而不是内存 DIMM 的 CE 统计。
解决方法:
# 查看有效系统内存地址范围(避免注入 cache 区域)
cat /proc/iomem | grep "System RAM"
选择高地址段、4K 对齐的地址进行注入,确保命中物理内存。
MemFaultIsolationEnabled 未开启(关键!)
来自知识库中的实测反馈(ID: 3):
“经排查,MemFaultIsolationEnabled这个属性值需要配置为true才可以”
MemFaultIsolationEnabled = false,即使 CE 超阈值,BMC 日志也不会记录 ACLS(Auto Corrective Logic Sequence)信息,CorrectableECCError 可能不会正确上报或未广播变更。
建议操作:
检查并确保以下配置已启用:
MemFaultIsolationEnabled = true
来自用户反馈(ID: 4):
- 当相同 FRU(如某根 DIMM)在 2 小时内发生相同类型日志达 5 次,会触发 BMC 主动限流;
- 限流后日志不再上报,仅打印:
CE overflow logs and CE Bucket logs start suppressing
虽然错误仍在发生,但 maintenance.log 不再记录,可能误判为无响应。
解除或调试限流的方法:
# 查询限流开关状态
mdbctl call FDMDomain_1_010101 bmc.kepler.Debug.Systems.FDMDomain GetConfigurations 0 "GetMaintenanceLogLimitingEnabled"
# 关闭限流功能(0 表示关闭)
mdbctl call FDMDomain_1_010101 bmc.kepler.Debug.Systems.FDMDomain SetConfigurations 0 "SetMaintenanceLogLimitingEnabled" 0
| 属性名 | 所属模块 | 描述 |
|---|---|---|
CorrectableECC |
MemoryOnChipRAS / MemoryRAS |
单次可纠正错误发生(瞬态事件) |
CorrectableECCOverflow |
MemoryOnChipRAS |
表示 CE 错误过多,内部缓冲区溢出(高频风暴) |
CorrectableECCError |
MemoryRAS |
表示“累计 CE 错误 > Threshold”,触发预故障机制 |
CorrectableECCOverfrequencyCount |
MemoryRAS |
统计运行周期内 CE 频率超限的次数 |
MemFaultIsolationEnabled |
BIOS / CSR | 控制是否启用内存错误隔离逻辑(直接影响 CorrectableECCError 上报) |
进入 BIOS 设置:
RAS Configuration → Memory RAS ConfigurationCorrect Error Threshold = 3Funnel Time = 60MemFaultIsolationEnabled = true操作系统中执行注入前检查:
cat /proc/iomem | grep "System RAM"
# 选取高位地址,如 0x100000000 开始的区域
使用合法工具注入 CE 故障(至少 4 次以上,间隔小于 Funnel Time)
检查 BMC 属性变化:
# 查看 MemoryRAS 属性
mctp-tool --get-property MemoryRAS_1 CorrectableECCError
mctp-tool --get-property MemoryRAS_1 CorrectableECCOverflow
确认日志中无限流提示:
logs start suppressing
如有,则按前述方法关闭限流。
| 问题 | 回答 |
|---|---|
CorrectableECCError 如何触发? |
当在 Funnel Time 时间内,CE 错误次数 超过 BIOS 中设置的 Threshold 值,且 MemFaultIsolationEnabled = true |
| 门限在哪配置? | BIOS 中配置:Advanced → RAS → Memory RAS → Correct Error Threshold |
为何只看到 CorrectableECC 和 Overflow? |
可能是注入地址错误、未达阈值、MemFaultIsolationEnabled 未开,或 BMC 日志限流所致 |
| 如何确保触发成功? | 使用高地址注入、保证注入频次 > Threshold、关闭限流、确认 RAS 配置已使能 |
最终建议:
请首先确认 BIOS 中配置了合理的 Correct Error Threshold 和 Funnel Time,并确保 MemFaultIsolationEnabled = true,这是 CorrectableECCError 成功触发的关键前提。
首先请明确“带内模拟注入”具体含义,通过IPMI接口模拟注入?RASTool故障注入?einj故障注入?不同方式是存在触发面的差异的;
CorrectableECC:表示内存已经发生过CE错误,BMC单次收到内存的CE错误IPMI消息即可置位;
CorrectableECCOverflow:表示具体内存已经发生CE错误超阈值事件,阈值和计数都在BIOS选项配置和统计;
CorrectableECCError:表示第3次CE超阈值后触发BIOS执行Bank替换事件,执行方也在BIOS;
以上3个场景都是独立的IPMI实现接口,单一的IPMI模拟注入是无法表示所有属性,如果是注错建议跟BIOS领域同事咨询对应触发方案
使用mdbctl命令能触发么?
setprop set MemoryRAS_1_01010117 bmc.kepler.Systems.FDMDomain.MemoryRAS CorrectableECCError 10
我执行后没有在web看到上报有关告警事件。
已在该贴有类似答复:
1.CorrectableECCError:表示第3次CE超阈值后触发BIOS执行Bank替换事件,执行方也在BIOS;
2.这属于BIOS的改动,建议提交问题到BIOS领域,聚焦BMC领域问题;
3.从920X天池架构开始,各软件责任能力需要归一,BIOS只提供隔离原子能力让带内/带外调度,不再自主执行隔离
1.CorrectableECCError:表示第3次CE超阈值后触发BIOS执行Bank替换事件,执行方也在BIOS; — 目前情况是第1次 第2次超阈值的事件告警没模拟触发出来。这句话我是否可以这样理解:bmc侧模拟触发CE命令 mdbctl setprop set MemoryRAS_1_01010117 bmc.kepler.Systems.FDMDomain.MemoryRAS CorrectableECCError 10 设置CorrectableECCError 大于1小于3就能触发CE的sel事件?
mem-A800IA3_2102315QYP10S3100024_20260529-1304.zip (9.5 MB) 附上一键收集日志
1.CorrectableECCError是一个状态值,不是计数值;
2.SEL事件是需要sr配置的,目前BIOS已经不支持第3次CE超阈值后执行Bank替换事件,所以sr也没有配置对应SEL事件;
如果你明确需要模拟并触发SEL,请先在sr配置Event并关联对象的CorrectableECCError,然后通过setprop设置为1才可以触发
已经配置了对应的SR:
sensor 事件:
“DiscreteEvent_Dimm000Listen_0”: {
"Property": "<=/MemoryRAS_1.CorrectableECCError",
"ListenType": 1,
"EventData1": 0,
"EventData2": 255,
"EventData3": "<=/Component_Memory1.Instance",
"EventDir": "<=/MemoryRAS_1.**CorrectableECCError**",
"Conversion": 0,
"SensorObject": "#/DiscreteSensor_DIMM000"
},
系统事件:
“Event_MemoryRAS1ECCMntr”: {
"EventKeyId": "Memory.MemoryCorrectableECC",
"Condition": 1,
"LedFaultCode": "000",
"Reading": "<=/MemoryRAS_1.**CorrectableECCError**",
"OperatorId": 5,
"Enabled": true,
"DescArg3": "<=/Memory_1.DimmName;<=/Memory_1.Position;<=/Memory_1.SilkText |> string.format('%s(%s %s)', $1, $2, $3)",
"Component": "#/Component_Memory1"
},
配置中,下列参数应该能理解吧?设置对应属性为1时触发sel
“OperatorId”: 5,
“Condition”: 1,
我知道你的意思,这是触发系统事件时的条件。它不影响触发SEL才对,但实际情况是并没有触发传感器事件(SEL)。