




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、虛擬機內(nèi)存工作原理Windows環(huán)境內(nèi)存名詞釋義Windows內(nèi)存管理概述在現(xiàn)代計算機系統(tǒng)中,內(nèi)存是指CPU可以直接訪問的隨機存儲器。在硬件上,CPU通過一組地址線連接到內(nèi)存上,這組地址線稱為內(nèi)存總線。而在軟件上,CPU的許多指令允許用內(nèi)存單元地址作為指令的操作數(shù),實現(xiàn)直接操縱這些內(nèi)存單元。內(nèi)存地址,在Intel x86體系結(jié)構(gòu)中,內(nèi)存地址有三種類型:物理地址即內(nèi)存存儲器的索引,CPU操縱內(nèi)存芯片時,通過地址線管腳加上電信號來讀或?qū)懴鄳?yīng)的內(nèi)存單元。在Intel x86體系結(jié)構(gòu)上,物理地址是一個32位或36位的無符號整數(shù)。虛擬地址:在32位系統(tǒng)上,虛擬地址空間可以達到4GB大小,也就是說,整個空
2、間可以有232=4294967296個字節(jié)單元。Intel x86芯片內(nèi)有專門的電路負責(zé)把一個虛擬地址轉(zhuǎn)譯成物理地址。邏輯地址。邏輯地址包含兩部分:段和偏移。段指定了在整個地址空間中的一個基地址、段空間的大小、屬性。與尋址相關(guān)的是段的基址和大小。偏移部分指定了一個邏輯地址相對于段基址的偏移量。此偏移量不能超過段的邊界。因此,邏輯地址的實際地址是段基址加上偏移量。Intel x86芯片也有專門的電路把邏輯地址轉(zhuǎn)譯成一個虛擬地址或物理地址。把一個地址告訴CPU,讓它訪問相對應(yīng)的物理內(nèi)存單元,這一過程是操作系統(tǒng)和CPU相互協(xié)作來完成的。CPU最終需要的是一個物理地址,它必須把軟件指令中的地址轉(zhuǎn)譯成物
3、理地址,在轉(zhuǎn)譯過程中可能會涉及一些數(shù)據(jù)結(jié)構(gòu),甚至涉及I/O操作。從操作系統(tǒng)的角度來看,一方面,它需要有效地管理所有的物理內(nèi)存,使得當(dāng)一個進程需要內(nèi)存時,能夠分配足夠的內(nèi)存單元給這一進程;另一方面,正如上一章所講,進程代表一個相對獨立的任務(wù),它有一個邏輯上獨立的地址空間。不同進程的地址空間應(yīng)該是相互隔離的。實現(xiàn)每個進程都有自己的私有地址空間。當(dāng)系統(tǒng)中進程數(shù)量增加以后,所需內(nèi)存數(shù)量往往超過了總的物理內(nèi)存,在這種情況下,操作系統(tǒng)須合理地安排內(nèi)存的使用,使得內(nèi)存緊缺時,既不會波及系統(tǒng)本身的穩(wěn)定性,同時也不會嚴重影響系統(tǒng)的性能。當(dāng)發(fā)生這種情況時,一般的做法是把不緊急的進程中的數(shù)據(jù)或代碼先存放到硬盤(pa
4、gefile)中,從而把它們占用的物理內(nèi)存騰出來給緊急的進程使用,或者交給系統(tǒng)使用。當(dāng)內(nèi)存緊缺的狀況緩解時,系統(tǒng)再把硬盤(pagefile)中的進程數(shù)據(jù)或代碼裝回到已經(jīng)空閑下來的內(nèi)存單元中,從而使這些進程有機會繼續(xù)運行。這兩個過程稱為內(nèi)存換出和換入。幾乎所有的多進程操作系統(tǒng)都支持這種內(nèi)存管理。內(nèi)存基本單元總是字節(jié)Bytes。每個內(nèi)存地址指向一個字節(jié),地址值加1以后指向下一個字節(jié)。物理內(nèi)存的地址是固定的,故讓進程使用物理地址來訪問內(nèi)存將使得進程的動態(tài)分配難以有效實施,因為內(nèi)存單元與進程將通過物理地址緊密地聯(lián)系在一起了,從而內(nèi)存的回收和再分配將受限于特定的進程和物理地址。為打破這種關(guān)聯(lián)關(guān)系,思路是
5、讓進程使用虛擬地址,而虛擬地址和物理地址之間通過一個映射表來完成轉(zhuǎn)譯。1.1 pagefile:即windows安裝過程中創(chuàng)建的分頁文件,見下圖。注:Linux中Swap(交換分區(qū)),類似Windows的pagefile,當(dāng)物理內(nèi)存不足時,把一部分硬盤空間虛擬成內(nèi)存使用,解決物理內(nèi)存容量不足的情況。Android是基于Linux的操作系統(tǒng),故也可使用Swap分區(qū)來提升系統(tǒng)運行效率。VMware ESXi上創(chuàng)建的虛擬機會自動根據(jù)虛擬機的內(nèi)存大小創(chuàng)建一個同等大小的swap 文件,這個文件通常和虛擬機鏡像文件在同一個目錄,文件名:*.vswp。比如創(chuàng)建一個內(nèi)存為8GB的VM,*.vswap會自動創(chuàng)建
6、,且大小為8GB,保存在同1個 datastore中。1.2虛擬內(nèi)存:Windows可使用的內(nèi)存總稱,包括物理內(nèi)存和分頁文件。從win NT開始,普通的應(yīng)用程序已無法直接訪問物理內(nèi)存,只能訪問虛擬內(nèi)存,再由CPU將虛擬內(nèi)存地址轉(zhuǎn)換為物理內(nèi)存地址。所以運行軟件和游戲,訪問的都是虛擬內(nèi)存。(驅(qū)動程序應(yīng)能直接訪問物理內(nèi)存)應(yīng)用程序能使用一系列虛擬地址來訪問大于可用物理內(nèi)存的內(nèi)存緩沖區(qū)。當(dāng)物理內(nèi)存的供應(yīng)量變小時,內(nèi)存管理器會將物理內(nèi)存頁(通常4KB)保存到磁盤文件。數(shù)據(jù)或代碼頁會根據(jù)需要在物理內(nèi)存與磁盤之間移動。案例:pagefile的應(yīng)用(物理內(nèi)存16G,pagefile 16G)應(yīng)用程序內(nèi)存掃描啟
7、動物理內(nèi)存剩余量活躍/閑置PagefileA20GNOB8GYES8G7G/1G1GC6GYES2G5G/1G1GD4GYES2G+OS回收2GTotal應(yīng)用占用了32G,應(yīng)用程序X無法啟動。極限之后會出現(xiàn):藍屏或重啟。VMware虛擬機環(huán)境內(nèi)存利用技術(shù)1、透明頁共享TPS透明頁共享是虛擬化中的內(nèi)存管理技術(shù)之一,是指將1臺主機上的冗余內(nèi)存頁精簡為1個頁面,而其它頁面用指針代替,從而達到釋放內(nèi)存空間的目的。該技術(shù)的核心要點:相同類型操作系統(tǒng)中,相同服務(wù)或是進程所消耗的內(nèi)存,只保留1份。TPS不能用于內(nèi)存很大的頁面,因為通常情況下,只有小內(nèi)存頁才能完全相同。VMware的ESXi是按照4KB為單位
8、進行內(nèi)存切片的。內(nèi)存回收的速度取決于掃描的速度,在ESXi的高級設(shè)置中可以設(shè)置TPS掃描的速度和時間間隔。故最好將相同OS的VM配置在1臺ESXi主機上,以便更好的使用TPS節(jié)省內(nèi)存。案例:當(dāng)多個VM運行相同的Windows server 2008R2在同一個ESXi主機上時,就會有存儲完全相同的進程或服務(wù)的內(nèi)存頁面。虛擬機管理程序會在每個內(nèi)存頁面上分配哈希值,并一位一位的進行比較,一旦不同頁面的哈希值相匹配,就說明存在相同的內(nèi)存頁面。如果虛擬機管理程序確認了同一主機上的多個虛擬機有完全相同的內(nèi)存頁面,它會保留其中一份,而其它頁面用指針代替。這樣就釋放了很多內(nèi)存空間。另外,如果虛擬機上指針所代
9、表的信息發(fā)生變化,虛擬機管理程序就會向內(nèi)存信息寫入一個新的頁面,同時改變指針信息。2、氣球膨脹(Ballooning)依據(jù)VMware Tools在Guest OS中的氣球驅(qū)動(balloon driver)來回收內(nèi)存。當(dāng)需要從該虛擬機回收內(nèi)存時,氣球膨脹從Guest OS中請求內(nèi)存,分配給氣球驅(qū)動的內(nèi)存可被hypervisor安全的回收,Guest OS自行決定將哪些內(nèi)存swapping交換到硬盤上以保證分配給氣球驅(qū)動內(nèi)存。顯然需要安裝VMware Tools才能實現(xiàn)氣球回收內(nèi)存,通過這種方式回收內(nèi)存較慢,依賴于Guest OS內(nèi)存分配的速度。附件1: VM內(nèi)存調(diào)度機制-balloonVM內(nèi)
10、存調(diào)度機制-balloon在內(nèi)存沒有過量配置的情況下,內(nèi)存的調(diào)度機制完全不會啟動,就沒有內(nèi)存回收措施。因為主機總的物理內(nèi)存大于所有VM配置內(nèi)存的總額的情況下,每臺虛機想要多少內(nèi)存,都能得到滿足,所以不需要調(diào)度機制。以下研究的VMware的內(nèi)存調(diào)度機制,都是在內(nèi)存過量配置的情況下發(fā)生的。案例:發(fā)生在一個有智慧的水池(Host)中,水池有不少水(4GB物理內(nèi)存),里面還有2個水箱(配置了2臺VM),水箱有一定的容量(配置內(nèi)存是4GB),原本是空的(沒有開機)。1、充裕HOST memory保障VM memory使用的情況現(xiàn)在水箱1里面要養(yǎng)魚了,必須放點水進去以便魚可以存活(開機了)。最少需要1GB
11、內(nèi)存。于是水箱1(VM1)就向水池(Host)要水(物理內(nèi)存),水池里面有足夠的水,就滿足了水箱1的要求?,F(xiàn)在水箱1有1GB的活水,而水池里面只剩下3GB的水了。水箱1里面多丟了些魚(啟動新的應(yīng)用),原來1GB的水不夠用了,于是水箱1就繼續(xù)向水池要水,水池HOST里面還有足夠的水,就又滿足了水箱1的要求?,F(xiàn)在水箱1里面有3GB的水,而水池里面只剩下1GB的水了。解釋:要注意的是,此時VM1里面的應(yīng)用程序都是活動的(active),所以這些內(nèi)存都屬于活躍狀態(tài),叫做活動內(nèi)存(Active Memory)。2、VM閑置的memory不會主動歸還HOST經(jīng)過了一段時間以后,水箱1里面的魚被捕走了,現(xiàn)在
12、水箱1不需要那么多水也足夠養(yǎng)活剩下的魚了。但是水池并不知道水箱1的狀況。于是水箱1還是有那么多水。解釋:VM1的某些應(yīng)用結(jié)束后,釋放了部分內(nèi)存,但是這些內(nèi)存釋放動作是在VM的Guest OS層面釋放的,故Host并不知道有內(nèi)存被釋放了,這些內(nèi)存沒有歸還Host,仍然由VM1占有。VM1中就有一部分內(nèi)存屬于idle(空閑的)memory,另外一些正在使用的內(nèi)存就是active memory。當(dāng)然,就VM1自己的Guest OS看起來,有3GB空閑內(nèi)存(idle memory),1GB的活動內(nèi)存;而此時就Host看來,只看見有3GB內(nèi)存是分配給了VM1的。Host通過VMware Tools中的驅(qū)
13、動,每隔一定的時間(ESX4中默認是60秒)去掃描一下VM1的內(nèi)存使用狀態(tài),以了解活動內(nèi)存(active memory)的情況。3、Balloon或Swap內(nèi)存調(diào)度機制水箱2中養(yǎng)魚了(VM2開機),水箱2也開始從水池中抽水。但是水池HOST里面的水不能枯竭,因此水池有警戒水位,第一條警戒水位是6%,當(dāng)下降到第一警戒水位以下并仍然在不停下降時,就要開動調(diào)水機制從其他水箱反抽水。解釋:VM2開機時也需要1GB內(nèi)存,在啟動時,它也不斷向Host請求內(nèi)存。Host則將自己的內(nèi)存源源不斷地分配給VM2,直到下降到第一條警戒位6%。Host內(nèi)存有4種狀態(tài),分別是High, Soft, Hard和Low,它
14、們間的分界線分別是6%, 4%, 2%和1%??捎脙?nèi)存高于6%時,不會啟動Balloon或Swap機制。當(dāng)?shù)陀?%向4%逼近時,Balloon機制就啟動了。向哪個水箱抽水呢?誰的水最富裕就向誰抽。解釋:如何判斷呢?剛才我們說過,Host每隔一定時間就會掃描Guest OS的內(nèi)存使用狀況,此時,Host會計算(VM tools)每個VM的份額內(nèi)存比,對最小的那臺虛機啟動氣球驅(qū)動,氣球開始膨脹。于是,氣球開始膨脹,并將多余的水?dāng)D出水箱。解釋:Balloon驅(qū)動如同普通驅(qū)動那樣,不斷向Guest OS索取內(nèi)存,Guest OS盡自己可能滿足氣球驅(qū)動,并優(yōu)先將空閑部分的內(nèi)存分配給它,注意,此時可能出現(xiàn)
15、Guest OS自己的物理內(nèi)存不足,并引起Guest OS的paging(內(nèi)存分頁)機制,將一部分內(nèi)存page out(頁出)到自己的swap中。這個例子中,VM1還有很多空閑內(nèi)存,因此足夠讓主機回收并滿足VM2的需求。主機將比較氣球膨脹獲得的這部分內(nèi)存的地址,如果原先是分配給VM1獨享的,(也就是沒有TPS共享),那么就可以收回。主機將不停的通過氣球驅(qū)動收回內(nèi)存,收回的目標是保持至少6%的內(nèi)存。注意:此時內(nèi)存沒有出現(xiàn)爭用情況,因此shares仍然沒有起作用,但是Overcommitment是存在的,所以會有reclaim,會有ballooning。Ballooning回收內(nèi)存是比較慢的,通常
16、需要幾分鐘。如果主機可用內(nèi)存池的內(nèi)存減少速度大于氣球驅(qū)動返還主機的內(nèi)存,那么可用內(nèi)存會進一步下降,當(dāng)突破4%的第2警戒線時,進入到hard狀態(tài),主機就會啟用第2種回收機制swapping(交換),將VM1的一部分物理內(nèi)存交換到swap文件中,以加快回收內(nèi)存的速度。目的是將可用內(nèi)存保持在4%的警戒線以上。如果可用內(nèi)存繼續(xù)下降到2%以下,進入到low狀態(tài)的時候,ESX不僅會繼續(xù)加速Swapping,還會阻止其上所有VM的內(nèi)存請求?,F(xiàn)在,情況又發(fā)生了變化,水箱2中的魚越來越多了,它不停地向水池要水,而水池也通過氣球驅(qū)動,不停地將水箱1中的空閑內(nèi)存擠出來,直到水箱1和2的總需求量大于了水池能供給的水量。水池再也不能提供更多的水了,只能部分滿足2個水箱的要求了。不夠的部分怎么辦?用一些臟水(swap)來滿足。臟水雖然臟(swap內(nèi)存速度很慢,注意:硬盤訪問時間是以毫秒(ms,千分之一秒)計算,而內(nèi)存訪問時間以納秒(ns,十億分之一)計算,兩者相差100萬倍。),魚在臟水里面生存的很困難,但畢竟還是有水的,不至于因為沒有足夠的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水產(chǎn)干腌制過程中的顏色變化考核試卷
- 煉鐵產(chǎn)業(yè)鏈優(yōu)化與整合考核試卷
- 雙十一勝利密碼
- 內(nèi)蒙古鴻德文理學(xué)院《健康教育學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇省泰州市高港區(qū)許莊中學(xué)2025屆初三下學(xué)期開學(xué)暑假驗收考試生物試題含解析
- 內(nèi)蒙古自治區(qū)呼和浩特市四中學(xué)2024-2025學(xué)年初三下學(xué)期9月階段性檢測試題化學(xué)試題含解析
- 寧夏藝術(shù)職業(yè)學(xué)院《基因工程原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 四川省遂寧市重點中學(xué)2024-2025學(xué)年初三下學(xué)期第一次大練習(xí)(期末)生物試題含解析
- 焦作大學(xué)《醫(yī)學(xué)微生物學(xué)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西省澤州縣晉廟鋪鎮(zhèn)攔車初級中學(xué)校2025年初三第一次中考模擬統(tǒng)一考試(物理試題文)試題含解析
- 新高考:地理選科指導(dǎo)
- 各種變頻器的使用說明書.lg-ig53parameter list
- GB/T 19582.2-2008基于Modbus協(xié)議的工業(yè)自動化網(wǎng)絡(luò)規(guī)范第2部分:Modbus協(xié)議在串行鏈路上的實現(xiàn)指南
- GA/T 1799-2021保安安全檢查通用規(guī)范
- 細胞的能量“貨幣”ATP說課課件-高一上學(xué)期生物人教版必修1
- 解剖學(xué)課件神經(jīng)系統(tǒng)課件
- 《基于繪本閱讀的幼兒語言能力發(fā)展研究(論文)》9300字
- 印巴戰(zhàn)爭(修改稿)
- 工程項目管理實施方案(5篇)
- 2021年全國質(zhì)量獎現(xiàn)場匯報材料-基礎(chǔ)設(shè)施、設(shè)備及設(shè)施管理過程課件
- 防爆電氣失爆判別標準和常見失爆現(xiàn)象匯總
評論
0/150
提交評論