Linux

EDAC 如何獲得錯誤通知?從 BIOS 或記憶體控制器?

  • September 2, 2020

我們使用 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

這取決於,兩者都是可能的。

記憶體控制器報錯一次;閱讀它們可以清除它們。因此,如果系統韌體和作業系統都嘗試處理 EDAC 報告,則會出現競爭並且可能會遺漏錯誤。因此,正確配置的系統將直接處理 EDAC 報告,將系統韌體排除在循環之外,或者使用 GHES(適當的 ACPI 驅動程序)從系統韌體接收錯誤(這是“韌體優先”模式)。

使用“直接”EDAC 驅動程序,作業系統會處理來自記憶體控制器的機器檢查異常 (MCE),並執行任何適當的操作。使用 GHES 驅動程序,系統韌體處理 MCE,並通知作業系統。

根據場景,您會看到不同的日誌。引導日誌應該告訴您配置是什麼,如果發生記憶體錯誤,您將在韌體優先模式的日誌中看到“軟體事件”,否則為“硬體事件”。

這些設置可以是韌體設置和作業系統配置的組合。在大多數支持 ECC 的“低端”系統上,沒有相應的韌體配置(只是訪問日誌),這完全取決於作業系統。高端伺服器將在其韌體配置中進行設置,並在其手冊中描述如何配置它們(和作業系統)。

引用自:https://unix.stackexchange.com/questions/607302