【RAS】在OS注入内存UCE故障后,BMC未告警

在os内注入内存故障,下面是fdm_log的打印:

[Hardware Error Log Number]: 2    Time: 2025-12-23 16:53:06
Collect: IMU(INT)    Serial Number: 1    Collect Integrity: Validate(0X00)
Socket: CPU1    DIE: TotemB    Module: CPU CORE0    Sub Module: LSU
----------------------- ARER REPORTING ERROR -----------------------
Error Type:Uncorrected error, Signaled or Recoverable error (UER)
SERRCODE: 0X06 (data value from associative memory(ecc error on cache data))
IERRCODE: 0X00 (Undefined)
Arer_Status: Bit(31)ADDRValid    Bit(26)MISCValid    Bit(28)ErrReport
Arer_Address: 0X8400093F280 [DIMM060](SubChannel 0, Rank 0, LogicalRank 0, BankGroup 0, Bank 0, Device Unknown, Column 1824, Row 295) [TF Segment]
MISC0: CE Counter: 32767; Due to some error, LSU has enter the safe mode before; Bit(29)UE Valid    Bit(17:16)Dcache UE    Bit(22)L1 Dcache Data RAM    Bit(23)pipea    Bit(24)Load
MISC1: Error Code Undefined!
----------------------- ARER CPU CORE REGISTER DUMP -----------------------
ERR_FR: 0X00000000001249A2
ERR_CTL: 0X0000000000000505
ERR_STATUS: 0X00000000F4300006
ERR_ADDR: 0X000008400093F280
ERR_MISC0: 0X00007FFFA0400000
ERR_MISC1: 0X0000000000000000
ERR_MISC2: 0X0000000000000000
ERR_MISC3: 0X0000000000000000

但是看DIMM060的属性未变化:

我想请教下不告警的原因是什么?是注入的方式不对还是什么?

注错方式错误,你选择的系统地址错误导致注错触发到cache的异常了,可以在OS下执行如下命令选择高地址的内存空间进行注错

cat /proc/iomem | grep System

通过cat /proc/iomem | grep System会回显所有有效的系统地址,在高地址(数值大)范围区间选择一个地址,注意保持4K对齐(即最后3个数值需要是000),进行内存注错

这个注错是有什么特殊的工具吗?还是说直接往内存地址写一个错误的值?

这是测试提供的方式:
insmod /lib/modules/(uname -r)/kernel/drivers/acpi/apei/einj.ko.xz
insmod /root/mem_drv.ko

cd /sys/kernel/debug/apei/einj
echo 0x4 > error_type
echo 1 > error_inject

没看懂,这个要怎么修改注错地址

命令含义可通过开源内核Documentation/acpi/apei/einj.txt了解,内存注错的标准动作参考如下:

# cd /sys/kernel/debug/apei/einj
# cat available_error_type		# 查看可注入的错误
0x00000002	Processor Uncorrectable non-fatal	# 处理器错误
0x00000008	Memory Correctable					# 内存CE
0x00000010	Memory Uncorrectable non-fatal		# 内存UCE
# echo 0x12345000 > param1		# 设置注入地址,通过cat /proc/iomem | grep System获取地址,注意4K对齐
# echo 0x8 > error_type			# 设置注入类型为内存CE
# echo 1 > error_inject			# 执行注入
1 个赞

我也遇到没有告警,我看了QA仓库的固件联盟测试,他们有专门的工具注入,不会手动去给/sys注入,我这边注入,很容易挂死,并且BMC无告警

如下是我做的,不过是模板,可以参考,但是不代表有的能注入,只是以前写的一份文档,没有完全修缮,但是步骤是差不多的,就是细节要自己微调了。对于鲲鹏机子,我确实是实操过,真的大部分自己注入搞挂,大概率是不会给BMC产生告警的,甚至fdm也没有。

EINJ 简介与使用指南.pdf (284.7 KB)

由于大量社区举报,此话题被临时关闭至少 4 小时。