再議Hyper-V 動态記憶體管理和記憶體過量使用
記憶體過量和動态記憶體都是在追求虛拟機密度最大化
我們知道,在一個虛拟化的伺服器環境中,缺乏足夠的實體記憶體,将會直接影響到虛拟機的設計密度,而設計時我們會将遷移所用的實體記憶體技術器精确到MB,當然這肯定還會影響到整個系統的投資回報率,記憶體成了虛拟化的短闆。而後,我發現vSphere開始提供記憶體過量使用技術,這項技術可以讓VMware虛拟機使用超過實體主機實際的記憶體容量,而虛拟機的位置又可以根據業務時段的不同,在不同的父分區下蹭吃蹭喝。但慢慢的,我開始關注這項前所未有的虛拟特性,這是因為與之相比的機械磁盤速率實在低下,當使用過多的虛拟記憶體之時,虛拟機的性能直線下降,而這恰恰是我們在引入虛拟化之前盡量避免的一種錯誤設計。
還記得首次聽到“記憶體過量使用”這個術語時,有人大膽的提出了幾份觀點,但誰料想這些可能會引發今天挨闆磚的局面。“記憶體過量使用”這個術語讓人曾經讓不熟悉虛拟化的人們有一種誤解,“記憶體溢出”?因為過量使用似乎意味着過度利用資源。實際上,其想法是,即便沒有實體記憶體來支援為系統配置的資源,也可以建立通常需要一定數量記憶體的多個虛拟機。基本上,借助記憶體過量使用技術,配置設定給實體主機上多個虛拟機的記憶體數量可以超過主機上的實體記憶體數量,這允許實體主機上可以有更大的虛拟機密度。
動态記憶體(Dynamic Memory)是微軟Hyper-V R2 SP1讓人雞凍的新增功能,由于改進了虛拟記憶體配置設定的機制,這便同樣可以增加虛拟機和主機之間的比率,也就是虛拟機密度。但毋容置疑,缺少軟體廠商的支援政策,比如一些黑心的應用程式仍然會擴大其記憶體需求,捆綁硬體來銷售,這些都可能限制這一優勢的發揮。
一些唠叨和建議
非常贊同Brien Posey(MVP)說的:“Hyper-V 的記憶體管理是一種藝術!”
動态記憶體應該是一項創舉,但必須遵守微軟的Hyper-V最佳實踐指南,以避免虛拟機缺少記憶體管理的藝術。我在查閱了kb and lib資料并進行了有針對性的測試之後,希望以下幾點能對你的工作有些幫助:
當Hyper-V動态記憶體在一個虛拟機上被啟用以後,這個虛拟機能立刻斷定它需要多少記憶體。然後主機配置設定給虛拟機要求的數量,以及一些額外的容量來作為緩沖,如圖檔中的“記憶體緩沖區”。如果一個主機中有多個虛拟機在運作,主機會自動在所有虛拟機間平衡記憶體的配置設定,圖檔中的“記憶體權重”。
<a href="http://blog.51cto.com/attachment/201203/102043871.png" target="_blank"></a>
應該說,動态記憶體有時并非總是最佳選擇。有些虛拟機我們應該禁用動态記憶體,把這些資源基于哪些根據應用程式特性可真正獲益的虛拟機上啟用動态記憶體,這一點非常重要。除非你對于分析運作性能名額方面非常在行,正确配置設定這些值是異常困難的。可以示範軟體或使用負載測試工具去決定真實的記憶體需求,但是仍然有一些未知事件因為不是在生産環境,是以你需要長期摸索去使用動态記憶體容量規劃。
<a href="http://blog.51cto.com/attachment/201203/102111593.gif" target="_blank"></a>
還比如,有些SQL資料庫采用動态記憶體的這個行為加快了資料庫處理大量查詢資訊時的速度,并且在靜态配置設定的世界中是可行的。可是對于動态記憶體配置設定來說,過量使用和動态記憶體絕對都會遇到一個問題:前面提到的磁盤速度和記憶體速度的對比。這些程式在非峰值時間你可能會看到記憶體水準下降,但是記憶體減少很可能性很少。是以,一些調用大型SQL資料庫的程式,你可以使用Hyper-V動态記憶體的最大記憶體設定來限制虛拟機的記憶體。你也可以在SQL資料庫中限制記憶體的消耗,當然,最好的做法是改善程式調用機制,或者采用“應用程式級别”來控制它們,而非是動态記憶體技術。
本文轉自張琦51CTO部落格,原文連結:http://blog.51cto.com/zhangqi/803463,如需轉載請自行聯系原作者