虛擬機內存工作原理VCP60_第1頁
虛擬機內存工作原理VCP60_第2頁
虛擬機內存工作原理VCP60_第3頁
虛擬機內存工作原理VCP60_第4頁
虛擬機內存工作原理VCP60_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、虛擬機內存工作原理Windows環境內存名詞釋義Windows內存管理概述在現代計算機系統中,內存是指CPU可以直接訪問的隨機存儲器。在硬件上,CPU通過一組地址線連接到內存上,這組地址線稱為內存總線。而在軟件上,CPU的許多指令允許用內存單元地址作為指令的操作數,實現直接操縱這些內存單元。內存地址,在Intel x86體系結構中,內存地址有三種類型:物理地址即內存存儲器的索引,CPU操縱內存芯片時,通過地址線管腳加上電信號來讀或寫相應的內存單元。在Intel x86體系結構上,物理地址是一個32位或36位的無符號整數。虛擬地址:在32位系統上,虛擬地址空間可以達到4GB大小,也就是說,整個空

2、間可以有232=4294967296個字節單元。Intel x86芯片內有專門的電路負責把一個虛擬地址轉譯成物理地址。邏輯地址。邏輯地址包含兩部分:段和偏移。段指定了在整個地址空間中的一個基地址、段空間的大小、屬性。與尋址相關的是段的基址和大小。偏移部分指定了一個邏輯地址相對于段基址的偏移量。此偏移量不能超過段的邊界。因此,邏輯地址的實際地址是段基址加上偏移量。Intel x86芯片也有專門的電路把邏輯地址轉譯成一個虛擬地址或物理地址。把一個地址告訴CPU,讓它訪問相對應的物理內存單元,這一過程是操作系統和CPU相互協作來完成的。CPU最終需要的是一個物理地址,它必須把軟件指令中的地址轉譯成物

3、理地址,在轉譯過程中可能會涉及一些數據結構,甚至涉及I/O操作。從操作系統的角度來看,一方面,它需要有效地管理所有的物理內存,使得當一個進程需要內存時,能夠分配足夠的內存單元給這一進程;另一方面,正如上一章所講,進程代表一個相對獨立的任務,它有一個邏輯上獨立的地址空間。不同進程的地址空間應該是相互隔離的。實現每個進程都有自己的私有地址空間。當系統中進程數量增加以后,所需內存數量往往超過了總的物理內存,在這種情況下,操作系統須合理地安排內存的使用,使得內存緊缺時,既不會波及系統本身的穩定性,同時也不會嚴重影響系統的性能。當發生這種情況時,一般的做法是把不緊急的進程中的數據或代碼先存放到硬盤(pa

4、gefile)中,從而把它們占用的物理內存騰出來給緊急的進程使用,或者交給系統使用。當內存緊缺的狀況緩解時,系統再把硬盤(pagefile)中的進程數據或代碼裝回到已經空閑下來的內存單元中,從而使這些進程有機會繼續運行。這兩個過程稱為內存換出和換入。幾乎所有的多進程操作系統都支持這種內存管理。內存基本單元總是字節Bytes。每個內存地址指向一個字節,地址值加1以后指向下一個字節。物理內存的地址是固定的,故讓進程使用物理地址來訪問內存將使得進程的動態分配難以有效實施,因為內存單元與進程將通過物理地址緊密地聯系在一起了,從而內存的回收和再分配將受限于特定的進程和物理地址。為打破這種關聯關系,思路是

5、讓進程使用虛擬地址,而虛擬地址和物理地址之間通過一個映射表來完成轉譯。1.1 pagefile:即windows安裝過程中創建的分頁文件,見下圖。注:Linux中Swap(交換分區),類似Windows的pagefile,當物理內存不足時,把一部分硬盤空間虛擬成內存使用,解決物理內存容量不足的情況。Android是基于Linux的操作系統,故也可使用Swap分區來提升系統運行效率。VMware ESXi上創建的虛擬機會自動根據虛擬機的內存大小創建一個同等大小的swap 文件,這個文件通常和虛擬機鏡像文件在同一個目錄,文件名:*.vswp。比如創建一個內存為8GB的VM,*.vswap會自動創建

6、,且大小為8GB,保存在同1個 datastore中。1.2虛擬內存:Windows可使用的內存總稱,包括物理內存和分頁文件。從win NT開始,普通的應用程序已無法直接訪問物理內存,只能訪問虛擬內存,再由CPU將虛擬內存地址轉換為物理內存地址。所以運行軟件和游戲,訪問的都是虛擬內存。(驅動程序應能直接訪問物理內存)應用程序能使用一系列虛擬地址來訪問大于可用物理內存的內存緩沖區。當物理內存的供應量變小時,內存管理器會將物理內存頁(通常4KB)保存到磁盤文件。數據或代碼頁會根據需要在物理內存與磁盤之間移動。案例:pagefile的應用(物理內存16G,pagefile 16G)應用程序內存掃描啟

7、動物理內存剩余量活躍/閑置PagefileA20GNOB8GYES8G7G/1G1GC6GYES2G5G/1G1GD4GYES2G+OS回收2GTotal應用占用了32G,應用程序X無法啟動。極限之后會出現:藍屏或重啟。VMware虛擬機環境內存利用技術1、透明頁共享TPS透明頁共享是虛擬化中的內存管理技術之一,是指將1臺主機上的冗余內存頁精簡為1個頁面,而其它頁面用指針代替,從而達到釋放內存空間的目的。該技術的核心要點:相同類型操作系統中,相同服務或是進程所消耗的內存,只保留1份。TPS不能用于內存很大的頁面,因為通常情況下,只有小內存頁才能完全相同。VMware的ESXi是按照4KB為單位

8、進行內存切片的。內存回收的速度取決于掃描的速度,在ESXi的高級設置中可以設置TPS掃描的速度和時間間隔。故最好將相同OS的VM配置在1臺ESXi主機上,以便更好的使用TPS節省內存。案例:當多個VM運行相同的Windows server 2008R2在同一個ESXi主機上時,就會有存儲完全相同的進程或服務的內存頁面。虛擬機管理程序會在每個內存頁面上分配哈希值,并一位一位的進行比較,一旦不同頁面的哈希值相匹配,就說明存在相同的內存頁面。如果虛擬機管理程序確認了同一主機上的多個虛擬機有完全相同的內存頁面,它會保留其中一份,而其它頁面用指針代替。這樣就釋放了很多內存空間。另外,如果虛擬機上指針所代

9、表的信息發生變化,虛擬機管理程序就會向內存信息寫入一個新的頁面,同時改變指針信息。2、氣球膨脹(Ballooning)依據VMware Tools在Guest OS中的氣球驅動(balloon driver)來回收內存。當需要從該虛擬機回收內存時,氣球膨脹從Guest OS中請求內存,分配給氣球驅動的內存可被hypervisor安全的回收,Guest OS自行決定將哪些內存swapping交換到硬盤上以保證分配給氣球驅動內存。顯然需要安裝VMware Tools才能實現氣球回收內存,通過這種方式回收內存較慢,依賴于Guest OS內存分配的速度。附件1: VM內存調度機制-balloonVM內

10、存調度機制-balloon在內存沒有過量配置的情況下,內存的調度機制完全不會啟動,就沒有內存回收措施。因為主機總的物理內存大于所有VM配置內存的總額的情況下,每臺虛機想要多少內存,都能得到滿足,所以不需要調度機制。以下研究的VMware的內存調度機制,都是在內存過量配置的情況下發生的。案例:發生在一個有智慧的水池(Host)中,水池有不少水(4GB物理內存),里面還有2個水箱(配置了2臺VM),水箱有一定的容量(配置內存是4GB),原本是空的(沒有開機)。1、充裕HOST memory保障VM memory使用的情況現在水箱1里面要養魚了,必須放點水進去以便魚可以存活(開機了)。最少需要1GB

11、內存。于是水箱1(VM1)就向水池(Host)要水(物理內存),水池里面有足夠的水,就滿足了水箱1的要求。現在水箱1有1GB的活水,而水池里面只剩下3GB的水了。水箱1里面多丟了些魚(啟動新的應用),原來1GB的水不夠用了,于是水箱1就繼續向水池要水,水池HOST里面還有足夠的水,就又滿足了水箱1的要求。現在水箱1里面有3GB的水,而水池里面只剩下1GB的水了。解釋:要注意的是,此時VM1里面的應用程序都是活動的(active),所以這些內存都屬于活躍狀態,叫做活動內存(Active Memory)。2、VM閑置的memory不會主動歸還HOST經過了一段時間以后,水箱1里面的魚被捕走了,現在

12、水箱1不需要那么多水也足夠養活剩下的魚了。但是水池并不知道水箱1的狀況。于是水箱1還是有那么多水。解釋:VM1的某些應用結束后,釋放了部分內存,但是這些內存釋放動作是在VM的Guest OS層面釋放的,故Host并不知道有內存被釋放了,這些內存沒有歸還Host,仍然由VM1占有。VM1中就有一部分內存屬于idle(空閑的)memory,另外一些正在使用的內存就是active memory。當然,就VM1自己的Guest OS看起來,有3GB空閑內存(idle memory),1GB的活動內存;而此時就Host看來,只看見有3GB內存是分配給了VM1的。Host通過VMware Tools中的驅

13、動,每隔一定的時間(ESX4中默認是60秒)去掃描一下VM1的內存使用狀態,以了解活動內存(active memory)的情況。3、Balloon或Swap內存調度機制水箱2中養魚了(VM2開機),水箱2也開始從水池中抽水。但是水池HOST里面的水不能枯竭,因此水池有警戒水位,第一條警戒水位是6%,當下降到第一警戒水位以下并仍然在不停下降時,就要開動調水機制從其他水箱反抽水。解釋:VM2開機時也需要1GB內存,在啟動時,它也不斷向Host請求內存。Host則將自己的內存源源不斷地分配給VM2,直到下降到第一條警戒位6%。Host內存有4種狀態,分別是High, Soft, Hard和Low,它

14、們間的分界線分別是6%, 4%, 2%和1%。可用內存高于6%時,不會啟動Balloon或Swap機制。當低于6%向4%逼近時,Balloon機制就啟動了。向哪個水箱抽水呢?誰的水最富裕就向誰抽。解釋:如何判斷呢?剛才我們說過,Host每隔一定時間就會掃描Guest OS的內存使用狀況,此時,Host會計算(VM tools)每個VM的份額內存比,對最小的那臺虛機啟動氣球驅動,氣球開始膨脹。于是,氣球開始膨脹,并將多余的水擠出水箱。解釋:Balloon驅動如同普通驅動那樣,不斷向Guest OS索取內存,Guest OS盡自己可能滿足氣球驅動,并優先將空閑部分的內存分配給它,注意,此時可能出現

15、Guest OS自己的物理內存不足,并引起Guest OS的paging(內存分頁)機制,將一部分內存page out(頁出)到自己的swap中。這個例子中,VM1還有很多空閑內存,因此足夠讓主機回收并滿足VM2的需求。主機將比較氣球膨脹獲得的這部分內存的地址,如果原先是分配給VM1獨享的,(也就是沒有TPS共享),那么就可以收回。主機將不停的通過氣球驅動收回內存,收回的目標是保持至少6%的內存。注意:此時內存沒有出現爭用情況,因此shares仍然沒有起作用,但是Overcommitment是存在的,所以會有reclaim,會有ballooning。Ballooning回收內存是比較慢的,通常

16、需要幾分鐘。如果主機可用內存池的內存減少速度大于氣球驅動返還主機的內存,那么可用內存會進一步下降,當突破4%的第2警戒線時,進入到hard狀態,主機就會啟用第2種回收機制swapping(交換),將VM1的一部分物理內存交換到swap文件中,以加快回收內存的速度。目的是將可用內存保持在4%的警戒線以上。如果可用內存繼續下降到2%以下,進入到low狀態的時候,ESX不僅會繼續加速Swapping,還會阻止其上所有VM的內存請求。現在,情況又發生了變化,水箱2中的魚越來越多了,它不停地向水池要水,而水池也通過氣球驅動,不停地將水箱1中的空閑內存擠出來,直到水箱1和2的總需求量大于了水池能供給的水量。水池再也不能提供更多的水了,只能部分滿足2個水箱的要求了。不夠的部分怎么辦?用一些臟水(swap)來滿足。臟水雖然臟(swap內存速度很慢,注意:硬盤訪問時間是以毫秒(ms,千分之一秒)計算,而內存訪問時間以納秒(ns,十億分之一)計算,兩者相差100萬倍。),魚在臟水里面生存的很困難,但畢竟還是有水的,不至于因為沒有足夠的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論