再議Hyper-V 動態(tài)內(nèi)存管理和內(nèi)存過量使用
實際操作中,慢慢成長起來的經(jīng)驗將會成為一份可遇而不可求的金玉。幾年前,堅信虛擬化將會讓我們的IT運維變得隨心所欲,到現(xiàn)在我反而發(fā)現(xiàn)了這項全新業(yè)務(wù)的管理讓我們常常犯下新的錯誤。因為家庭中的一些瑣事,我退出了MVP連任申請(雖然已經(jīng)連續(xù)3+1年享受這一榮耀),但我發(fā)現(xiàn)這和老方所來信中提供得那樣:“這并不意味著離開,我隨時會回來”。很早以前寫過一篇《用一份PPT開始你的Hyper-v虛擬化之旅》,我想還是應(yīng)該延續(xù)接下來的討論。
內(nèi)存過量和動態(tài)內(nèi)存都是在追求虛擬機密度最大化
我們知道,在一個虛擬化的服務(wù)器環(huán)境中,缺乏足夠的物理內(nèi)存,將會直接影響到虛擬機的設(shè)計密度,而設(shè)計時我們會將遷移所用的物理內(nèi)存技術(shù)器精確到MB,當然這肯定還會影響到整個系統(tǒng)的投資回報率,內(nèi)存成了虛擬化的短板。而后,我發(fā)現(xiàn)vSphere開始提供內(nèi)存過量使用技術(shù),這項技術(shù)可以讓VMware虛擬機使用超過物理主機實際的內(nèi)存容量,而虛擬機的位置又可以根據(jù)業(yè)務(wù)時段的不同,在不同的父分區(qū)下蹭吃蹭喝。但慢慢的,我開始關(guān)注這項前所未有的虛擬特性,這是因為與之相比的機械磁盤速率實在低下,當使用過多的虛擬內(nèi)存之時,虛擬機的性能直線下降,而這恰恰是我們在引入虛擬化之前盡量避免的一種錯誤設(shè)計。
還記得首次聽到“內(nèi)存過量使用”這個術(shù)語時,有人大膽的提出了幾份觀點,但誰料想這些可能會引發(fā)今天挨板磚的局面。“內(nèi)存過量使用”這個術(shù)語讓人曾經(jīng)讓不熟悉虛擬化的人們有一種誤解,“內(nèi)存溢出”?因為過量使用似乎意味著過度利用資源。實際上,其想法是,即便沒有物理內(nèi)存來支持為系統(tǒng)配置的資源,也可以創(chuàng)建通常需要一定數(shù)量內(nèi)存的多個虛擬機。基本上,借助內(nèi)存過量使用技術(shù),分配給物理主機上多個虛擬機的內(nèi)存數(shù)量可以超過主機上的物理內(nèi)存數(shù)量,這允許物理主機上可以有更大的虛擬機密度。
動態(tài)內(nèi)存(Dynamic Memory)是微軟Hyper-V R2 SP1讓人雞凍的新增功能,由于改進了虛擬內(nèi)存分配的機制,這便同樣可以增加虛擬機和主機之間的比率,也就是虛擬機密度。但毋容置疑,缺少軟件廠商的支持策略,比如一些黑心的應(yīng)用程序仍然會擴大其內(nèi)存需求,捆綁硬件來銷售,這些都可能限制這一優(yōu)勢的發(fā)揮。
一些嘮叨和建議
非常贊同Brien Posey(MVP)說的:“Hyper-V 的內(nèi)存管理是一種藝術(shù)!”
動態(tài)內(nèi)存應(yīng)該是一項創(chuàng)舉,但必須遵守微軟的Hyper-V最佳實踐指南,以避免虛擬機缺少內(nèi)存管理的藝術(shù)。我在查閱了kb and lib資料并進行了有針對性的測試之后,希望以下幾點能對你的工作有些幫助:
當Hyper-V動態(tài)內(nèi)存在一個虛擬機上被啟用以后,這個虛擬機能立刻斷定它需要多少內(nèi)存。然后主機分配給虛擬機要求的數(shù)量,以及一些額外的容量來作為緩沖,如圖片中的“內(nèi)存緩沖區(qū)”。如果一個主機中有多個虛擬機在運行,主機會自動在所有虛擬機間平衡內(nèi)存的分配,圖片中的“內(nèi)存權(quán)重”。

應(yīng)該說,動態(tài)內(nèi)存有時并非總是最佳選擇。有些虛擬機我們應(yīng)該禁用動態(tài)內(nèi)存,把這些資源基于哪些根據(jù)應(yīng)用程序特性可真正獲益的虛擬機上啟用動態(tài)內(nèi)存,這一點非常重要。除非你對于分析運行性能指標方面非常在行,正確分配這些值是異常困難的??梢匝菔拒浖蚴褂秘撦d測試工具去決定真實的內(nèi)存需求,但是仍然有一些未知事件因為不是在生產(chǎn)環(huán)境,所以你需要長期摸索去使用動態(tài)內(nèi)存容量規(guī)劃。
例如,如果配置windows server 2008 TS 網(wǎng)關(guān)采用的NAP 方案 ,TS Server和NPS可能在夜里需要非常多的內(nèi)存,這是相反的業(yè)務(wù)峰值時間(回家加班的人還是很多,唉),內(nèi)存需求快速下降。

還比如,對于一個虛擬的DNS或者AD主機,當它只需要512MB內(nèi)存的時候,卻被分配了2GB內(nèi)存,你就在浪費寶貴的主機資源了。但如果這是一臺我在DELL訪談中(《如何開啟你的虛擬化之路》)提到的學(xué)籍管理服務(wù)器,因為只是入選和離校時才達到高峰期,動態(tài)內(nèi)存絕對是最佳的設(shè)計選擇。
還比如,有些SQL數(shù)據(jù)庫采用動態(tài)內(nèi)存的這個行為加快了數(shù)據(jù)庫處理大量查詢信息時的速度,并且在靜態(tài)分配的世界中是可行的??墒菍τ趧討B(tài)內(nèi)存分配來說,過量使用和動態(tài)內(nèi)存絕對都會遇到一個問題:前面提到的磁盤速度和內(nèi)存速度的對比。這些程序在非峰值時間你可能會看到內(nèi)存水平下降,但是內(nèi)存減少很可能性很少。因此,一些調(diào)用大型SQL數(shù)據(jù)庫的程序,你可以使用Hyper-V動態(tài)內(nèi)存的最大內(nèi)存設(shè)置來限制虛擬機的內(nèi)存。你也可以在SQL數(shù)據(jù)庫中限制內(nèi)存的消耗,當然,最好的做法是改善程序調(diào)用機制,或者采用“應(yīng)用程序級別”來控制它們,而非是動態(tài)內(nèi)存技術(shù)。
【編輯推薦】