29.3. 5 級分頁¶
29.3.1. 概述¶
原始 x86-64 透過 4 級分頁限制為 256 TiB 的虛擬地址空間和 64 TiB 的物理地址空間。我們已經碰到了這個限制:一些供應商今天提供具有 64 TiB 記憶體的伺服器。
為了克服這個限制,即將推出的硬體將引入對 5 級分頁的支援。 它是當前頁表結構的直接擴充套件,增加了一層轉換。
它將限制提高到 128 PiB 的虛擬地址空間和 4 PiB 的物理地址空間。 這“對任何人來說都應該足夠”©。
QEMU 2.9 及更高版本支援 5 級分頁。
5 級分頁的虛擬記憶體佈局在記憶體管理中描述
29.3.2. 使用者空間和大型虛擬地址空間¶
在 x86 上,5 級分頁啟用 56 位使用者空間虛擬地址空間。 並非所有使用者空間都已準備好處理寬地址。 眾所周知,至少一些 JIT 編譯器在指標中使用較高的位來編碼其資訊。 它與 5 級分頁的有效指標衝突並導致崩潰。
為了緩解這種情況,預設情況下我們不會分配高於 47 位的虛擬地址空間。
但是使用者空間可以透過指定高於 47 位的提示地址(帶或不帶 MAP_FIXED)來請求從完整地址空間分配。
如果提示地址設定高於 47 位,但未指定 MAP_FIXED,我們會嘗試按指定地址查詢未對映區域。 如果它已經被佔用,我們會在完整地址空間中查詢未對映區域,而不是從 47 位視窗中查詢。
高提示地址只會影響相關分配,而不會影響任何未來的 mmap()。
在較舊的核心上或在沒有 5 級分頁支援的機器上指定高提示地址是安全的。 該提示將被忽略,核心將回退到從 47 位地址空間分配。
這種方法有助於輕鬆地使應用程式的記憶體分配器瞭解大型地址空間,而無需手動跟蹤已分配的虛擬地址空間。
我們需要在此處處理的一個重要情況是與 MPX 的互動。 MPX(沒有 MAWA 擴充套件)無法處理高於 47 位的地址,因此我們需要確保在我們已經有高於邊界的 VMA 時無法啟用 MPX,並禁止建立此類 VMA 一旦 MPX 被啟用。