Hyper-V動態內存與VMware內存過量使用的對比
動態內存(Dynamic memory)是微軟應對虛擬化中常見問題所做的努力:如何有效地分配內存給不是一直需要它的虛擬機。
內存一直是人們最先耗盡的關鍵資源。結果是,缺少內存會是固結率低的起源。壓力還來自于某些應用所有人,他們為應用索要盡可能多的內存,即使是沒有必要分配他們需要的內存量。
在理想世界中,用戶能分配大量內存并在需要使用這些內存時按需使用它們。有時候Hyper-V的情況并不如此:如果在虛擬機啟動時給它分配4GB內存,不管它需不需要,它占有這4GB的內存,在VM關閉之前它不會把內存返還給Hyper-V。這不可避免地會導致固結率低于微軟的競爭者,這也讓它很難以有效的方式分配內存。
隨著Hyper-V R2 SP1的發布,微軟添加了動態內存支持,這和它主要的競爭產品VMware ESX中利用的內存過量使用(memory over-commitment)非常不一樣。微軟長時間聲稱,虛擬機承擔的內存超過物理量很危險,因為所有這些虛擬機也許同時需要分配。不管這是否是真實情況,我們一般在其它IT領域使用超額認購(over-subscription),如存儲,微軟的立場在微軟社區得到應用。
動態內存本質上平衡了來賓操作系統的管理系統功能來達成其目的。它主要依賴于大部分現代服務器和操作系統的容量來實現實時的內存添加和移除。動態內存背負該功能,允許Hyper-V在虛擬機運行時在其上添加或移除內存。一旦服務器啟動,Hyper-V顯示一池免費內存。虛擬機都是從這個池中分配內存。如果Hyper-V主機本身需要更多內存,也可以用恰好相同的方式增加。動態內存和內存過量使用不同,因為Hyper-V會拒絕保證超過池中可用的物理內存。通過從來賓操作系統中平衡熱添加和熱移除功能來保證內存從虛擬機返回到系統。讓我們來看看動態內存評價該方法功績的要求。
首先,Hyper-V和現有的Windows虛擬機必須有應用其上的SP1。新版的Windows 7和Windows 2008 R2可能已經安裝好了服務包。
另外,Hyper-V可以在每虛擬機的基礎上完成,所有虛擬機都默認地與靜態內存模式一致。
圖1:VM內存分配
虛擬機都分配到啟動量的內存用于啟動程序。由于動態內存有賴于負載在來賓操作系統上的服務和驅動,需要一次只用于啟動程序(圖1)的內存分配。這是個自相矛盾的問題,在OS啟動前沒有動態內在,但是啟動OS又需要內存。大部分人建議,用戶分配大量啟動內在來滿足啟動OS和用于它們正常運作的應用程序,留下動態內在來處理“爆發”需求。微軟官方的說法是,用戶只需分配足夠的啟動內存來滿足OS的需求。
虛擬機必須設置最大的內存量,這為虛擬機可以從池中獲得的內存量設了限制。最大的這個值可能是64GB。
最后,用戶可以配置一個“內存緩沖區”,這是基于虛擬機承擔量的額外分配。這個緩沖區是用來抵消所有由動態內存自身分配和向下分配程序引起的所有過量。所以實際的內存分配是承擔內存加上這個內存緩沖。
這個緩沖默認是20%,所以如果一個虛擬機限額是16GB,且使用4GB的內存,那么要分配大概820MB(4GB的20%或總共4.8GB)。隨著虛擬機內的內存需求增長,緩沖適當增長,直到到達配置最大量。如果從內存角度Hyper-V主機變得飽和,可以犧牲該緩沖,而主機可以首先為承擔的內存需求服務。緩沖用作一般的緩存來提高性能,即使動態內存并沒有施壓要完成該工作。
有人會說,這個緩沖只不過是為了動態內存的執行添加了20%的內存,而其他人則認為該功能提供了附加的管理能力,所以額外的內存也是值得的。記住,動態內在只在某些受支持的來賓系統上工作。它們在完全由管理程序控制的內存管理解決方案中有一些優勢,因為它們為運行在大部分企業數據中心的一般范圍的操作系統提供更好的兼容性。
如果配置內存的IT管理員不能正確地監控或管理它們,就有性能降低的可能。重要的事情是理解該模式的好處,并采取正確的行為來監控它們,用專用的警示來引導管理員采取步驟在他們生根之前避免問題。
【編輯推薦】