Linux x86/x86_64現(xiàn)在將始終保留前1MB的內(nèi)存
Linux x86/x86_64內(nèi)核代碼已經(jīng)有了保留前1MB內(nèi)存部分的邏輯,以避免BIOS或內(nèi)核有可能破壞這些空間,而自Linux 5.13開始將無條件地始終保留前1MB內(nèi)存。Linux內(nèi)核已經(jīng)滿足了英特爾Sandy Bridge圖形訪問低于1MB的內(nèi)存,已知前64K的內(nèi)存被一些BIOS損壞,以及類似的問題出現(xiàn)在內(nèi)存的低區(qū)域。
但是,與其分別處理所有這些邏輯和除了EGA/VGA幀緩沖區(qū)和BIOS之外的其他可能的小眾情況,內(nèi)核團隊更愿意做出一些保守的做法,例如總是保留前1MB的內(nèi)存,這樣它就不會被內(nèi)核破壞。
現(xiàn)在,Linux 5.13的做法是為Linux x86/x86_64無條件保留1MB,這一決定源于一個關(guān)于AMD Ryzen系統(tǒng)在Linux 5.13上無法啟動的錯誤報告,因為該報告整合了其早期內(nèi)存保留處理,而只需要無條件地做第一個1MB的保留,事情處理起來更簡單,而且潛在解決了其它的問題。
這個變化是今天早上作為x86/urgent的緊急改進請求被送進來的。團隊認(rèn)為,"摒棄所有在第一個MB中預(yù)留一定量的內(nèi)存以防止BIOS損壞的愚蠢做法,簡單無條件地預(yù)留整個MB是最好的做法。"
今天上午的x86拉動請求還包括禁用英特爾即將推出的Sapphire Rapids服務(wù)器CPU的新ENQCMD功能,直到該內(nèi)核代碼能夠被適當(dāng)清理和修復(fù)。x86版本還涉及第一代Hygon(基于AMD Zen)CPU不支持AMD64_SEV MSR的問題,因此Linux AMD SEV代碼首先會檢查CPUID位。