在管理記憶體資源之前,應當瞭解 ESXi 是如何虛擬化和使用這些記憶體資源的。

VMkernel 管理主機上的所有實體 RAM。VMkernel 會將此受管理實體 RAM 的一部分留給自己使用。其餘記憶體可供虛擬機器使用。

虛擬和實體記憶體空間劃分為數個區塊,稱為分頁。當實體記憶體已滿時,不在實體記憶體中的虛擬分頁的資料將儲存到磁碟上。視處理器架構而定,分頁大小通常為 4 KB 或 2 MB。請參閱進階記憶體屬性

虛擬機器記憶體

每個虛擬機器均會根據其設定大小消耗記憶體,還會消耗額外負荷記憶體以用於虛擬化。

設定的大小是提供給客體作業系統的記憶體數量。不同於配置給虛擬機器的實體 RAM 數量。後者取決於資源設定 (共用率、保留、限制) 以及主機上的記憶體壓力層級。

例如,請考慮設定大小為 1 GB 的虛擬機器。當客體作業系統開機時,系統會偵測到它正在具有 1 GB 實體記憶體的專用電腦上執行。有些情況下,可能向虛擬機器配置全部記憶體 (即 1 GB)。而有些情況下,可能會得到較少的配置。無論實際配置如何,客體作業系統都會繼續運作,就如同正在具有 1 GB 實體記憶體的專用電腦上執行一樣。

共用率
如果可用量超過保留區,則會為虛擬機器指定相對優先順序。
保留區
主機保證為虛擬機器預留的實體 RAM 數量下限,即使記憶體過度使用的情況也是如此。在設定保留區時,應確保虛擬機器具有足夠記憶體 ,以便讓執行更有效率,這樣就不會導致過多的分頁。

虛擬機器耗用其保留區內的所有記憶體後,將允許其保留該記憶體數量,並且不會進行回收,即使該虛擬機器處於閒置狀態。某些客體作業系統 (例如 Linux) 在開機之後可能不會立即存取已設定的全部記憶體。在虛擬機器耗用其保留區內的所有記憶體之前,VMkernel 可以將其保留區的任何未使用部分配置給其他虛擬機器。但是,當客體的工作負載增加且虛擬機器耗用其完整保留區之後,將允許其保留此記憶體。

限制
主機可配置給虛擬機器的實體 RAM 數量的上限。虛擬機器的記憶體配置還受其設定大小的隱式限制。

記憶體過度認可

虛擬機器保留區 (如果有) 和虛擬化額外負荷保留實體 RAM。

設定的所有虛擬機器記憶體大小總量,可能會超過主機上可用的實體記憶體數量。但這並不意味著記憶體已過度認可。當所有虛擬機器的組合工作記憶體使用量超過主機記憶體大小時,記憶體會過度認可。

由於 ESXi 主機使用的記憶體管理技術,您的虛擬機器可使用的虛擬 RAM 大於主機上可用的實體 RAM。例如,您可以擁有一個記憶體為 2 GB 的主機,並在其上執行四個虛擬機器,每個虛擬機器的記憶體為 1 GB。在此情況下,記憶體會過度認可。例如,如果四台虛擬機器全部閒置,則組合的已耗用記憶體可能低於 2GB。但是,如果所有 4GB 虛擬機器均主動消耗記憶體,則其記憶體使用量可能會超過 2GB,並且 ESXi 主機將會過度認可。

過度認可的意義在於,通常情況下有些虛擬機器負載較輕,而有些虛擬機器負載較重,相對活動層級會隨著時間的推移而不同。

為了提高記憶體利用率,ESXi 主機會將閒置虛擬機器的記憶體傳輸給需要更多記憶體的虛擬機器。使用 [保留] 或 [共用率] 參數可優先向重要的虛擬機器配置記憶體。這部分記憶體如果未使用,則可以用於其他虛擬機器。即使主機沒有出現嚴重的記憶體過度認可情況,ESXi 仍會實作各種機制 (如佔用、記憶體共用、記憶體壓縮和交換),以提供合理的效能。

在記憶體過度認可的環境下,如果虛擬機器消耗所有可保留的記憶體,則 ESXi 主機會用盡記憶體。雖然開啟的虛擬機器不會受影響,但由於缺少記憶體,新的虛擬機器可能無法開啟。
備註: 所有虛擬機器記憶體額外負荷也被認為是保留資源。

此外,ESXi 主機依預設已啟用記憶體壓縮,在記憶體過度認可時可改善虛擬機器效能,如記憶體壓縮中所述。

記憶體共用

記憶體共用是 ESXi 專屬技術,可協助主機上達到更大的記憶體密度。

要進行記憶體共用,先決條件是要觀察到多個虛擬機器可能正在執行相同客體作業系統的執行個體。這些虛擬機器可能具有相同的應用程式或載入的元件,或包含共同的資料。在此類情況下,主機會使用專屬透明分頁共用 (TPS) 技術,消除記憶體分頁的多餘複本。透過記憶體共用,在虛擬機器中執行的工作負載所消耗的記憶體,通常要少於其在實體機器上執行時所需的記憶體。因此,可以高效地支援更高層級的過度使用。記憶體共用所省下的記憶體數量,取決於工作負載是否由幾乎相同的機器所組成 (要幾乎相同才有可能釋放更多記憶體)。如果工作負載的組成較多元,則省下的記憶體百分比可能會較低。

備註:

基於安全考量,虛擬機器間的透明分頁共用預設會停用,分頁共用僅限於虛擬機器內的記憶體共用。分頁共用並不會在虛擬機器之間發生,而僅會在虛擬機器內部發生。如需詳細資訊,請參閱在虛擬機器之間共用記憶體

記憶體虛擬化

因為虛擬化引入了額外層級的記憶體對應,所以 ESXi可以在所有虛擬機器之間有效管理記憶體。

虛擬機器的一些實體記憶體可能對應到共用分頁,或對應到未對應或換出的分頁。

主機執行虛擬記憶體管理時無需瞭解客體作業系統,也不會干擾客體作業系統自己的記憶體管理子系統。

每個虛擬機器的 VMM 用於維持從客體作業系統的實體記憶體分頁到基礎電腦上實體記憶體分頁的對應。(VMware 將基礎主機實體分頁稱為「電腦」分頁,將客體作業系統的實體分頁稱為「實體」分頁。)

每個虛擬機器均有連續的、從零開始的可定址實體記憶體空間。每台虛擬機器使用的伺服器上的基礎機器記憶體不一定是連續的。

客體虛擬至客體實體位址由客體作業系統管理。Hypervisor 僅負責將客體實體位址轉譯為機器位址。硬體輔助的記憶體虛擬化則利用硬體設施產生與 Hypervisor 維護的客體分頁表和巢狀分頁表結合的對應。

該圖說明 ESXi如何實作記憶體虛擬化。

圖 1. ESXi記憶體對應

此圖說明如何實作記憶體虛擬化。
  • 方塊代表分頁,而箭頭代表不同的記憶體對應。
  • 從客體虛擬記憶體到客體實體記憶體的箭頭表示客體作業系統中的分頁表所維護的對應。(未顯示 x86 架構處理器從虛擬記憶體到線性記憶體的對應。)
  • 從客體實體記憶體到機器記憶體的箭頭表示由 VMM 維護的對應。
  • 虛線箭頭表示從客體虛擬記憶體到機器記憶體的對應,該對應也由 VMM 維護。執行虛擬機器的基礎處理器使用陰影分頁表對應。

硬體輔助的記憶體虛擬化

類似於 AMD SVM-V 和 Intel Xeon 5500 系列之類的 CPU 透過使用兩層分頁表,提供對記憶體虛擬化的硬體支援。

備註: 在本主題中,「記憶體」可指實體 RAM 或持續性記憶體。

第一層分頁表儲存了客體虛擬-實體轉譯,而第二層分頁表儲存了客體實體-電腦轉譯。TLB (translation look-aside buffer,轉譯對應緩衝區) 是一個轉譯快取,由處理器的記憶體管理單元 (MMU) 硬體維護。TLB 遺漏是此快取中的遺漏,而且硬體需要移至記憶體 (可能是多次) 以尋找所需轉譯。如果 TLB 中沒有某個客體虛擬位址,則硬體會查看這兩個分頁表,將客體虛擬位址轉譯為機器位址。第一層分頁表由客體作業系統維護。VMM 僅維護第二層分頁表。

效能考量事項

使用硬體協助時,可消除軟體記憶體虛擬化的額外負荷。尤其是,硬體協助消除了使陰影分頁表與客體分頁表保持同步所需要的額外負荷。但是,使用硬體協助時,TLB 遺漏延遲明顯較長。依預設,Hypervisor 會在硬體輔助模式中使用大型分頁,以降低 TLB 遺漏的成本。因此,工作負載是否受益於硬體協助,主要取決於在使用軟體記憶體虛擬化時由記憶體虛擬化引起的額外負荷。如果工作負載涉及少量分頁表活動 (例如程序建立、對應記憶體或內容切換),則軟體虛擬化不會引起顯著的額外負荷。相反,具有大量分頁表活動的工作負載可能會受益於硬體協助。

依預設,Hypervisor 會在硬體輔助模式中使用大型分頁,以降低 TLB 遺漏的成本。透過在客體虛擬至客體實體以及客體實體至機器位址轉譯中使用大型分頁,可實現最佳效能。

選項 LPage.LPageAlwaysTryForNPT 可以變更在客體實體至機器位址轉譯中使用大型分頁的原則。如需詳細資訊,請參閱 進階記憶體屬性

支援大型分頁大小

ESXi 為大型分頁大小提供有限支援。

x86 架構允許系統軟體使用 4 KB、2 MB 和 1 GB 分頁。我們將 4 KB 分頁稱為小型分頁,而將 2 MB 和 1 GB 分頁稱為大型分頁。大型分頁可釋放轉譯對應緩衝區 (TLB) 壓力,並降低分頁表所用成本,從而改善工作負載效能。

在虛擬化環境中,Hypervisor 和客體作業系統可獨立地使用大型分頁。雖然客體和 Hypervisor 使用大型分頁時可實現最大效能影響,但在大多數情況下,即使僅在 Hypervisor 層級使用大型分頁,也可觀察到效能影響。

依預設,ESXi Hypervisor 會使用 2 MB 分頁支援客體 vRAM。vSphere ESXi 對使用 1 GB 分頁支援客體 vRAM 提供有限支援。如需詳細資訊,請參閱〈使用 1 GB 分頁支援客體 vRAM〉