淺析VMware虛擬化平臺內存管理

虛擬化平臺三種內存模式
a.主機物理內存(Host Physical Memory)
主機物理內存是ESXi在一個物理主機上檢測到的內存值,該值是主機實際物理安裝的內存值。例如,一臺X86服務器配置16根32GB內存,則該主機的物理內存爲512GB。
b.虛擬機物理內存(Guest Physical Memory)
登陸虛擬機操做系統能夠看到分配給虛擬機的內存,例如建立虛擬機的時候分配4GB內存,則操做系統能識別到4GB內存,這就是虛擬機物理內存
c.虛擬機虛擬內存(Guest Virtual Memory)
是指虛擬機操做系統分配給應用程序的可用內存,這是虛擬機操做系統映射到虛擬機物理內存的虛擬內存地址空間,是虛擬機操做系統提供給他的應用程序使用的內存地址空間,在非虛擬化環境中也是如此。
2,內存三種模式的工做方式
下圖顯示了三層內存的相互映射方式,虛擬機虛擬內存映射到虛擬機物理內存,虛擬機物理內存被虛擬機管理器(hypervisor)映射到ESXi主機物理內存。
淺析VMware虛擬化平臺內存管理
舉例說明:若是你有一個虛擬機,在虛擬機裏面開啓一個微信應用程序,微信若是想要運行就會向虛擬機索要內存,虛擬機會提供內存給微信應用使用,這個時候內存的流向是Guest virtual memory 向 guest physical memory申請內存。此時,虛擬機管理器會收到guest physical memory向Host physical memory申請內存,申請完成後微信應用程序才能正常運行。總結一下就是一個ESXi主機爲其上運行的每一個虛擬機建立一個虛擬內存地址空間,這些虛擬內存地址空間向下映射到主機內存地址,向上映射到虛擬機做爲虛擬機的物理內存。當微信使用完後,虛擬機會將這部份內存標記爲「free」,此時其餘應用程序可使用這部份內存,可是虛擬機管理器不會關心這些被標記爲「free」的內存,而且認爲這些內存一直分配給了虛擬機。也就是說,一旦管理程序將內存分配給一個虛擬機,它沒辦法分辨分配給虛擬機的內存是被虛擬機操做系統分配給了應用程序仍是已經被釋放。因此當虛擬機的操做系統釋放虛擬機物理內存時,管理程序不能從虛擬機回收主機物理內存。下圖表示了這種屬性。
淺析VMware虛擬化平臺內存管理
有人會問若是這樣的話,虛擬機會不會一直請求內存,可是一直不釋放,形成物理內存佔滿的狀況。實際上是不會出現這種情況的,當一個虛擬機分配的虛擬機物理內存已被徹底佔用時,管理程序不會再向虛擬機分配更多的物理主機內存,即便內存限制設置爲無限制。
3.虛擬機的內存回收
內存分配容易回收難,由於內存回收的時候,管理程序必須必須保留足夠的物理主機內存來支持虛擬機物理內存分配和虛擬機運行的內存開銷。可是在平常工做中咱們常常會遇到ESXi主機內存過量分配的狀況,ESXi經過使用透明頁共享(Transparent Page Sharing)、內存膨脹(Ballooning)、管理程序內存交換(hypervisor swapping)及內存壓縮(memory compression)等機制保證能使內存過量分配。
a.透明頁共享
當ESXi主機運行多個虛擬機時,這些虛擬機可能已加載相同的應用程序或組件,或者包含公用數據。使用透明頁共享技術能夠消除內存頁的冗餘副本,只保留一份,其他的內存能夠從新分配給其它虛擬機。
b.內存膨脹
如上所述,當虛擬機的客戶操做系統釋放內存時,ESXi不能簡單地回收主機物理內存頁,虛擬機操做系統也不知道ESXi主機內存的真實使用率。當ESXi主機內存處於壓力狀態時,主機能夠經過內存膨脹機制來回收虛擬機的物理內存頁,觸發內存膨脹的驅動程序在安裝vmware tools的時候已經安裝在操做系統中,驅動程序的名稱爲vmmemctl。
淺析VMware虛擬化平臺內存管理
虛擬機操做系統內存膨脹
當主機的物理內存處於壓力狀態,主機須要從虛擬機中回收物理內存時,管理程序會給vmmemctl設置一個須達到的目標值,vmmemctl收到目標值後,虛擬機首先將被標記爲「free」的內存「填充氣球」,若是這些被標記爲「free」的內存不能知足的狀況下,可能觸發內存交換的狀況,以達到須要回收目標值。最理想的狀態是,在不進行內存交換的狀況下就能知足目標值,這樣就不會影響虛擬機的性能。爲了不在進行內存交換的時候有能夠交換的磁盤可用,因此在虛擬機進行配置時,要有足夠的交換空間。固然也能夠設置限制可以使用內存膨脹回收的內存量,甚至能夠禁用內存膨脹,可是通常狀況下不建議這樣作,由於內存膨脹是在保障虛擬機操做系統性能的狀況下作出的選擇,要比其餘方式溫柔的多,因此不建議禁用內存膨脹。
c.內存壓縮
內存壓縮就是指那些須要交換到磁盤的內存頁不進行磁盤交換而是進行壓縮,這種時候就是上面內存膨脹須要回收內存時,若是「free」內存不能知足回收的目標值,虛擬機會將不會內存交換到磁盤,在交換到磁盤以前管理程序會判斷是進行壓縮對虛擬機性能影響小,仍是進行交換對虛擬機性能影響小。並非全部的內存都適合壓縮,若是一個內存頁壓縮比在50%以上,ESXi主機將會壓縮這些內存。若是內存頁壓縮比在50%如下,則會經過管理程序將內存交換到磁盤。
d.管理程序內存交換
當ESXi主機使用透明頁共享、內存膨脹、內存壓縮等機制都不能回收內存時,纔會使用管理程序內存交換。在進行內存交換時,管理程序不會判斷虛擬機裏面哪些內存適合交換,也就是說它不會判斷頁面對於虛擬機的重要程度,因此會隨機選擇內存頁面進行交換,這就會對虛擬機形成不可預知的影響,內存交換到磁盤審覈,也會嚴重影響虛擬機的性能。在ESXi5.5以上版本中能夠設置SSD緩存交換,以較少對性能的影響。
4.使用什麼機制進行回收?
根據ESXi主機實際可用內存量的不一樣,ESXi有4種內存狀態,分別是High、Soft、Hard以及Low,具體定義閥值以下表:
淺析VMware虛擬化平臺內存管理
可使用esxtop命令查看當前處於哪一種狀態。
淺析VMware虛擬化平臺內存管理
主機內存處於不一樣的狀態,會觸發相應的內存機制進行內存回收,具體以下表:
淺析VMware虛擬化平臺內存管理
5.怎麼知道內存是否存在性能問題?
查看內存的使用狀況有不少種,你能夠經過vSphere網頁客戶端進行查看,能夠經過使用VMware vRealize Operations Manager,也能夠經過esxtop命令進行查看。這裏簡單介紹下經過esxtop命令進行分析。
SSH登陸到ESXi主機,而後輸入esxtop命令,輸入m進入內存頁面,默認5s中更新一次,可使用s來更改更新間隔(輸入s會看到Seconds to delay: 輸入你想要的刷新頻率,單位爲秒,而後回車確認),可使用f選擇要查看的字段,具體詳細命令能夠參考官方手冊,這裏只介紹幾個比較重要的參數及判斷標準。
下圖是一個輸出截圖
淺析VMware虛擬化平臺內存管理
PMEM/MB
顯示服務器的計算機內存統計信息
VMKMEM/MB
顯示ESXi VMkernel的計算內存統計信息。這裏面要重點注意主機的內存狀態。當狀態爲Soft的時候說明要關注內存狀況,說明主機已經存在內存壓力。
PSHARE/MB
顯示ESXi頁共享信息
SWAP/MB
顯示ESXi交換使用量統計信息
r/s 由ESXi系統從磁盤換入內存的速率,若是該值大於0,主機物理內存量過量,主機嘗試回收內存,而且僅僅經過內存膨脹這一機制沒法知足
w/s 由ESXi系統將內存交換到磁盤的速率,若是該值大於0,可能主機物理內存已嚴重不足
ZIP/MB
顯示ESXi內存壓縮統計信息
MEMCTL/MB
curr,使用vmmemctl模塊回收的物理內存總量
target,ESXi主機嘗試使用vmmemctl模塊回收的物理內存總量
max,ESXi主機可使用vmmemctl模塊回收的最大物理內存量
若是該值比0大,或者主機內存過量,或者虛擬機已設置了一個比當前配置內存小的內存限制時,主機開始從虛擬機回收內存。
SWCUR 該資源或虛擬機當前使用的交換量
SWTGT ESXi主機預期資源池或虛擬機交換使用量的目標
SWR/s 同SWAP/MB裏面的r/s
SWW/s 同SWAP/MB裏面的w/s
SWCUR
表示當前使用內存交換交換到磁盤的內存量,若是該值大於0,主機物理內存吃緊,主機嘗試回收內存而且僅僅經過內存膨脹一沒法知足
CACHEUSD
當前內存壓縮所使用的壓縮高速緩存量,該值大於0表示主機正在進行內存壓縮,主機內存不足
ZIP/s
主機內存壓縮率,若是該值大於0,說明主機正在進行內存壓縮
UNZIP/s
若是該值大於0,那麼被壓縮的內存正在被主機或者虛擬機訪問,此時虛擬機性能將收到影響。轉載至——明辰智航雲安網絡與虛擬化性能管理系統

































































html

相關文章
相關標籤/搜索