專利名稱:細粒度分配虛擬機計算資源的方法和設備的制作方法
技術領域:
本發(fā)明屬于計算機領域中的虛擬化技術,尤其涉及細粒度分配虛擬機計算資源的方法和設備
背景技術:
虛擬化技術是一種用軟件模擬計算機硬件的技術,自從虛擬化技術獲得了硬件廠商的支持以來,這種軟件模擬硬件的性能獲得了巨大的提升了,以至于整個操作系統(tǒng),例如Windows,不需要直接安裝在物理硬件上,而是運行在虛擬硬件上,便可獲得完全可以接受的性能。這種物理硬件,我們稱之為物理機(Physical Machine,簡稱PM),而虛擬硬件,我們稱之為虛擬機(Virtual Machine,簡稱VM),其上運行的操作系統(tǒng)稱之為賓客操作系統(tǒng)(Guest OS,簡稱G0S)。管理虛擬機的軟件,我們稱之為虛擬機管理器(Virtual MachineMonitor,簡稱 VMM)。在物理機上運行的虛擬機管理器有兩種形式1)如圖I所示,虛擬機管理器直接運行于物理機之上,在此之上運行一個特權操作系統(tǒng),該特權操作系統(tǒng)具有對物理設備等資源的訪問權限。其他的虛擬機也運行于虛擬機管理器之上,但是當訪問物理設備時需要通過特權操作系統(tǒng)。2)如圖2所示,在物理機上運行一個操作系統(tǒng),稱為宿主操作系統(tǒng)(HostOS),虛擬機管理器運行于宿主操作系統(tǒng)之上,或者是作為宿主操作系統(tǒng)的一個模塊。其他的虛擬機運行于虛擬機管理器之上,需要通過宿主操作系統(tǒng)才能訪問物理設備。但是,不論是哪種實現(xiàn)形式,特權操作系統(tǒng)或者宿主操作系統(tǒng)都可以觀察到虛擬機當前的資源使用狀態(tài),并對虛擬機進行操作。例如如果采用KVM(Kernel-based VirtualMachine,基于內(nèi)核的虛擬機),虛擬機其實就是宿主操作系統(tǒng)的一個進程而已,宿主操作系統(tǒng)可以像控制其他進程一樣的控制該虛擬機。因此,為了描述方便,我們籠統(tǒng)的說“虛擬機管理器可以對虛擬機進行監(jiān)視和控制”,盡管這種控制有時候是特權操作系統(tǒng)完成的,有時候是宿主操作系統(tǒng)完成的。虛擬化技術帶來的好處是明顯的我們可以動態(tài)的調(diào)整虛擬機的性能,因為它是軟件模擬出來的。假設我們有一臺配置很高的物理機,我們可以在這臺物理機上創(chuàng)建多個虛擬機,并且可以讓不同的虛擬機有不同的配置。對于占用計算機資源非常小的應用,我們可以只分配一個低配置的虛擬機;而對于占用計算機資源很大的應用,我們可以為其分配一個高配置的虛擬機。如果這個低配置的虛擬機的負載隨著業(yè)務量的增加而變大時,我們可以動態(tài)的提高虛擬機的配置以滿足性能的需求;而高配置的虛擬機的負載隨著業(yè)務量的降低而變小時,我們可以動態(tài)的降低虛擬機的配置,從而把騰出來的計算資源分配給其他
的虛擬機.......這種動態(tài)的調(diào)整完全可以由軟件來實現(xiàn),例如部署一臺預裝了 Linux操
作系統(tǒng)的虛擬機只需要幾分鐘,而不是幾個小時。有了虛擬化技術,IT管理員只需要在個人電腦上進行一些操作就可以完成原本非常復雜的IT資源管理任務。此外,在虛擬機里面安裝和運行操作系統(tǒng),與在物理機中一模一樣。即使一臺物理機上同時運行著多個虛擬機,虛擬機的使用者也不知道它是在與別人分享一臺物理計算機,甚至他根本就不知道他用的是物理機還是虛擬機。正因為上述好處,美國著名的亞馬遜公司利用虛擬化技術將閑置的硬件服務器資源整合起來,形成一個虛擬的互聯(lián)網(wǎng)數(shù)據(jù)中心(InternetData Center, IDC),它顛覆了傳統(tǒng)的IDC模式人們通過亞馬遜的網(wǎng)站就可以申請到一臺虛擬機,并開展互聯(lián)網(wǎng)業(yè)務,例如架設自己的網(wǎng)站,而無須自己購買物理機,大大降低了初期IT投資成本。同時,虛擬機是按小時而不是按年按月收費的,例如我們只需要花幾塊錢就可以使用該虛擬機。
發(fā)明內(nèi)容
本發(fā)明要解決的技術問題是,讓虛擬機占用更細粒度的資源,并且這種占用是可控的,即使占用很小一部分資源,服務質(zhì)量也是有保證的。為了解決上述技術問題,本發(fā)明提出細粒度分配虛擬機計算資源的方法,其特征在于 讓虛擬機運行時間周期t ;檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a ;判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a <= b,則虛擬機繼續(xù)運行下一個時間周期,否則,讓虛擬機暫停。本發(fā)明還提出細粒度分配虛擬機計算資源的設備,其特征在于運行模塊,用于讓虛擬機運行時間周期t ;計時模塊,耦合于運行模塊,用于對虛擬機的運行時間進行計時;檢查模塊,耦合于計時模塊和運行模塊,用于檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a ;判斷模塊,耦合于檢查模塊和運行模塊,用于判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a < = b,則通知運行模塊讓虛擬機繼續(xù)運行下一個時間周期,否則,通知運行模塊讓虛擬機暫停。與現(xiàn)有技術相比,本發(fā)明在虛擬機對CPU資源的占用率a大于虛擬機對CPU資源的占用率的上限b時,讓虛擬機暫停。以通過暫停虛擬機的運行,使得之前運行的時間周期與暫停時間之和所確定的時間段內(nèi),平均CPU利用率小于等于CPU資源的占用率的上限b,即虛擬機暫停的時間S >= t * (a/b-1)。讓虛擬機占用更細粒度的資源,并且這種占用是可控的,即使占用很小一部分資源,服務質(zhì)量也是有保證的。尤其是,讓虛擬機暫停的時間長度s = t * (a/b-Ι),在整個s+t的時間段內(nèi),平均CPU利用率為b??梢允贡咎摂M機充分利用CPU的資源,并且不會影響其他虛擬機對CPU的使用,對本虛擬機和其他虛擬機而言,服務質(zhì)量都可以得到保證。
圖I所示為現(xiàn)有技術中虛擬機管理器直接運行于物理機之上的示意圖。圖2所示為現(xiàn)有技術中虛擬機管理器運行于宿主操作系統(tǒng)之上的示意圖。圖3所示為本發(fā)明細粒度分配虛擬機計算資源的方法流程圖。圖4所示為本發(fā)明細粒度分配虛擬機計算資源的設備結構示意圖。
具體實施例方式虛擬化技術的另一個重要特點就是資源占用的隔離性。如果給第一個虛擬機分配一個CPU核心,給第二個虛擬機分配兩個CPU核心。那么,即使第二個虛擬機完全閑置,第一個虛擬機無論多忙也不會搶占分配給第二個虛擬機的CPU核心的計算能力。這就保證了分配給第一個虛擬機和第二個虛擬機的資源是相互隔離的,盡管它們在同一臺物理機上,也確保了虛擬IDC的服務是有質(zhì)量保證的。
通過調(diào)研發(fā)現(xiàn),IDC內(nèi)部的計算機(包括物理機或者虛擬機)對計算資源的使用率非常低,通常只用到了 CPU能力的5%左右,而95%的計算能力都被浪費了。即使通過虛擬化技術讓虛擬機只使用一個物理核,也是一定程度的浪費。因此,我們需要一種技術來確保虛擬機占用更細粒度的資源,例如50%的CPU計算能力,并且該資源的占用是可控的,SP不會搶占其他虛擬機的資源。本發(fā)明的目的就是提出一種方案,讓虛擬機占用更細粒度的資源,并且這種占用是可控的,即使是占用很小一部分資源,服務質(zhì)量也是有保證的。前面已經(jīng)提到“虛擬機管理器可以對虛擬機進行監(jiān)視和管理”,即可以獲得虛擬機運行時的統(tǒng)計數(shù)據(jù),并控制虛擬機的運行和暫停。當虛擬機運行時,虛擬機管理器每隔一個很短的時間周期(該周期可以是定長,或者是動態(tài)變化的)就去檢查一下在這個時間周期內(nèi)虛擬機所占用的CPU資源情況。如果在這個周期內(nèi)虛擬機對CPU資源占用率沒有超過預設的閾值,則繼續(xù)讓虛擬機運行下一個周期(該周期的長短可以與上一個周期不同)。如果超過了預設的閾值,則讓虛擬機暫停一段時間,然后再讓虛擬機繼續(xù)運行下一個周期。具體的做法如圖3所示,細粒度分配虛擬機計算資源的方法,包括以下步驟在步驟301,讓虛擬機運行時間周期t。該時間周期t是一個很短的時間周期,該周期可以是定長,也可以是動態(tài)變化的。由于時間周期t可以是動態(tài)變化的,所以,如果要變更運行的時間周期,只要在執(zhí)行下一個周期之前修改運行的時間周期即可。在步驟302,檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a。在步驟303,判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a <=b,跳轉(zhuǎn)到步驟301,虛擬機繼續(xù)運行下一個時間周期t,否則,執(zhí)行步驟304。在步驟304,讓虛擬機暫停。由于暫停的時間長度很短,在人體感覺上虛擬機是連續(xù)運行的,但是實際上虛擬機對CPU的資源占用率已經(jīng)受到了限制。在暫停之后,再讓虛擬機繼續(xù)運行。作為本發(fā)明的一個實施例,上述方法可以運行在虛擬機管理器、操作系統(tǒng)或第三方程序中。其中,讓虛擬機暫停的時間長度s > = t * (a/b-Ι),優(yōu)選為s = t * (a/b-Ι)。因為我們要求CPU占用率不得超過b,而在時間t內(nèi)的占用率為a,并且a > b。那么我們需要讓CPU停止一段時間S,使得在(s+t)這個時間段內(nèi)的平均占用率為b。那么就有(s+t)b=a * to于是s = t * (a/b-1)。這樣,在停止了 s時間長度以后,在整個s+t的時間段內(nèi),平均CPU利用率為b。如圖4所示為本發(fā)明執(zhí)行上述方法流程的設備結構示意圖,即細粒度分配虛擬機計算資源的設備,包括
運行模塊,用于讓虛擬機運行時間周期t。時間周期t是一個很短的時間周期,該周期可以是定長,也可以是動態(tài)變化的。由于時間周期t可以是動態(tài)變化的,所以,如果要變更運行的時間周期,只要在執(zhí)行下一個周期之前修改運行的時間周期即可;計時模塊,耦合于運行模塊,用于對虛擬機的運行時間進行計時;檢查模塊,耦合于計時模塊和運行模塊,用于檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a ;判斷模塊,耦合于檢查模塊和運行模塊,用于判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a < = b,則通知運行模塊讓虛擬機繼續(xù)運行下一個時間周期,否則,通知運行模塊讓虛擬機暫停。 其中,判斷模塊通知運行模塊讓虛擬機暫停的時間長度s >= t * (a/b-Ι),優(yōu)選為s = t * (a/b-1)。在暫停之后,再讓虛擬機繼續(xù)運行。作為本發(fā)明的一個實施例,所述設備運行在虛擬機管理器、操作系統(tǒng)或第三方程序中。本發(fā)明讓虛擬機只占用更細粒度的資源,并且這種占用是可控的,即使是占用很小一部分資源,服務質(zhì)量也是有保證的。所謂更細粒度的資源是指讓虛擬機只能使用CPU資源的一部分,而非占用整個CPU。由于虛擬機本身的特性,當它需要資源的時候,它會不管不顧的占用盡可能多的資源來為自己服務。這樣就會導致占用其他的虛擬機資源。而本發(fā)明就可以使得虛擬機對CPU資源的占用率不會超過設定的上限,不會占用其他虛擬機的資源,使得更細粒度的分配成為可能,服務質(zhì)量也是有保證的。下面通過具體實施例,對上述方法以及設備進行說明。以KVM虛擬化技術為例,宿主操作系統(tǒng)為Linux,虛擬機對于宿主操作系統(tǒng)來說其實就是一個進程,在進程控制方面與其他進程一樣。在進程的執(zhí)行時間度量方面,Linux采用“時鐘滴答”作為單位,它與實際時間的換算關系隨著不同物理機的設備特性和宿主操作系統(tǒng)的配置而不同,但是一旦物理機設備和操作系統(tǒng)確定,則每個“時鐘滴答”都是一樣長的。因此,我們可以換算出時鐘滴答與實際時間的換算關系,例如在Linux服務器版本下,一個時鐘滴答往往等于100ms,而Linux桌面版,一個時鐘滴答往往等于50ms。那么,我們可以定義時鐘滴答與實際時間之間的映射關系F,即實際時間=F(時鐘滴答)。在宿主操作系統(tǒng)的/piOc/pid/stat文件有關于這個進程的統(tǒng)計信息的詳細描述,其中最重要的信息有兩個表示進程在用戶態(tài)下執(zhí)行的時鐘滴答;stime表示進程在內(nèi)核態(tài)下執(zhí)行的時鐘滴答。兩者之和表示該虛擬機執(zhí)行總共所占用的CPU的時鐘滴答。偽代碼如下Static char buffer[128];FILE * fd = fopen(" /proc/pid/stat" , " r");fgets(buffer, sizeof(buffer), fd);fclose (fd);int n = sscanf (buffer, " . . . % lu% lu. . . , &utime, &stime);long long int time = utime+stime ;具體的流程是第一步,從宿主操作系統(tǒng)里啟動虛擬機進程,并獲得一個進程號Pid0同時假定虛擬機對CPU的占用率不能超過X (例如30% )。
第二步,獲得當前的系統(tǒng)時間t0,通過/proc/pid/stat文件獲得該虛擬機總共所占用的CPU時間,記作p0。第三步,等待一小段時間u (例如200毫秒)之后,再獲得當前系統(tǒng)時間tl,以及虛擬機總共所占用的CPU時間pi。第四步,計算CPU占用率s = (pl-p0)/(tl-t0)。如果s < = x,則將tl賦值給t0, pi賦值給PO,再執(zhí)行第三步。否則,執(zhí)行第五步。第五步,計算虛擬機暫停時間w = (pl-pO)/x_u。然后向進程號pid發(fā)送信號SIGST0P使虛擬機暫停。然后將tl賦值給t0,pi賦值給p0。在等待時間w后再向進程號Pid發(fā)送信息SIGC0NT使該進程繼續(xù)執(zhí)行。最后,繼續(xù)執(zhí)行第三步。 測試結果物理機配置是雙核CPU,為虛擬機分配了一個物理核。在不做限速的情況下,在虛擬機的賓客操作系統(tǒng)里運行一個性能測試程序,平均耗時9260ms。與此同時,物理機的CPU資源消耗為50%,即將一個CPU核的資源全部占滿。測試結果如下C:Documents and Settings\Feng\ 桌面> java Test time = 9266C!Documents and Settings\Feng\ 桌面> java Test time = 9250C!Documents and Settings\Feng\ 桌面> java Test time = 9265而后,對虛擬機進行限速,即它只能用到它所占用的CPU核的50%的能力,即整個系統(tǒng)25%的計算能力。測試結果如下C:Documents and Settings\Feng\ 桌面> java Test time = 19015C!Documents and Settings\Feng\ 桌面> java Test time = 18594C!Documents and Settings\Feng\ 桌面> java Test time = 19019可以看出,由于限速的原因,程序運行速度下降為原來的一半,占用時間增加了一倍。這樣,可以保證該程序的服務質(zhì)量,另外,由于對該程序所占用的CPU核的能力進行了限制,也保證了與該程序共用該CPU的其他程序的服務質(zhì)量。作為對詳細描述的結論,應該注意本領域的技術人員將會很清楚可對優(yōu)選實施例做出許多變化和修改,而實質(zhì)上不脫離本發(fā)明的原理。這種變化和修改包含在所附權利要求書所述的本發(fā)明的范圍之內(nèi)。
權利要求
1.細粒度分配虛擬機計算資源的方法,其特征在于 讓虛擬機運行時間周期t; 檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a ; 判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a <= b,則虛擬機繼續(xù)運行下一個時間周期,否則,讓虛擬機暫停。
2.根據(jù)權利要求I所述細粒度分配虛擬機計算資源的方法,其特征在于讓虛擬機暫停的時間長度大于等于t * (a/b-1)。
3.根據(jù)權利要求I或2所述細粒度分配虛擬機計算資源的方法,其特征在于運行在虛擬機管理器、操作系統(tǒng)或第三方程序中。
4.細粒度分配虛擬機計算資源的設備,其特征在于 運行模塊,用于讓虛擬機運行時間周期t ; 計時模塊,耦合于運行模塊,用于對虛擬機的運行時間進行計時; 檢查模塊,耦合于計時模塊和運行模塊,用于檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a ; 判斷模塊,耦合于檢查模塊和運行模塊,用于判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a < = b,則通知運行模塊讓虛擬機繼續(xù)運行下一個時間周期,否則,通知運行模塊讓虛擬機暫停。
5.根據(jù)權利要求4所述細粒度分配虛擬機計算資源的設備,其特征在于判斷模塊通知運行模塊讓虛擬機暫停的時間長度大于等于t * (a/b-1)。
6.根據(jù)權利要求4或5所述細粒度分配虛擬機計算資源的設備,其特征在于運行在虛擬機管理器、操作系統(tǒng)或第三方程序中。
全文摘要
本發(fā)明提出細粒度分配虛擬機計算資源的方法和設備。讓虛擬機運行時間周期t;檢查在時間周期t內(nèi)虛擬機對CPU資源的占用率a;判斷虛擬機對CPU資源的占用率a是否小于等于虛擬機對CPU資源的占用率的上限b,如果是,即a<=b,則虛擬機繼續(xù)運行下一個時間周期,否則,讓虛擬機暫停。本發(fā)明讓虛擬機占用更細粒度的資源,并且這種占用是可控的,即使是很小一部分資源,服務質(zhì)量也是有保證的。
文檔編號G06F9/455GK102654841SQ20111004989
公開日2012年9月5日 申請日期2011年3月2日 優(yōu)先權日2011年3月2日
發(fā)明者張潔, 江峰, 王峰, 王志軍, 蔡永順, 雷葆華, 饒少陽 申請人:中國電信股份有限公司