Linux
EDAC 如何獲得錯誤通知?從 BIOS 或記憶體控制器?
我們使用 EDAC 來監控 DIMM 上的錯誤。
我想知道 EDAC 如何獲得有關這些錯誤的通知?
- 記憶體控制器有中斷通知 BIOS,然後 BIOS 通知 OS?
- 記憶體控制器有中斷直接通知作業系統。
我看到了一個關鍵詞:韌體優先模式。
這個設置是在 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 的“低端”系統上,沒有相應的韌體配置(只是訪問日誌),這完全取決於作業系統。高端伺服器將在其韌體配置中進行設置,並在其手冊中描述如何配置它們(和作業系統)。