虛擬內存回收

VM與操作系統處理內存分配和釋放以相同的方式執行內存分配。客戶機操作系統通過向訪客空閒列表添加內存頁碼來釋放一塊物理內存。

虛擬機管理程序無法訪問客戶操作系統的空閒列表; 因此,管理程序很難知道何時釋放主機物理內存以及何時需要釋放客戶物理內存。管理程序完全不知道哪些頁面是空閒的或分配給客戶操作系統,因此,當客戶操作系統釋放客戶物理內存時,它無法回收主機物理內存。

因此,VMware虛擬機管理程序依賴於內存回收技術來回收客戶機操作系統釋放的主機物理內存。這些是內存回收技術:

  • 透明頁面共享(TPS)
  • 內存膨脹
  • 主機級(或虛擬機管理程序)交換

如何做呢

您不需要執行任何操作來啟用,因為默認情況下在ESXi虛擬機管理程序上啟用它。

內存膨脹由VMware Tools軟件驅動,因此您需要在所有VM上安裝它。它將加載vmmemctl驅動程序,該驅動程序負責內存膨脹。

如果未安裝VMware Tools或已過期,請執行以下步驟:

  1. 登錄VMware vSphere Web Client。
  2. 在VM清單中,右鍵單擊VM,選擇Guest OS,然後單擊Install VMware Tools或Upgrade VMware Tools。
  3. 轉到VM控制檯並按照屏幕上的說明安裝或升級它。

同樣,默認情況下啟用主機級或管理程序交換。您無需執行任何其他步驟即可啟用它。

TPS

當在同一個Hypervisor上運行多個VM時,大多數情況下,其中一些虛擬機可能具有相同的內存內容集(稱為內存頁)。這為跨VM共享內存創造了機會。ESXi Hypervisor可以回收冗餘副本,並且只使用TPS保留一個副本。您可以將其視為內存重複數據刪除

傳統上,在x86系統中,內存被分成4千字節的頁面,只有在使用帶有影子頁面表的小頁面時才會發生這種情況。TPS過程每60分鐘運行一次。它掃描所有內存頁面併為每個內存頁面計算哈希值。這些哈希值保存在單獨的表中,並由內核進行相互比較。每次ESXi內核找到兩個相同的哈希值時,它都會開始逐位比較相應的內存頁面。如果這些頁面完全相同,則內核只在內存中留下一個頁面副本,並刪除第二個頁面。當您的一個VM請求寫入此頁面時,內核會創建一個新頁面,因為一個VM所做的更改不得影響另一個VM的內存內容。

VMware ESXi通過Mem.ShareScanTime以隨機指定的基本掃描速率隨機掃描客戶機物理頁面。還可以在ESXi的高級設置中指定主機中每秒掃描的最大頁數和每個VM掃描頁面的最大數(即Mem.ShareScanGHz和Mem.ShareRateMax)。

Memory ballooning

Memory ballooning告訴客戶機操作系統它沒有足夠的主機內存,以便客戶機操作系統可以釋放一些內存。當存在內存危機時,管理程序會告知balloon驅動程序從客戶操作系統請求一定數量的兆字節。管理程序知道balloon驅動程序佔用的頁面永遠不會存儲數據,因此balloon驅動程序請求的pRAM頁面可以安全地重新分配給其他VM。客戶操作系統的調用決定了它應該分配給balloon驅動程序的哪些vRAM頁面。如果它有足夠的空閒客戶物理內存,則不會引起客戶級分頁,因此不會影響客戶端性能,除非客戶內存爭用。

Balloon驅動程序使用Idle Memory TaxIMT)回收客戶操作系統的已分配內存。IMT可以回收高達75%的空閒內存。客戶操作系統頁面文件是必需的,以防止客戶操作系統內核不足。vmmemctl由於嚴重的主機爭用,驅動程序應積極回收內存(確保客戶機操作系統頁面文件至少為配置的vRAM的65%)。即使在這裡,客戶操作系統也可以對未來最不可能請求哪些頁面的數據進行智能猜測。(您將看到這與管理程序級交換相反,後面將對此進行討論。)請查看以下內存頁映射到主機內存的圖示:

虛擬內存回收

在TPS和Ballooning期間,ESXi中的主機級交換不足以回收內存。為了支持這一點,當您啟動VM時,虛擬機管理程序會為VM創建單獨的交換文件。這主要是因為如果它為其他VM釋放pRAM,管理程序可以直接用交換文件交換vRAM。

交換是一種保證在特定時間內回收特定內存量的技術。但是,您應該關注主機級別的交換,因為它會嚴重影響客戶端性能。當管理程序不知道應交換哪些客戶機物理頁面時,會發生這種情況,並且交換可能會導致與客戶機操作系統中的本機內存管理策略發生意外交互。以下是主機級內存頁面交換的圖形表示:

虛擬內存回收


分享到:


相關文章: