亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法

文檔序號:6372118閱讀:284來源:國知局
專利名稱:基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法
技術(shù)領(lǐng)域
本發(fā)明主要涉及的領(lǐng)域是虛擬化系統(tǒng)軟件技術(shù)領(lǐng)域,特別是多虛擬機(jī)平臺的內(nèi)存資源按需分配和管理的方法。
背景技術(shù)
虛擬化技術(shù)是云計算的核心技術(shù)之一,通過虛擬化,能夠靈活的將一臺計算機(jī)的資源按照需求劃分成為多臺虛擬機(jī),并提供給多個不同的用戶同時使用,從而有效提高了硬件資源的利用率,降低了使用成本。因此,該技術(shù)通常也稱為“硬件資源整合”。硬件資源整合的關(guān)鍵在于資源的按需分配,即物理機(jī)上的每臺虛擬機(jī)能夠按照自己對資源的需求量,合理地獲得相應(yīng)部分硬件資源的使用權(quán)。在虛擬化平臺中,取代傳統(tǒng)操作系統(tǒng)特權(quán)級的虛擬機(jī)監(jiān)視器(Virtual MachineMonitor,以下簡稱為VMM)為虛擬機(jī)分配物理硬件資源,并且保證這些資源在VMM的保護(hù) 下,虛擬機(jī)能夠?qū)ζ溥M(jìn)行分時、分區(qū)域的有序訪問,并且VMM之上還運(yùn)行著一個處于特權(quán)級別用于管理整個虛擬化平臺的虛擬機(jī),被稱為虛擬化平臺的系統(tǒng)管理層Host。目前,CPU和I/O資源的按需分配已經(jīng)獲得了很好的效果。因?yàn)镃PU和I/O都是分時使用的資源,所以虛擬機(jī)只需在VMM的合理調(diào)度下分時地使用CPU或者I/O資源,便可達(dá)到按需分配的目的。但是,內(nèi)存資源是分區(qū)域使用的,傳統(tǒng)的VMM設(shè)計者認(rèn)為同一塊內(nèi)存區(qū)域只能分配給一臺虛擬機(jī),從而使內(nèi)存的按需分配面臨很大的困難。為了解決內(nèi)存資源按需分配的問題,業(yè)界提出了“內(nèi)存過量提交”(MemoryOvercommit)的思路。即一臺物理機(jī)上運(yùn)行的虛擬機(jī)的內(nèi)存值之和,大于這臺物理機(jī)的實(shí)際物理內(nèi)存。在這種情況下,虛擬機(jī)的部分內(nèi)存不能直接訪問,VMM需要根據(jù)虛擬機(jī)對內(nèi)存的需求,主動或者被動地采用一些機(jī)制,為這些虛擬機(jī)分配和回收物理內(nèi)存,實(shí)現(xiàn)內(nèi)存的按需分配。學(xué)術(shù)界和工業(yè)界已經(jīng)對內(nèi)存資源的過量提交進(jìn)行了深入的研究和開發(fā),成功的采用若干種不同的方法,在一定程度上實(shí)現(xiàn)了內(nèi)存資源的按需分配。具體包括內(nèi)存頁共享、內(nèi)存熱插拔和氣球驅(qū)動等技術(shù),下面分別介紹三個方面的代表性工作Diwaker Gupta,Sangmin LeeiMichael Vrable,Stefan SavageiAlex C. Snoeren,George Varghese,Geoffrey M. Voelker, and Amin Vahdat !Difference Engine Harnessing Memory Redundancy in Virtual Machines. Proceedings of the 8thSymposium on Operating Systems Design and Implementation. Usenix 2008.該論文提出了利用內(nèi)存頁共享技術(shù)來實(shí)現(xiàn)內(nèi)存的過量提交。內(nèi)存頁共享機(jī)制是指多臺虛擬機(jī)中內(nèi)容相同的虛擬內(nèi)存頁可以同時使用同一物理內(nèi)存頁,從而節(jié)省了物理內(nèi)存,并可以使節(jié)省下來的物理內(nèi)存被其它的虛擬機(jī)使用。但是,頁共享技術(shù)的實(shí)現(xiàn)效率比較低,給虛擬機(jī)的性能造成了較大的影響,而且,頁共享通常僅當(dāng)多個虛擬機(jī)具有大量相同內(nèi)存數(shù)據(jù)的情況下(如多個虛擬機(jī)使用同一版本的操作系統(tǒng))才能夠取得較好的效果。反之,如果同一臺物理機(jī)上的多個虛擬機(jī)具有各不相同的程序和數(shù)據(jù),頁共享技術(shù)將幾乎失效。
Joel H. Schopp, Keir Fraser,Martine J. Silbermann-Resizing Memory WithBalloons and Hotplug,Proceedings of the Linux Symposium,2006該論文提出了內(nèi)存熱插拔技術(shù)。內(nèi)存熱插拔本是一項(xiàng)在傳統(tǒng)操作系統(tǒng)中使用的,能夠在不停機(jī)的狀況下改變物理內(nèi)存大小的機(jī)制,其原意是指通過內(nèi)存硬件的動態(tài)插入和拔出來改變可用內(nèi)存,并使操作系統(tǒng)能夠及時感知到內(nèi)存的變換。在虛擬化平臺下,VMM可以通過硬件模擬的方式來做到虛擬機(jī)內(nèi)存熱插拔。內(nèi)存熱插拔的缺點(diǎn)是顯而易見的。首先,熱插拔對內(nèi)存操作的粒度比較大,通常最小的操作單位為128MB,不能滿足更細(xì)的粒度要求;而且,該技術(shù)需要虛擬機(jī)操作系統(tǒng)的內(nèi)核支持,而現(xiàn)有的很多操作系統(tǒng)還不能支持;另外,熱拔出比熱插入需要更長的時間,因?yàn)闊岚纬鲂枰獙?zhǔn)備拔出的內(nèi)存上的數(shù)據(jù)移到其他的內(nèi)存區(qū)域上,這個過程比較費(fèi)時,而且可能會給系統(tǒng)帶來性能上的損失和潛在的業(yè)務(wù)風(fēng)險。Carl A. Waldspurger Memory Resource Management in VMware ESXServer. Proceedings of the 5th Symposium on Operating Systems Design andImplementation. Usenix 2002. 該論文提出了基于“氣球驅(qū)動”的內(nèi)存過量提交機(jī)制?!皻馇蝌?qū)動”是安裝在虛擬機(jī)操作系統(tǒng)中的驅(qū)動程序,能夠和VMM通信,并且能夠按照預(yù)先的設(shè)定,對虛擬機(jī)的物理內(nèi)存進(jìn)行動態(tài)調(diào)整。其主要手段是“氣球驅(qū)動”向虛擬機(jī)操作系統(tǒng)申請并占據(jù)一定量的內(nèi)存,而通過與VMM之間的通道,將這部分內(nèi)存交給VMM使用,從而使VMM原本分配給某個虛擬機(jī)的內(nèi)存被“氣球驅(qū)動”所回收,并能夠用于其他虛擬機(jī)。被“氣球驅(qū)動”所占據(jù)的這部分內(nèi)存,由于能夠按需伸縮,被形象地稱為“氣球”。如果虛擬機(jī)實(shí)際內(nèi)存大于目標(biāo)值,“氣球驅(qū)動”向VMM請求以減少內(nèi)存,VMM響應(yīng)該請求,從該虛擬機(jī)中收回多余的實(shí)際內(nèi)存,同時增大“氣球”的體積。同樣地,如果虛擬機(jī)實(shí)際內(nèi)存值小于設(shè)定的目標(biāo)值,“氣球驅(qū)動”向VMM請求以獲得更多的內(nèi)存,VMM響應(yīng)該請求,并且分配給該虛擬機(jī)更多的物理內(nèi)存,同時縮小“氣球”的體積。實(shí)踐證明,氣球驅(qū)動在大部分的應(yīng)用場合中會收到很好的效果,特別是在合理的調(diào)度程序的控制下,能夠有效地整合物理主機(jī)的內(nèi)存資源。因此,目前主流的虛擬化平臺如VMWare、XEN等等都已經(jīng)針對該技術(shù)開發(fā)出了成熟的實(shí)現(xiàn),并已大量應(yīng)用。但是,在某些特定的場合中,氣球驅(qū)動可能會嚴(yán)重降低系統(tǒng)性能。例如,當(dāng)虛擬機(jī)在短時間內(nèi)對內(nèi)存的需求量大量增加的時候,如果調(diào)度程序沒有及時通過氣球驅(qū)動縮小“氣球”來增大虛擬機(jī)內(nèi)存,虛擬機(jī)操作系統(tǒng)將會因?yàn)榭捎脙?nèi)存不足,觸發(fā)換頁機(jī)制,將內(nèi)存頁換出到外部存儲設(shè)備中。因而降低了虛擬機(jī)的性能,同時,頁面的換出對虛擬機(jī)的I/o造成了很高的負(fù)荷。虛擬機(jī)操作系統(tǒng)觸發(fā)其換頁機(jī)制,是因?yàn)椴僮飨到y(tǒng)認(rèn)為可用內(nèi)存不足,而可用內(nèi)存實(shí)際上被氣球驅(qū)動所占據(jù),隨時有可能回收,但操作系統(tǒng)無法掌握這一情況。

發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問題是克服現(xiàn)有技術(shù)的不足,提供一種基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,該方法能夠有效解決在虛擬機(jī)內(nèi)存需求量激增時,觸發(fā)虛擬機(jī)換頁機(jī)制,造成的性能嚴(yán)重下降問題。本發(fā)明的技術(shù)解決方案是基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,虛擬機(jī)監(jiān)視器VMM為虛擬機(jī)分配物理硬件資源,步驟如下(I)假設(shè)虛擬機(jī)的內(nèi)存總量為T,在虛擬機(jī)操作系統(tǒng)中加載一個內(nèi)核驅(qū)動模塊,稱之為內(nèi)存空洞驅(qū)動;(2)內(nèi)存空洞驅(qū)動按照氣球驅(qū)動的工作方式,申請并占據(jù)大小為R的可用內(nèi)存空間,并使VMM回收這部分內(nèi)存,以重復(fù)利用;所述的R < T ;(3)依據(jù)設(shè)定的空洞大小值H,內(nèi)存空洞驅(qū)動在步驟(2)中占據(jù)的可用內(nèi)存空間內(nèi)為虛擬機(jī)分配大小為H的內(nèi)存空洞區(qū)域,即H < R,該內(nèi)存空洞為沒有建立客戶機(jī)虛擬地址到客戶機(jī)物理地址映射的內(nèi)存空間,并且為虛擬機(jī)可見的可用內(nèi)存的一部分;(4)虛擬機(jī)在運(yùn)行的過程中,當(dāng)發(fā)生內(nèi)存訪問操作時,根據(jù)訪問的內(nèi)存所屬的區(qū)域不同,按照以下兩種情況處理
(4. I)所訪問的內(nèi)存是已經(jīng)分配給虛擬機(jī)的內(nèi)存,則直接訪問;(4. 2)所訪問的內(nèi)存不是VMM實(shí)際分配給虛擬機(jī)的內(nèi)存,則根據(jù)這些區(qū)域是否屬于步驟(3)中的內(nèi)存空洞區(qū)域,按照以下兩種情況處理(4. 2. I)若屬于內(nèi)存空洞區(qū)域,VMM立刻為該訪問內(nèi)存分配物理內(nèi)存頁,并且建立從虛擬機(jī)內(nèi)存頁到物理內(nèi)存頁的映射,使訪問內(nèi)存的操作能夠正常進(jìn)行;(4. 2. 2)若不屬于內(nèi)存空洞區(qū)域,說明發(fā)生了其他訪問錯誤,并且該錯誤不是由內(nèi)存空洞機(jī)制造成的,由VMM處理該錯誤。所述步驟(3)中的設(shè)定的空洞大小值H取值范圍為[1/3R-2/3R]。為了維護(hù)內(nèi)存動態(tài)平衡,在Host上設(shè)置一個監(jiān)視進(jìn)程,監(jiān)視進(jìn)程工作流程如下第一步,監(jiān)視進(jìn)程每秒獲取每臺虛擬機(jī)內(nèi)存空洞的大小和剩余可用內(nèi)存的大小,根據(jù)獲取信息進(jìn)行如下判斷當(dāng)某臺虛擬機(jī)的內(nèi)存空洞的大小低于預(yù)設(shè)的閾值K時,該監(jiān)控進(jìn)程會將該虛擬機(jī)內(nèi)存空洞大小的設(shè)定增加大小為Q的內(nèi)存空洞區(qū)域;Q的大小設(shè)定為成/8,K設(shè)定為HV4 ;當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S低于系統(tǒng)預(yù)先設(shè)定的閾值SlOT,即S < Slow,或者物理主機(jī)總體對內(nèi)存的需求量增加,需要對其中某臺虛擬機(jī)縮小空洞時,監(jiān)控進(jìn)程會對每個或者某個虛擬機(jī)的內(nèi)存空洞進(jìn)行部分的撤銷操作,即對每臺虛擬機(jī)執(zhí)行撤銷大小為D的內(nèi)存空洞;SlOT大小的范圍為所有虛擬機(jī)分配的啟動內(nèi)存T之和的[1/4-1/6],每次撤銷的內(nèi)存空洞大小D為成/8 ;當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S高于系統(tǒng)預(yù)先設(shè)定的閾值Shigh,即S > Shigh,或者物理主機(jī)總體對內(nèi)存的需求量減少,需要對其中每臺虛擬機(jī)增大空洞時,空洞監(jiān)控進(jìn)程會對每個或者某臺虛擬機(jī)的部分可用內(nèi)存進(jìn)行空洞的建立操作,即對每臺虛擬機(jī)執(zhí)行增加大小為D的內(nèi)存空洞;Shigh大小的范圍為所有虛擬機(jī)分配的啟動內(nèi)存T之和的[1/2-2/3],每次增加的內(nèi)存空洞大小D為Hc/8 ;上述H。為初始設(shè)定的空洞大小值,取值范圍為[1/3R-2/3R];第二步,統(tǒng)計每臺虛擬機(jī)需要增加或者撤銷的內(nèi)存空洞大小,向VMM依次提交相應(yīng)內(nèi)存空洞變化請求;VMM在每臺虛擬機(jī)剩余內(nèi)存基礎(chǔ)上根據(jù)該請求設(shè)定空洞大小值H,內(nèi)存空洞驅(qū)動從步驟(3)開始執(zhí)行。本發(fā)明與現(xiàn)有技術(shù)相比有益效果為(I)當(dāng)使用虛擬化平臺將一臺物理計算機(jī)劃分為多個虛擬機(jī),并通過氣球驅(qū)動技術(shù)實(shí)現(xiàn)多個虛擬機(jī)之間內(nèi)存資源的按需分配機(jī)制的時候。本發(fā)明能夠在氣球驅(qū)動的基礎(chǔ)上,為虛擬機(jī)分配“內(nèi)存空洞”區(qū)域。當(dāng)虛擬機(jī)真正通過訪存指令訪問這些區(qū)域時候,才由VMM為其分配物理內(nèi)存,同時,虛擬機(jī)操作系統(tǒng)不會感知內(nèi)存空洞的存在,因此不需要修改虛擬機(jī)操作系統(tǒng)的內(nèi)核來配合,增強(qiáng)了平臺的兼容性;也不會在氣球驅(qū)動占據(jù)過多內(nèi)存的情況下,提前觸發(fā)換頁機(jī)制。(2)在虛擬機(jī)對內(nèi)存的需求量激增的時候,本發(fā)明能夠避免氣球驅(qū)動帶來的虛擬機(jī)性能下降的問題,減少內(nèi)存頁面的換出,降低I/o負(fù)載量,從而有效解決了在虛擬機(jī)內(nèi)存需求量激增時,性能嚴(yán)重下降的問題。(3)本發(fā)明通過在Host中設(shè)置監(jiān)視進(jìn)程對所有虛擬機(jī)內(nèi)存空洞大小和可用剩余內(nèi)存大小進(jìn)行實(shí)時監(jiān)視,對于某臺虛擬機(jī)的內(nèi)存空洞大小低于預(yù)設(shè)的閾值,當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和高于系統(tǒng)預(yù)先設(shè)定的閾值和當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和低于系統(tǒng)預(yù)先設(shè)定的閾值三種情況的出現(xiàn),按照內(nèi)存調(diào)度策略,分別對該臺或者所有的虛擬機(jī)內(nèi)存空洞的大小做出調(diào)整。


圖I為本發(fā)明安裝了內(nèi)存空洞驅(qū)動的虛擬機(jī)的內(nèi)存空間分布示意圖;圖2為本發(fā)明虛擬客戶機(jī)訪存時通過XEN建立空洞和填補(bǔ)空洞的流程圖;圖3為本發(fā)明內(nèi)存信息監(jiān)視進(jìn)程對內(nèi)存空洞調(diào)整的流程圖。
具體實(shí)施例方式基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,如圖2所示,步驟如下(I)假設(shè)虛擬機(jī)的內(nèi)存總量為T,在虛擬機(jī)操作系統(tǒng)中加載一個內(nèi)核驅(qū)動模塊,稱之為內(nèi)存空洞驅(qū)動。其功能是調(diào)節(jié)本虛擬機(jī)的內(nèi)存值,和設(shè)置內(nèi)存空洞區(qū)域的大小,具體實(shí)現(xiàn)參照下述相應(yīng)步驟進(jìn)行。(2)內(nèi)存空洞驅(qū)動按照氣球驅(qū)動的工作方式,申請并占據(jù)大小為R的內(nèi)存空間,并使VMM回收這部分內(nèi)存,以重復(fù)利用。這時,虛擬機(jī)操作系統(tǒng)可見的可用內(nèi)存和實(shí)際可用內(nèi)存大小都是(T-R) ;R< T ;通常R的大小和T有關(guān),一種可行的方式將R設(shè)為T/2左右;(3)依據(jù)設(shè)定的空洞大小值,內(nèi)存空洞驅(qū)動為虛擬機(jī)分配大小為H的內(nèi)存空洞(H<R),這時,虛擬機(jī)可見的可用內(nèi)存大小為(T-R+H),而實(shí)際分配的物理內(nèi)存為(T-R),H的取值范圍為[1/3R-2/3R],一種通常的做法是設(shè)定H的大小為R/2左右;本發(fā)明將“氣球”中這部分對虛擬機(jī)可見的內(nèi)存區(qū)域稱為“內(nèi)存空洞”(Memory Hole),如圖I所示。(4)虛擬機(jī)啟動后,在運(yùn)行的過程中,當(dāng)發(fā)生內(nèi)存訪問操作時,根據(jù)訪問的內(nèi)存所屬的區(qū)域不同,按照以下兩種情況處理a)所訪問的內(nèi)存是已經(jīng)分配給虛擬機(jī)的內(nèi)存頁,可以直接訪問,而不會產(chǎn)生虛擬機(jī)運(yùn)行狀態(tài)的改變;b)所訪問的內(nèi)存不是VMM實(shí)際分配給虛擬機(jī)的內(nèi)存,則根據(jù)這些區(qū)域是否屬于內(nèi)存空洞部分,又可以按照以下兩種情況處理i.該區(qū)域是內(nèi)存空洞區(qū)域,VMM立刻為空洞區(qū)域分配物理內(nèi)存頁,并且建立從虛擬機(jī)內(nèi)存頁到物理內(nèi)存頁的映射,從而實(shí)現(xiàn)對空洞區(qū)域的“填補(bǔ)”,使訪問內(nèi)存的操作能夠正常進(jìn)行;ii.該區(qū)域不是內(nèi)存空洞區(qū)域,說明發(fā)生了其他訪存錯誤,并且該訪存錯誤不是由內(nèi)存空洞機(jī)制造成的,VMM將采取其他現(xiàn)有的方法處理錯誤,例如銷毀虛擬機(jī)等。按照步驟(4)的虛擬機(jī)訪存處理方法,由于初始狀態(tài)下分配的內(nèi)存空洞區(qū)域被不斷“填補(bǔ)”,會導(dǎo)致虛擬機(jī)所擁有的內(nèi)存空洞大小隨時間的增加而不斷減少,從而使內(nèi)存空洞的作用逐漸削弱。因此,為了維護(hù)系統(tǒng)內(nèi)存的動態(tài)平衡,本發(fā)明在Host上設(shè)計了一個監(jiān)視進(jìn)程,該監(jiān)視進(jìn)程工作流程如下第一步,每秒獲取每臺虛擬機(jī)內(nèi)存空洞的大小和剩余可用內(nèi)存的大小,根據(jù)獲取信息按照以下三種情況處理a)某臺虛擬機(jī)的內(nèi)存空洞總量減少,并且低于一個閾值K,則對這臺虛擬機(jī)執(zhí)行增加空洞的操作,即將虛擬機(jī)的可用內(nèi)存區(qū)域再次通過內(nèi)存空洞驅(qū)動歸還給VMM,并將這些 區(qū)域的再次標(biāo)記為空洞區(qū)域。具體操作監(jiān)控進(jìn)程將該虛擬機(jī)內(nèi)存空洞大小的設(shè)定增加大小為Q的內(nèi)存空洞區(qū)域;Q的大小設(shè)定為HciZU K設(shè)定為HV4 ;b)當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S低于系統(tǒng)預(yù)先設(shè)定的閾值SlOT,即S < Slow,或者物理主機(jī)(物理計算機(jī))總體對內(nèi)存的需求量增加,則對其中每臺虛擬機(jī)縮小空洞時,監(jiān)控進(jìn)程會對每個或者某臺虛擬機(jī)的內(nèi)存空洞進(jìn)行部分的撤銷操作,即對每臺虛擬機(jī)執(zhí)行撤銷大小為D的內(nèi)存空洞;SlOT大小的選定范圍為所有虛擬機(jī)分配的啟動內(nèi)存T之和的[1/4-1/6],每次撤銷的內(nèi)存空洞大小D為成/8 ;c)當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S高于系統(tǒng)預(yù)先設(shè)定的閾值Shigh,即S > Shigh,或者物理主機(jī)總體對內(nèi)存的需求量減少,對其中每臺虛擬機(jī)增大空洞時,監(jiān)控進(jìn)程會對每臺或者某臺虛擬機(jī)的部分可用內(nèi)存進(jìn)行空洞的建立操作,即對每臺虛擬機(jī)執(zhí)行增加大小為D的內(nèi)存空洞;Shigh大小的選定范圍為所有虛擬機(jī)分配的啟動內(nèi)存T之和的[1/2-2/3],每次增加的內(nèi)存空洞大小D為HV8 ;上述Htl為初始設(shè)定的空洞大小值,取值[1/3R-2/3R];第二步,統(tǒng)計每臺虛擬機(jī)需要增加或者撤銷的內(nèi)存空洞大小,向VMM依次提交相應(yīng)內(nèi)存空洞變化請求;VMM在每臺虛擬機(jī)剩余內(nèi)存基礎(chǔ)上根據(jù)該請求設(shè)定空洞大小值H,內(nèi)存空洞驅(qū)動從步驟(3)開始執(zhí)行。實(shí)施例下面的VMM以業(yè)界流行的開源虛擬化平臺XEN為例,說明實(shí)現(xiàn)本發(fā)明為例對本發(fā)明做進(jìn)一步詳細(xì)的說明。XEN支持Linux和Windows作為虛擬機(jī)的操作系統(tǒng),其用于系統(tǒng)管理的特權(quán)虛擬機(jī)被稱為DomO。物理計算機(jī)的CPU采用了具有虛擬化支持的Intel Virtual Machineextensions (VMX)技術(shù)和 Extend Page Table (EPT)技術(shù)的 Intel Xeon CPU。在XEN虛擬化平臺中,有三種不同的內(nèi)存地址空間,分別是從XEN或者虛擬機(jī)的不同視角看到的地址空間范圍(I)客戶機(jī)虛擬地址GVA(Guest Virtual Address):虛擬機(jī)中每個進(jìn)程中的線性地址;(2)客戶機(jī)物理地址GPA(Guest Physical Address):虛擬機(jī)操作系統(tǒng)所見的物理地址,又稱為偽物理地址;
(3)宿主機(jī)物理地址HPA (Host Physical Address) :VMM內(nèi)核空間的地址,也就是真實(shí)的物理地址。XEN使用Intel CPU的EPT技術(shù),通過兩次地址轉(zhuǎn)換來支持地址空間的虛擬化,即客戶機(jī)虛擬地址GVA —客戶機(jī)物理地址GPA —宿主機(jī)物理地址HPA的轉(zhuǎn)換。其中GVA — GPA的轉(zhuǎn)換(所建立的映射稱為L2P映射)是由客戶操作系統(tǒng)決定,通常是虛擬機(jī)中操作系統(tǒng)通過頁表來指定的;GPA — HPA的轉(zhuǎn)換(所建立的映射稱為P2M映射)是由XEN決定的,XEN在將物理內(nèi)存分配給客戶機(jī)時就確定了 GPA — HPA的轉(zhuǎn)換,XEN用內(nèi)部的數(shù)據(jù)結(jié)構(gòu)記錄映身寸關(guān)系。對于氣球驅(qū)動所占據(jù)的內(nèi)存空間,虛擬機(jī)已經(jīng)為其建立了 L2P映射,操作系統(tǒng)認(rèn)為這塊內(nèi)存被占用了。而本發(fā)明與氣球驅(qū)動的不同在于本發(fā)明提出了基于內(nèi)存空洞的內(nèi)存分配方法,并不為空洞區(qū)域建立L2P映射,因而操作系統(tǒng)認(rèn)為這部分的內(nèi)存是可用內(nèi)存。當(dāng)虛擬機(jī)將要使用這部分內(nèi)存之前,操作系統(tǒng)要為其建立了相應(yīng)的L2P映射關(guān)系,所以在虛擬機(jī)真正通過訪存指令訪問這部分內(nèi)存的時候,XEN需要為其建立相應(yīng)的P2M映射關(guān)系。 同時,為了給XEN虛擬化環(huán)境增加建立和撤銷內(nèi)存空洞的功能,本發(fā)明進(jìn)行了如下的改進(jìn)。本發(fā)明在XEN中為內(nèi)存空洞的建立和撤銷增加了相應(yīng)的服務(wù)例程,并且在此基礎(chǔ)上增加面向虛擬機(jī)請求的調(diào)用接口,因此能夠響應(yīng)來自虛擬機(jī)內(nèi)存空洞驅(qū)動的調(diào)用。XEN通過Copy-On-Write (以下簡稱C0W)機(jī)制,即將多臺虛擬機(jī)的多個虛擬物理頁面映射到了同一個機(jī)器物理頁面上,并將該頁面標(biāo)為只讀,如果有某臺虛擬機(jī)對已共享的頁面進(jìn)行寫操作,XEN會在虛擬機(jī)操作系統(tǒng)無感知的情況下,給該頁面分配一塊新的物理頁面,并且建立相應(yīng)的映射關(guān)系。內(nèi)存空洞的建立和撤銷也基于COW機(jī)制實(shí)現(xiàn),在內(nèi)存空洞驅(qū)動啟動的時候,會得到預(yù)先分配的內(nèi)存頁面,用于和空洞的偽物理地址進(jìn)行共享操作,該頁面被稱為源頁面。在建立空洞時,將虛擬機(jī)請求傳遞的偽物理地址所對應(yīng)的頁面和預(yù)先分配的源頁面進(jìn)行共享;而在撤銷空洞的時候,為已共享的頁面分配一個物理頁面并取消共享,保證虛擬機(jī)的內(nèi)存訪問指令能夠正確執(zhí)行。在系統(tǒng)運(yùn)行的過程中,由于監(jiān)視各個虛擬機(jī)剩余可用內(nèi)存和內(nèi)存空洞大小,監(jiān)視進(jìn)程會不斷地向XEN提交關(guān)于某臺虛擬機(jī)建立空洞和撤銷空洞的請求,XEN需要對這些請求做出如下響應(yīng)(I)建立空洞虛擬機(jī)發(fā)出建立空洞的請求,請求將內(nèi)存的氣球所占據(jù)的空間轉(zhuǎn)化為內(nèi)存空洞所占據(jù)的空間,并通過虛擬機(jī)傳入頁面的偽物理地址,按照如下的步驟完成該類型的請求a)首先對頁面的偽物理地址進(jìn)行檢查,判斷是否屬于該虛擬機(jī)的氣球所占據(jù)的內(nèi)存頁,如果發(fā)現(xiàn)有某個頁面不是氣球驅(qū)動所占據(jù),則中止請求服務(wù),返回錯誤代碼;b)如果a)檢查成功,對每一個頁面調(diào)用COW例程,將預(yù)分配給該虛擬機(jī)的源頁面和該頁面進(jìn)行共享,并向虛擬機(jī)返回成功的結(jié)果;c)虛擬機(jī)根據(jù)建立空洞請求的結(jié)果進(jìn)行操作如果出現(xiàn)錯誤,進(jìn)一步判斷錯誤的原因,并且進(jìn)行錯誤的恢復(fù);如果成功,在虛擬機(jī)中為這部分內(nèi)存撤銷相應(yīng)的L2P映射關(guān)系,形成空洞區(qū)域,操作系統(tǒng)將其加入可用內(nèi)存中。(2)撤銷空洞在運(yùn)行過程中,如果某個虛擬機(jī)的某條指令訪問到了空洞區(qū)域,Intel的VMX和EPT技術(shù)會確保CPU的控制權(quán)轉(zhuǎn)入XEN中,VMM采取以下的步驟為虛擬機(jī)撤銷空洞,并將該內(nèi)存頁恢復(fù)為可用狀態(tài)a)檢測虛擬機(jī)訪問的內(nèi)存是否處于空洞區(qū)域,如果不是,則不再進(jìn)行下一步的處理,轉(zhuǎn)向XEN現(xiàn)有的訪存處理方法;b)如果訪問的內(nèi)存處于空洞區(qū)域中,XEN從空閑內(nèi)存中取出一個內(nèi)存頁,并為其機(jī)器物理地址和偽物理地址建立相應(yīng)的映射關(guān)系;考慮到虛擬機(jī)訪問空洞區(qū)域造成的CPU運(yùn)行狀態(tài)的改變會帶來較大的開銷,為了減少開銷,遵循程序執(zhí)行的局部性原理,本發(fā)明會將該物理地址的相鄰的后面M個內(nèi)存頁也撤銷空洞,建立相應(yīng)的內(nèi)存映射關(guān)系。其中M是在XEN編譯時可配置的值;c)撤銷空洞區(qū)域成功后,將CPU恢復(fù)到虛擬機(jī)運(yùn)行狀態(tài)改變之前的訪存指令上,繼續(xù)運(yùn)行。
同時,本發(fā)明還設(shè)立一個監(jiān)控進(jìn)程,以監(jiān)視每臺虛擬機(jī)的內(nèi)存信息,包括空洞大小的變化,可用空閑內(nèi)存的變化。每隔一秒鐘,該進(jìn)程從內(nèi)存空洞驅(qū)動中獲得這些信息。并且通過上述的內(nèi)存空洞管理接口,調(diào)整每臺虛擬機(jī)內(nèi)存空洞的大小。在監(jiān)視的過程中,虛擬機(jī)內(nèi)存的變化會出現(xiàn)以下的幾種情況(I)因?yàn)椴粩嗟匾驗(yàn)樘摂M機(jī)的訪存指令的執(zhí)行而撤銷內(nèi)存空洞,虛擬機(jī)的空洞大小總量會持續(xù)減少,當(dāng)某個虛擬機(jī)的內(nèi)存空洞的大小低于預(yù)設(shè)的閾值K時,該監(jiān)控進(jìn)程會將該虛擬機(jī)內(nèi)存空洞增加大小為Q的區(qū)域。這里的Q的大小設(shè)定為凡/8,K設(shè)定為HV4 ;(2)從總體內(nèi)存占用情況來看,每臺虛擬機(jī)的可用內(nèi)存之和為S,根據(jù)應(yīng)用程序?qū)?nèi)存的需求量的變化和虛擬機(jī)的運(yùn)行狀態(tài)的變化,S的大小會不斷地增加或者減少。需要進(jìn)行如下操作a)當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S低于系統(tǒng)預(yù)先設(shè)定的閾值SlOT,即S < Slow,監(jiān)控進(jìn)程會對每個虛擬機(jī)的內(nèi)存空洞進(jìn)行部分的撤銷操作,即對每臺虛擬執(zhí)行撤銷大小為D的內(nèi)存空洞。這里的S1ot大小的選定為所有虛擬機(jī)分配的啟動內(nèi)存T之和的1/6,每次撤銷的內(nèi)存空洞大小D為HV8。;b)所有虛擬機(jī)剩余可用內(nèi)存之和S高于系統(tǒng)預(yù)先設(shè)定的閾值Shigh,即S > Shigh,監(jiān)控進(jìn)程會對每個虛擬機(jī)的部分可用內(nèi)存進(jìn)行空洞的建立操作,即對每臺虛擬機(jī)執(zhí)行增加大小為D的內(nèi)存空洞。這里的Shigh大小的選定為所有虛擬機(jī)分配的啟動內(nèi)存T之和的1/6,而且如上一情形中提到的,每次撤銷的內(nèi)存空洞大小D為凡/8。例子對于某個虛擬化環(huán)境中,物理機(jī)配置如下,型號為Intel Xeon E5530的CPU兩顆,支援上述提及的VMX和EPT技術(shù),內(nèi)存為DDR3,大小為16G(4GX4),網(wǎng)絡(luò)接口卡為IGb以太網(wǎng)卡,硬盤為大小IT的SATA硬盤。Dom的配直如下,內(nèi)存固定大小為3G,冋時在DomO啟動后立即啟動監(jiān)視進(jìn)程。在該物理機(jī)上同時啟動12臺操作系統(tǒng)為Redhat Linux Enterprise Server5. 4的虛擬機(jī),給每個虛擬機(jī)分配的啟動內(nèi)存大小為T = 2GB。同時正如上述的提到的內(nèi)存空洞機(jī)制,在虛擬機(jī)啟動過程中啟動內(nèi)存空洞驅(qū)動,分配氣球區(qū)域?yàn)镽 = IGB的,之后內(nèi)存空洞驅(qū)動分配這IG內(nèi)存中的512MB( = H0)為內(nèi)存空洞區(qū)域。在運(yùn)行的過程中,監(jiān)視進(jìn)程會不斷地監(jiān)視每臺物理機(jī)的內(nèi)存空洞和可用內(nèi)存的大小,正如發(fā)明中提到的,會出現(xiàn)如下三種情形
(I)某臺物理機(jī)的內(nèi)存空洞大小⑶小于128MB。監(jiān)視進(jìn)程通知該虛擬機(jī),使該虛擬機(jī)通過提供的接口向XEN申請大小為(512MB-H)的新的內(nèi)存空洞,使其內(nèi)存空洞大小恢復(fù)到512MB ;(2)如果所有的虛擬機(jī)可用內(nèi)存之和小于一個閾值S1ot = 4GB,那么監(jiān)視進(jìn)程通知每臺虛擬機(jī),使該虛擬機(jī)通過提供的接口向XEN歸還大小為64MB的內(nèi)存空洞區(qū)域,從而減少每臺虛擬機(jī)的內(nèi)存空洞大?。?3)如果所有的虛擬機(jī)可用內(nèi)存之和大于一個閾值Shigh = 12GB,那么監(jiān)視進(jìn)程通知每臺虛擬機(jī),使該虛擬機(jī)通過提供的接口向XEN申請大小為64MB的內(nèi)存空洞區(qū)域,從而增加每臺虛擬機(jī)的內(nèi)存空洞大小。內(nèi)存空洞驅(qū)動在本發(fā)明的設(shè)計下對虛擬機(jī)內(nèi)存資源進(jìn)行了有效調(diào)控。經(jīng)實(shí)驗(yàn)證明,在使用了本發(fā)明后虛擬機(jī)的綜合性能和服務(wù)器的內(nèi)存利用率都有明顯的改善。
本發(fā)明未詳細(xì)說明部分屬于本領(lǐng)域技術(shù)人員公知常識。
權(quán)利要求
1.基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,虛擬機(jī)監(jiān)視器VMM為虛擬機(jī)分配物理硬件資源,其特征在于步驟如下 (1)假設(shè)虛擬機(jī)的內(nèi)存總量為T,在虛擬機(jī)操作系統(tǒng)中加載一個內(nèi)核驅(qū)動模塊,稱之為內(nèi)存空洞驅(qū)動; (2)內(nèi)存空洞驅(qū)動按照氣球驅(qū)動的工作方式,申請并占據(jù)大小為R的可用內(nèi)存空間,并使VMM回收這部分內(nèi)存,以重復(fù)利用;所述的R < T ; (3)依據(jù)設(shè)定的空洞大小值H,內(nèi)存空洞驅(qū)動在步驟(2)中占據(jù)的可用內(nèi)存空間內(nèi)為虛擬機(jī)分配大小為H的內(nèi)存空洞區(qū)域,即H < R,該內(nèi)存空洞為沒有建立客戶機(jī)虛擬地址到客戶機(jī)物理地址映射的內(nèi)存空間,并且為虛擬機(jī)可見的可用內(nèi)存的一部分; (4)虛擬機(jī)在運(yùn)行的過程中,當(dāng)發(fā)生內(nèi)存訪問操作時,根據(jù)訪問的內(nèi)存所屬的區(qū)域不同,按照以下兩種情況處理 (4. I)所訪問的內(nèi)存是已經(jīng)分配給虛擬機(jī)的內(nèi)存,則直接訪問; (4. 2)所訪問的內(nèi)存不是VMM實(shí)際分配給虛擬機(jī)的內(nèi)存,則根據(jù)這些區(qū)域是否屬于步驟(3)中的內(nèi)存空洞區(qū)域,按照以下兩種情況處理 (4. 2. I)若屬于內(nèi)存空洞區(qū)域,VMM立刻為該訪問內(nèi)存分配物理內(nèi)存頁,并且建立從虛擬機(jī)內(nèi)存頁到物理內(nèi)存頁的映射,使訪問內(nèi)存的操作能夠正常進(jìn)行; (4. 2. 2)若不屬于內(nèi)存空洞區(qū)域,說明發(fā)生了其他訪問錯誤,并且該錯誤不是由內(nèi)存空洞機(jī)制造成的,由VMM處理該錯誤。
2.根據(jù)權(quán)利要求I所述的基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,其特征在于所述步驟(3)中的設(shè)定的空洞大小值H取值范圍為[1/3R-2/3R]。
3.根據(jù)權(quán)利要求I所述的基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,其特征在于為了維護(hù)內(nèi)存動態(tài)平衡,在Host上設(shè)置一個監(jiān)視進(jìn)程,監(jiān)視進(jìn)程工作流程如下 第一步,監(jiān)視進(jìn)程每秒獲取每臺虛擬機(jī)內(nèi)存空洞的大小和剩余可用內(nèi)存的大小,根據(jù)獲取信息進(jìn)行如下判斷 當(dāng)某臺虛擬機(jī)的內(nèi)存空洞的大小低于預(yù)設(shè)的閾值K時,該監(jiān)控進(jìn)程會將該虛擬機(jī)內(nèi)存空洞大小的設(shè)定增加大小為Q的內(nèi)存空洞區(qū)域;Q的大小設(shè)定為HciZU K設(shè)定為HV4 ; 當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S低于系統(tǒng)預(yù)先設(shè)定的閾值SlOT,即S < Slow,或者物理主機(jī)總體對內(nèi)存的需求量增加,需要對其中某臺虛擬機(jī)縮小空洞時,監(jiān)控進(jìn)程會對每個或者某個虛擬機(jī)的內(nèi)存空洞進(jìn)行部分的撤銷操作,即對每臺虛擬機(jī)執(zhí)行撤銷大小為D的內(nèi)存空洞;SlOT大小的范圍為所有虛擬機(jī)分配的啟動內(nèi)存T之和的[1/4-1/6],每次撤銷的內(nèi)存空洞大小D為成/8 ; 當(dāng)所有虛擬機(jī)剩余可用內(nèi)存之和S高于系統(tǒng)預(yù)先設(shè)定的閾值Shigh,即S > Shigh,或者物理主機(jī)總體對內(nèi)存的需求量減少,需要對其中每臺虛擬機(jī)增大空洞時,空洞監(jiān)控進(jìn)程會對每個或者某臺虛擬機(jī)的部分可用內(nèi)存進(jìn)行空洞的建立操作,即對每臺虛擬機(jī)執(zhí)行增加大小為D的內(nèi)存空洞;Shigh大小的范圍為所有虛擬機(jī)分配的啟動內(nèi)存T之和的[1/2-2/3],每次增加的內(nèi)存空洞大小D為HV8 ; 上述Htl為初始設(shè)定的空洞大小值,取值范圍為[1/3R-2/3R]; 第二步,統(tǒng)計每臺虛擬機(jī)需要增加或者撤銷的內(nèi)存空洞大小,向VMM依次提交相應(yīng)內(nèi)存空洞變化請求;VMM在每臺虛擬機(jī)剩余內(nèi)存基礎(chǔ)上根據(jù)該請求設(shè)定空洞大小值H,內(nèi)存空洞驅(qū)動 從步驟(3)開始執(zhí)行。
全文摘要
基于內(nèi)存空洞機(jī)制的虛擬機(jī)內(nèi)存資源分配方法,虛擬機(jī)監(jiān)視器VMM為虛擬機(jī)分配物理硬件資源,(1)假設(shè)虛擬機(jī)的內(nèi)存總量為T,在虛擬機(jī)操作系統(tǒng)中加載一個內(nèi)核驅(qū)動模塊,稱之為內(nèi)存空洞驅(qū)動;(2)內(nèi)存空洞驅(qū)動按照氣球驅(qū)動的工作方式,申請并占據(jù)大小為R的可用內(nèi)存空間,并使VMM回收這部分內(nèi)存,以重復(fù)利用;所述的R<T;(3)依據(jù)設(shè)定的空洞大小值H,內(nèi)存空洞驅(qū)動在步驟(2)中占據(jù)的可用內(nèi)存空間內(nèi)為虛擬機(jī)分配大小為H的內(nèi)存空洞區(qū)域,即H<R,該內(nèi)存空洞為沒有建立客戶機(jī)虛擬地址到客戶機(jī)物理地址映射的內(nèi)存空間,為虛擬機(jī)可見的可用內(nèi)存;(4)虛擬機(jī)在運(yùn)行的過程中,當(dāng)發(fā)生內(nèi)存訪問操作時,根據(jù)訪問的內(nèi)存所屬的區(qū)域不同分別進(jìn)行處理。
文檔編號G06F9/455GK102779074SQ20121021423
公開日2012年11月14日 申請日期2012年6月18日 優(yōu)先權(quán)日2012年6月18日
發(fā)明者劉蘭崢, 張鵬飛, 彭宇行, 王懷民, 王意潔, 王柳峰, 田甜, 褚瑞 申請人:中國人民解放軍國防科學(xué)技術(shù)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1