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

應(yīng)該說,動態(tài)內(nèi)存有時并非總是最佳選擇。有些虛擬機(jī)我們應(yīng)該禁用動態(tài)內(nèi)存,把這些資源基于哪些根據(jù)應(yīng)用程序特性可真正獲益的虛擬機(jī)上啟用動態(tài)內(nèi)存,這一點(diǎn)非常重要。除非你對于分析運(yùn)行性能指標(biāo)方面非常在行,正確分配這些值是異常困難的。可以演示軟件或使用負(fù)載測試工具去決定真實(shí)的內(nèi)存需求,但是仍然有一些未知事件因?yàn)椴皇窃谏a(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主機(jī),當(dāng)它只需要512MB內(nèi)存的時候,卻被分配了2GB內(nèi)存,你就在浪費(fèi)寶貴的主機(jī)資源了。但如果這是一臺我在DELL訪談中(《如何開啟你的虛擬化之路》)提到的學(xué)籍管理服務(wù)器,因?yàn)橹皇侨脒x和離校時才達(dá)到高峰期,動態(tài)內(nèi)存絕對是最佳的設(shè)計(jì)選擇。
還比如,有些SQL數(shù)據(jù)庫采用動態(tài)內(nèi)存的這個行為加快了數(shù)據(jù)庫處理大量查詢信息時的速度,并且在靜態(tài)分配的世界中是可行的。可是對于動態(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è)置來限制虛擬機(jī)的內(nèi)存。你也可以在SQL數(shù)據(jù)庫中限制內(nèi)存的消耗,當(dāng)然,最好的做法是改善程序調(diào)用機(jī)制,或者采用“應(yīng)用程序級別”來控制它們,而非是動態(tài)內(nèi)存技術(shù)。
【編輯推薦】