EDAC 如何获取错误通知?来自 BIOS 或内存控制器?

EDAC 如何获取错误通知?来自 BIOS 或内存控制器?

我们使用 EDAC 来监控 DIMM 上的错误。

我想知道 EDAC 如何获取有关这些错误的通知?

  1. 内存控制器有中断通知BIOS,然后BIOS通知OS?
  2. 内存控制器有中断直接通知操作系统。

我看到一个关键词:固件优先模式。

此设置是在 BIOS 或内存控制器上设置的吗?

dmesg日志:

dmesg | grep -i edac
[    0.346813] EDAC MC: Ver: 3.0.0
[   97.989717] EDAC sbridge: Seeking for: PCI ID 8086:2fa0
[   97.989727] EDAC sbridge: Seeking for: PCI ID 8086:2fa0
[   97.989738] EDAC sbridge: Seeking for: PCI ID 8086:2f60
[   97.989742] EDAC sbridge: Seeking for: PCI ID 8086:2fa8
[   97.989745] EDAC sbridge: Seeking for: PCI ID 8086:2fa8
[   97.989748] EDAC sbridge: Seeking for: PCI ID 8086:2f71
[   97.989751] EDAC sbridge: Seeking for: PCI ID 8086:2f71
[   97.989754] EDAC sbridge: Seeking for: PCI ID 8086:2faa
[   97.989757] EDAC sbridge: Seeking for: PCI ID 8086:2faa
...
...
[   97.989927] EDAC MC0: Giving out device to module sb_edac controller Haswell SrcID#0_Ha#0: DEV 0000:ff:12.0 (INTERRUPT)
[   97.989927] EDAC sbridge:  Ver: 1.1.2

答案1

这要看情况,两者都有可能。

内存控制器报错一次;阅读它们可以清除它们。因此,如果系统固件和操作系统都尝试处理 EDAC 报告,则会发生竞争并且可能会错过错误。因此,正确配置的系统将直接处理 EDAC 报告,使系统固件脱离循环,或者使用 GHES(适当的 ACPI 驱动程序)从系统固件接收错误(这是“固件优先”模式)。

通过“直接”EDAC 驱动程序,操作系统可以处理来自内存控制器的机器检查异常 (MCE),并执行任何适当的操作。通过 GHES 驱动程序,系统固件可以处理 MCE,并通知操作系统。

根据场景的不同,您会看到不同的日志。启动日志应该告诉您配置是什么,如果发生内存错误,您将在固件优先模式下的日志中看到“软件事件”,否则会看到“硬件事件”。

这些设置可以是固件设置和操作系统配置的组合。在大多数“低端”支持 ECC 的系统上,没有相应的固件配置(仅访问日志),这完全取决于操作系统。高端服务器将在其固件配置中进行设置,并在其手册中描述如何配置它们(以及操作系统)。

相关内容