專利名稱:一種虛擬cpu調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算系統(tǒng)虛擬化技術(shù)領(lǐng)域,具體涉及一種虛擬CPU調(diào)度方法,用于多 處理機(jī)虛擬化環(huán)境。
背景技術(shù):
近年來,隨著計算體系結(jié)構(gòu)和軟硬件技術(shù)的飛速發(fā)展,計算系統(tǒng)虛擬化技術(shù)也日 益成熟,并成為學(xué)術(shù)界和工業(yè)界的熱門技術(shù)。虛擬化技術(shù)使得計算機(jī)軟件可以在一個虛擬 平臺上而不是真實的物理機(jī)上運(yùn)行,應(yīng)用程序在各自獨立的空間運(yùn)行而互不影響,使得一 個平臺可以同時運(yùn)行多個操作系統(tǒng),擴(kuò)大了硬件容量,簡化了軟件重新配置的過程,從而顯 著提高了計算機(jī)的利用率、工作效率和安全性、靈活性。多處理機(jī)系統(tǒng)為虛擬化環(huán)境帶來了很大的優(yōu)勢。多處理機(jī)系統(tǒng)包括多個物理中央 處理器(PCPU),多處理機(jī)虛擬化環(huán)境包括虛擬機(jī)監(jiān)視器以及一臺或多臺虛擬機(jī)(指通過軟 件模擬的,具有完整硬件系統(tǒng)功能的,運(yùn)行在一個完全隔離環(huán)境中的完整計算機(jī)系統(tǒng)),每 臺虛擬機(jī)上運(yùn)行一個客戶操作系統(tǒng)(Guest 0S),每臺虛擬機(jī)又包含一個或多個虛擬中央處 理器(VCPU);虛擬機(jī)監(jiān)視器將虛擬機(jī)上的客戶操作系統(tǒng)映射到某些VCPU上(VCPU的數(shù)目 可以多于PCPU的數(shù)目),同時,將VCPU調(diào)度到PCPU上運(yùn)行。VCPU能夠在不同PCPU上運(yùn)行 而無需告知Guest OS。虛擬機(jī)監(jiān)視器采用靈活的分配策略,以響應(yīng)不斷變化的負(fù)載情況。 這使得虛擬機(jī)可以從一臺機(jī)器遷移到與該機(jī)器結(jié)構(gòu)不同的機(jī)器上。虛擬機(jī)監(jiān)視器上具有共享內(nèi)存頁,它是一種特殊的數(shù)據(jù)結(jié)構(gòu),能夠同時被虛擬機(jī) 監(jiān)視器和虛擬機(jī)訪問;VCPU被調(diào)度時,虛擬機(jī)監(jiān)視器的調(diào)度模塊會給當(dāng)前被選擇運(yùn)行的 VCPU分配一個運(yùn)行時間,稱為時間片。虛擬機(jī)監(jiān)視器能夠?qū)CPU分發(fā)給Guest OS,以支持靈活的分配策略,并支持重 新分配PCPU來響應(yīng)不斷變化的負(fù)載情況。分配策略支持Guest OS的并發(fā)操作,它也能將 Guest OS映射到VCPU上(VCPU的數(shù)目可以多于PCPU),VCPU能夠在PCPU之間遷移而無需 通知Guest OS。這使得虛擬機(jī)(指通過軟件模擬的,具有完整硬件系統(tǒng)功能的,運(yùn)行在一個 完全隔離環(huán)境中的完整計算機(jī)系統(tǒng))可以從一臺機(jī)器遷移到與該機(jī)器結(jié)構(gòu)不同的機(jī)器上。多處理機(jī)系統(tǒng)中引入虛擬化,會帶來很大的優(yōu)勢,但同時也引發(fā)了一些問題,鎖持 有者搶占問題就是其中之一。鎖,是操作系統(tǒng)中常用的一種機(jī)制,用來保護(hù)臨界區(qū)(即訪問 一次僅允許一個線程使用的共享資源的代碼段),使其在任意時刻只能被某一個線程訪問。 線程是指在進(jìn)程(即處于執(zhí)行期的程序)中活動的對象。鎖有多種多樣的形式,而多處理 機(jī)操作系統(tǒng)最常用的一種鎖是自旋鎖。自旋鎖最多只能被一個可執(zhí)行線程持有。如果一個 執(zhí)行線程試圖獲得一個已經(jīng)被持有的自旋鎖,那么該線程就會一直進(jìn)行忙循環(huán)(自旋),直 到這個鎖被持有它的線程釋放為止。從設(shè)計上來說,自旋鎖只能持有很短的時間。但是如 果一個虛擬機(jī)的某個VCPU被搶占的時候持有鎖的話,這一點就不再成立一這個虛擬機(jī)的 其他VCPU仍有可能運(yùn)行在不同的CPU上,并等待著這個鎖的釋放,這樣就導(dǎo)致了鎖持有時 間延長,大量處理器周期被浪費(fèi),極大地影響了性能和可擴(kuò)展性。
發(fā)明內(nèi)容
本發(fā)明提供一種虛擬CPU的調(diào)度方法,解決鎖持有者搶占問題,以提高多處理機(jī) 系統(tǒng)中虛擬機(jī)的性能。本發(fā)明的一種虛擬CPU調(diào)度方法,用于多處理機(jī)虛擬化環(huán)境,包括監(jiān)測步驟,信息 收集步驟和調(diào)度步驟,其特征在于一 .監(jiān)測步驟實時監(jiān)控各虛擬機(jī)的Linux操作系統(tǒng)中的自旋鎖操作命令,針對每臺虛擬機(jī)的每 個VCPU都設(shè)置一個自旋鎖計數(shù)器,在Linux操作系統(tǒng)每個自旋鎖加鎖語句處,判斷是否成 功加鎖,是則將該自旋鎖加鎖語句所對應(yīng)的VCPU的自旋鎖計數(shù)器加1,否則不進(jìn)行操作;在 每個自旋鎖解鎖語句處,將該自旋鎖解鎖語句所對應(yīng)的VCPU的自旋鎖計數(shù)器減1 ;所述自 旋鎖計數(shù)器加減操作均為原子操作,所述原子操作,是指不會被線程調(diào)度機(jī)制打斷的操作, 這種操作一旦開始,就一直運(yùn)行到結(jié)束,中間不會有任何線程切換(context switch);二.信息收集步驟提取監(jiān)測步驟所得到的每臺虛擬機(jī)上各個VCPU上的自旋鎖數(shù)目,并將其與每臺 虛擬機(jī)對應(yīng),構(gòu)成每臺虛擬機(jī)自旋鎖計數(shù)信息;將所述每臺虛擬機(jī)自旋鎖計數(shù)信息寫入虛 擬機(jī)監(jiān)視器共享內(nèi)存頁;三.調(diào)度步驟運(yùn)行于各個PCPU上,虛擬機(jī)監(jiān)視器按照周期T,循環(huán)執(zhí)行如下子步 驟(3. 1)計算窗口啟動時間& Sn=En-ZiT11O^-^,式中,&為本輪調(diào)度窗口啟動時間,4是本輪調(diào)度對各個 VCPU所分配時間片的結(jié)束時刻,Pi為第i輪調(diào)度搶占點,Si為第i輪調(diào)度窗口啟動時間;(3. 2)在&時刻啟動窗口,窗口長度w = 0. 5 1. 5ms ;(3. 3)從虛擬機(jī)監(jiān)視器共享內(nèi)存頁提取當(dāng)前正在運(yùn)行的VCPU上的自旋鎖數(shù)目,并 據(jù)其判斷當(dāng)前正在運(yùn)行的VCPU是否持有鎖,是則轉(zhuǎn)子步驟(3.5);否則轉(zhuǎn)子步驟(3.4);(3. 4)調(diào)度該 VCPU,轉(zhuǎn)子步驟(3. 6);(3.5)檢查窗口是否已經(jīng)到達(dá)結(jié)束點,是則轉(zhuǎn)子步驟(3.4);否則轉(zhuǎn)子步驟 (3. 3);(3. 6)結(jié)束本輪調(diào)度,當(dāng)周期T屆滿時,轉(zhuǎn)子步驟(3. 1)。所述的虛擬CPU調(diào)度方法,其特征在于所述信息收集步驟中,使用讀寫鎖對共享內(nèi)存頁中的信息進(jìn)行保護(hù)。本發(fā)明針對當(dāng)前多處理機(jī)虛擬化環(huán)境下調(diào)度方法所存在的鎖持有者搶占問題,收 集了自旋鎖計數(shù)信息,通過調(diào)度步驟進(jìn)行調(diào)度決策。與現(xiàn)有的調(diào)度方案相比,本發(fā)明主要有 如下特點(1)準(zhǔn)確性本發(fā)明采用動態(tài)方式直接對自旋鎖操作進(jìn)行計數(shù),為調(diào)度步驟提供 相關(guān)信息,與采用其他的間接方式來判斷當(dāng)前VCPU上是否可能持有自旋鎖的方式相比,提 高了調(diào)度算法的準(zhǔn)確性與精度。(2)靈活性與可擴(kuò)展性鎖持有搶占問題也可以通過gang調(diào)度來避免。在gang調(diào) 度中,同一虛擬機(jī)上所有的VCPU都以一個相等時間片被同時調(diào)度,不管VCPU上是否有任務(wù)在執(zhí)行,gang調(diào)度都給它時間片,這就導(dǎo)致了 PCPU利用率低下。此外,gang調(diào)度排除了其 他調(diào)度算法的使用,靈活性與可擴(kuò)展性不強(qiáng)。本發(fā)明不需要同一虛擬機(jī)上所有的VCPU都被 同時調(diào)度,相比而言,PCPU利用率高,并可以與虛擬機(jī)監(jiān)視器中常用的調(diào)度算法相結(jié)合,具 有較高的靈活性與可擴(kuò)展性。(3)高效性本發(fā)明采用開銷較小的計數(shù)方法和通信手段,來避免鎖持有者搶占 問題,極大地提高了多處理機(jī)上虛擬機(jī)的性能。(4)公平性本發(fā)明采用的調(diào)度方法,考慮到了 VCPU調(diào)度的公平性,保證了調(diào)度時 各個VCPU的運(yùn)行時間與原本應(yīng)分配給它們的運(yùn)行時間相一致。
圖1為本方法的整體架構(gòu)示意圖;圖2為監(jiān)測步驟流程示意圖;圖3為共享內(nèi)存頁的原理示意圖;圖4為調(diào)度步驟的流程示意圖;圖5為調(diào)度步驟中的調(diào)度算法原理示意圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明進(jìn)一步說明。如圖1所示,本發(fā)明包括監(jiān)測步驟,信息收集步驟和調(diào)度步驟。圖2為監(jiān)測步驟的流程示意圖。如圖3所示,信息收集步驟通過共享內(nèi)存頁完成虛擬機(jī)監(jiān)視器和虛擬機(jī)的數(shù)據(jù)交 互??紤]到并發(fā)讀寫的同步問題,使用讀寫鎖對共享內(nèi)存頁中的信息進(jìn)行保護(hù),即,允許多 個內(nèi)核線程同時讀取共享內(nèi)存頁中的信息,但是不允許在讀操作的同時另一個線程對其進(jìn) 行寫操作,或在寫操作的同時另一個線程對其進(jìn)行讀操作。調(diào)度步驟的流程如圖4所示。如圖5所示,在第η輪調(diào)度中,在所分配VCPU時間片實際結(jié)束時刻En附近設(shè)置一 個窗口,其長度W= 1. 0ms,該窗口在&時刻啟動,搶占點Pn是在窗口中可以搶占虛擬機(jī)的 時刻(即最后一個自旋鎖被釋放的時刻)。如果在窗口結(jié)束之前一直沒有搶占APn出現(xiàn), 虛擬機(jī)監(jiān)視器將強(qiáng)制調(diào)度該VCPU。本發(fā)明目的是選擇一個窗口啟動時間Sn,使得搶占點Pn的平均值與所分配VCPU時 間片實際結(jié)束時刻4保持一致(即使得IX1OK-i3O =0)。這樣就可以保證vcpu調(diào)度的 公平性。設(shè)On為&與&間的偏移量,可以推導(dǎo)出,在第η輪調(diào)度中,&和Pn之間 的平均距離等于一個偏移量0η,即仏^^仍-^^而在第11+1輪調(diào)度中,偏移 量 Οη+1= Σ二仍 ,所以可得 0n+1 = 0η+Ρη-&。由圖 5 可知,Sn+1 = En+「0n+1,即 Sn+1=En+1_ Zil1(A-X)。所以,在第η輪調(diào)度中,在4時刻之前發(fā)生的搶占,將導(dǎo)致第 η+1輪調(diào)度中,窗口向右滑動,這樣就減少了提前搶占的發(fā)生(見圖5的下半部分)。相反 的,在4時刻之前發(fā)生的搶占將導(dǎo)致第η+1輪調(diào)度中,窗口向左滑動,造成更多的提前搶占的機(jī)會。實施例為了驗證本發(fā)明的m可行性和有效性,本發(fā)明的步驟可編寫為計算機(jī)程序,加載 到Xen系統(tǒng),并和一個沒有采用本發(fā)明的原始Xen系統(tǒng)進(jìn)行比較。本實施例共采用兩臺硬件配置相同的計算機(jī),其中計算機(jī)PCl安裝了具有本發(fā)明 步驟的Xen系統(tǒng),計算機(jī)PC2安裝原始的Xen系統(tǒng)。表1 實驗配置環(huán)境
權(quán)利要求
1.一種虛擬CPU調(diào)度方法,用于多處理機(jī)虛擬化環(huán)境,包括監(jiān)測步驟,信息收集步驟和 調(diào)度步驟,其特征在于一.監(jiān)測步驟實時監(jiān)控各虛擬機(jī)的Linux操作系統(tǒng)中的自旋鎖操作命令,針對每臺虛擬機(jī)的每個 VCPU都設(shè)置一個自旋鎖計數(shù)器,在Linux操作系統(tǒng)每個自旋鎖加鎖語句處,判斷是否成功 加鎖,是則將該自旋鎖加鎖語句所對應(yīng)的VCPU的自旋鎖計數(shù)器加1,否則不進(jìn)行操作;在每 個自旋鎖解鎖語句處,將該自旋鎖解鎖語句所對應(yīng)的VCPU的自旋鎖計數(shù)器減1 ;所述自旋 鎖計數(shù)器加減操作均為原子操作,所述原子操作,是指不會被線程調(diào)度機(jī)制打斷的操作,這 種操作一旦開始,就一直運(yùn)行到結(jié)束,中間不會有任何線程切換(context switch);二.信息收集步驟提取監(jiān)測步驟所得到的每臺虛擬機(jī)上各個VCPU上的自旋鎖數(shù)目,并將其與每臺虛擬 機(jī)對應(yīng),構(gòu)成每臺虛擬機(jī)自旋鎖計數(shù)信息;將所述每臺虛擬機(jī)自旋鎖計數(shù)信息寫入虛擬機(jī) 監(jiān)視器共享內(nèi)存頁;三.調(diào)度步驟運(yùn)行于各個PCPU上,虛擬機(jī)監(jiān)視器按照周期T,循環(huán)執(zhí)行如下子步驟 (3. 1)計算窗口啟動時間Sn=En- Yj^P1 - S1),式中,&為本輪調(diào)度窗口啟動時間,En是本輪調(diào)度對各個VCPU所分配時間片的結(jié)束時刻,Pi為第i輪調(diào)度搶占點,Si為第i輪調(diào)度窗口啟動時間; (3. 2)在&時刻啟動窗口,窗口長度w = 0.5 1.5ms ;(3. 3)從虛擬機(jī)監(jiān)視器共享內(nèi)存頁提取當(dāng)前正在運(yùn)行的VCPU上的自旋鎖數(shù)目,并據(jù)其 判斷當(dāng)前正在運(yùn)行的VCPU是否持有鎖,是則轉(zhuǎn)子步驟(3.5);否則轉(zhuǎn)子步驟(3.4); (3. 4)調(diào)度該VCPU,轉(zhuǎn)子步驟(3. 6);(3.5)檢查窗口是否已經(jīng)到達(dá)結(jié)束點,是則轉(zhuǎn)子步驟(3.4);否則轉(zhuǎn)子步驟(3.3);(3.6)結(jié)束本輪調(diào)度,當(dāng)周期T屆滿時,轉(zhuǎn)子步驟(3.1)。
2.如權(quán)利要求1所述的虛擬CPU調(diào)度方法,其特征在于所述信息收集步驟中,使用讀寫鎖對共享內(nèi)存頁中的信息進(jìn)行保護(hù)。
全文摘要
一種虛擬CPU調(diào)度方法,屬于計算系統(tǒng)虛擬化技術(shù)領(lǐng)域,解決鎖持有者搶占問題,以提高多處理機(jī)系統(tǒng)中虛擬機(jī)的性能。本發(fā)明用于多處理機(jī)虛擬化環(huán)境,包括監(jiān)測步驟,信息收集步驟和調(diào)度步驟,監(jiān)測步驟實時監(jiān)控各虛擬機(jī)操作系統(tǒng)中的自旋鎖操作命令;信息收集步驟提取監(jiān)測步驟所得到的自旋鎖數(shù)目,并將其構(gòu)成自旋鎖計數(shù)信息;調(diào)度步驟根據(jù)從信息收集步驟提取的自旋鎖計數(shù)信息,采用公平高效的調(diào)度方法對VCPU進(jìn)行調(diào)度。與現(xiàn)有技術(shù)相比,本發(fā)明對是否處于可調(diào)度狀態(tài)的檢測更為精確,提高了PCPU的利用率,調(diào)度策略具有靈活性與可擴(kuò)展性,兼具公平性,有效解決了鎖持有者搶占問題,極大地提高了多處理機(jī)系統(tǒng)中虛擬機(jī)的性能。
文檔編號G06F9/455GK102053858SQ20101060754
公開日2011年5月11日 申請日期2010年12月28日 優(yōu)先權(quán)日2010年12月28日
發(fā)明者吳松, 石宣化, 耿瑋, 金海 申請人:華中科技大學(xué)