專利名稱:一種基于兩層虛擬機(jī)的并行作業(yè)調(diào)度的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)領(lǐng)域,具體涉及一種基于兩層虛擬機(jī)的并行作業(yè)調(diào)度的方法。
背景技術(shù):
一直以來,較低的計算資源利用率是商業(yè)數(shù)據(jù)中心所面臨的一個難題。一個商業(yè)數(shù)據(jù)中心服務(wù)器的使用率通常在10%到50%左右。如果一個商業(yè)數(shù)據(jù)中心被用于運行高性能并行程序,計算資源的使用率將更低,分析其原因,主要是在于下面兩個現(xiàn)象
1、處理器碎片一個并行作業(yè)通常需要若干個處理器來支撐運行,即使等待隊列中有作業(yè)需要處理,但因為這些空閑處理器的數(shù)量不能滿足由調(diào)度方法對指定的作業(yè)的處理器 需求,導(dǎo)致這部分處理器依然保持空閑;
2、空閑CPU時鐘周期即使一個處理器被某個作業(yè)占據(jù),由于并行程序本身進(jìn)程間的通信/同步,該處理器的使用率依然無法達(dá)到100%,例如,采用BSP編程模型的并行程序。較低的計算資源使用率提高了運行高性能程序的成本,同時降低了支撐高性能計算程序的數(shù)據(jù)中心的利潤。如何合理分配計算資源以平衡高性能計算程序的性能和計算資源的使用率是提供高性能計算資源的數(shù)據(jù)中心需要考慮的基本問題。在高性能計算領(lǐng)域,研究者們針對并行作業(yè)的調(diào)度做了很多努力?!跋鹊较确?wù)(FCFS, first come first served) ”是最基本的同時也是廣泛應(yīng)用的調(diào)度方法。由美國阿貢國家實驗室開發(fā)的“回填(EASY Backfilling)”算法在不推遲等待隊列中頭作業(yè)執(zhí)行的條件下,允許短/小作業(yè)使用當(dāng)前空閑處理器。雖然“回填”算法能夠在很大程度上減少處理器碎片的數(shù)量,但它并沒有考慮利用并行程序本身帶來CPU時鐘浪費。Gang調(diào)度方法允許多個并行作業(yè)同時共享計算資源。在Gang調(diào)度方法中,每個處理器被劃分為幾個時間片,進(jìn)程被安排到某處理器的某時間片上。一個并行作業(yè)的所有進(jìn)程安排到同一層次的時間片上,CPU循環(huán)分配到各層時間片上。這種時間分片需要操作系統(tǒng)的強力支持?!皃air-gang”調(diào)度方法考慮如何部署計算資源需求互補的進(jìn)程到一個處理器上,比如某進(jìn)程執(zhí)行I/O操作時,其配對進(jìn)程則使用CPU,類似的策略也應(yīng)用在云計算資源加固中。Gang調(diào)度可以在一定程度上提高計算資源的利用率,但是它拉長了單個作業(yè)的執(zhí)行時間?,F(xiàn)在也有綜合“回填”算法和Gang調(diào)度方法的一些嘗試,但這種嘗試僅僅提高了比較少的性能提高。
不管是“回填”算法還是Gang調(diào)度方法都僅僅考慮了如何減少處理器碎片的數(shù)量,他們都沒有考慮到并行程序本身帶來的CPU時鐘周期浪費現(xiàn)象。不管是國內(nèi)還是國外,并行作業(yè)調(diào)度方法都沒有超出“一個處理器(核)承擔(dān)一個進(jìn)程”的范疇。綜合國內(nèi)外研究現(xiàn)狀,并行作業(yè)調(diào)度方法在進(jìn)一步提高計算資源利用率方面存在很大的不足,尤其是在多核處理器機(jī)虛擬化技術(shù)高度成熟的時代?!耙粋€處理器(核)承擔(dān)一個進(jìn)程”模式導(dǎo)致了較大的計算資源浪費。
發(fā)明內(nèi)容
為了克服上述問題,本發(fā)明提出了一種基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,其利用(PU使用優(yōu)先級差別的處理器虛擬分割方法,引入了作業(yè)嘗試運行手段讓部分作業(yè)嘗試運行以提高計算資源利用率,在保證調(diào)度公平性的同時提高處理器的使用率。本發(fā)明提出的一種基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,其特征在于,把所具有的多個處理器的每一個處理器分別分成前景虛擬機(jī)和背景虛擬機(jī),所述前景虛擬機(jī)的CPU權(quán)限設(shè)置為最高優(yōu)先級,所述背景虛擬機(jī)的CPU權(quán)限設(shè)置為最低優(yōu)先級,所述方法包括
(1)當(dāng)一個新作業(yè)到達(dá)時,執(zhí)行
步驟1,將新到達(dá)的作業(yè)放到等待隊列的末尾,
步驟2,調(diào)用前景層作業(yè)調(diào)度算法將所有能安排到前景虛擬機(jī)的作業(yè)部署到前景虛擬
機(jī),
步驟3,調(diào)用背景層作業(yè)調(diào)度算法將所有能安排到背景虛擬機(jī)的作業(yè)部署到背景虛擬
機(jī);
(2)當(dāng)一個前景作業(yè)離開時,僅執(zhí)行上述步驟2和3;
(3)當(dāng)一個背景作業(yè)離開時,直接執(zhí)行步驟3;
其中所述前景層作業(yè)調(diào)度算法基于先到先服務(wù)的回填算法,并同時考慮在所述等待隊列和正在背景虛擬機(jī)中運行的作業(yè);所述背景層作業(yè)調(diào)度算法基于最短作業(yè)優(yōu)先算法。進(jìn)一步,所述把所具有的多個處理器的每一個處理器分別分成前景虛擬機(jī)和背景虛擬機(jī)具體為直接對CPU進(jìn)行邏輯劃分或者采用硬件虛擬化技術(shù)進(jìn)行劃分。進(jìn)一步,在所述前景層作業(yè)調(diào)度中,當(dāng)需要調(diào)度一個正在背景虛擬機(jī)中運行的作業(yè)往前景虛擬機(jī)運行時,當(dāng)該作業(yè)對應(yīng)的所有前景虛擬機(jī)都空閑時,對換兩層虛擬機(jī)的CPU權(quán)限,使得該作業(yè)在原處理器上繼續(xù)執(zhí)行;當(dāng)該作業(yè)對應(yīng)的部分前景虛擬機(jī)不空閑時,殺死該作業(yè)后在新處理器上重新運行該作業(yè)。進(jìn)一步,所述步驟3中的背景層作業(yè)調(diào)度算法包括
步驟31,讓集合Jobs=當(dāng)前等待隊列中的作業(yè)集合,并將Jobs中的作業(yè)按運行時間從短到長排序,讓作業(yè)J=排序后的Jobs中的第一個作業(yè);
步驟32,判斷作業(yè)J的進(jìn)程數(shù)量是否不大于當(dāng)前背景層中空閑虛擬機(jī)的數(shù)量,如果是,則轉(zhuǎn)入步驟33,否則直接轉(zhuǎn)入步驟34 ;
步驟33,調(diào)用作業(yè)部署算法將作業(yè)J部署到背景虛擬機(jī);
步驟34,如果Jobs中存在當(dāng)前作業(yè)J的下一個作業(yè),則J=下一個作業(yè),否則J=空作
業(yè);
步驟35,判斷作業(yè)J是否為空作業(yè),如果否,則轉(zhuǎn)入步驟32 ;否則,結(jié)束。進(jìn)一步,所述步驟2中的前景層作業(yè)調(diào)度算法包括
步驟21,讓集合Jobs=當(dāng)前等待隊列中作業(yè)與當(dāng)前背景層中作業(yè)的并集,讓作業(yè)J=Jobs中的第一個作業(yè);
步驟22,判斷作業(yè)J的進(jìn)程數(shù)量是否不多于當(dāng)前前景層空閑虛擬機(jī)數(shù)量,如果是,則轉(zhuǎn)入步驟221,否則轉(zhuǎn)入步驟23 ; 步驟221,調(diào)用作業(yè)部署算法將作業(yè)J部署到前景虛擬機(jī);
步驟222,如果Jobs中存在作業(yè)J的下一個作業(yè),那么讓J=下一個作業(yè),否則J=空作業(yè);
步驟223,判斷作業(yè)J是否為空作業(yè),如果是,結(jié)束;否則轉(zhuǎn)入步驟22 ;
步驟23,求陰影時刻TS和額外前景虛擬機(jī)數(shù)量EN :讓Jobs=當(dāng)前等待隊列中作業(yè)與當(dāng)前背景層中作業(yè)的并集,讓作業(yè)J=Jobs中的第一個作業(yè),讓集合JobsinFg=當(dāng)前前景層中的作業(yè)集合,將JobsinFg中的作業(yè)按預(yù)計結(jié)束時間從早到晚排序,遍歷JobsinFg中的作業(yè),收集它們將在未來釋放的虛擬機(jī)直到某未來時刻的空閑前景虛擬機(jī)數(shù)量不小于作業(yè)J的進(jìn)程數(shù)量,則所述未來時刻稱之為陰影時刻TS,若前景層在此未來時刻的空閑虛擬機(jī)數(shù)量多于作業(yè)J的進(jìn)程數(shù)量,那么多出來的數(shù)量為額外前景虛擬機(jī)數(shù)量EN ;
步驟24,判斷當(dāng)前空閑前景虛擬機(jī)數(shù)量是否不小于作業(yè)J的進(jìn)程數(shù)量且作業(yè)J能在陰影時刻TS前結(jié)束,如果是,則轉(zhuǎn)入步驟241,否則轉(zhuǎn)入步驟25 ; 步驟241,判斷作業(yè)J是否來自等待隊列,如果是,則轉(zhuǎn)入步驟244,否則轉(zhuǎn)入步驟242 ;步驟242,判斷作業(yè)J所在處理器的所有前景虛擬機(jī)是否都空閑,如果是,則轉(zhuǎn)入步驟245 ;否則,轉(zhuǎn)入步驟243 ;
步驟243,殺死該作業(yè)J ;
步驟244,調(diào)用作業(yè)部署算法將作業(yè)J部署到前景虛擬機(jī),并轉(zhuǎn)入步驟26 ;
步驟245,將作業(yè)J所在處理器的前景虛擬機(jī)和背景虛擬機(jī)的CPU權(quán)限互換,并轉(zhuǎn)入步驟26 ;
步驟25,判斷作業(yè)J的進(jìn)程數(shù)量是否既不大于當(dāng)前空閑前景虛擬機(jī)數(shù)量又不大于額外前景虛擬機(jī)數(shù)量EN,如果是,則轉(zhuǎn)入步驟242,否則轉(zhuǎn)入步驟26 ;
步驟26,如果Jobs中存在作業(yè)J的下一個作業(yè),那么讓J=下一個作業(yè),否則J=空作
業(yè);
步驟27,判斷作業(yè)J是否為空作業(yè),如果是,則結(jié)束,否則轉(zhuǎn)入步驟24。進(jìn)一步,所述作業(yè)部署算法包括
步驟41,讓作業(yè)Jl=被部署的作業(yè),讓標(biāo)識flag=作業(yè)Jl即將部署的虛擬機(jī),同時將作業(yè)Jl中的進(jìn)程按照CPU使用率降序排列;
步驟42,判斷標(biāo)識flag是否為前景層,如果是,則轉(zhuǎn)入步驟44 ;否則轉(zhuǎn)入步驟43 ;步驟43,將所有的多個背景虛擬機(jī)按其對應(yīng)的前景虛擬機(jī)的CPU使用率升序排列,然后將Jl中的進(jìn)程依次部署到排好序的背景虛擬機(jī)中,并結(jié)束流程;
步驟44,將所有的多個前景虛擬機(jī)按其對應(yīng)的背景虛擬機(jī)的CPU使用率升序排列,然后將Jl中的進(jìn)程依次部署到排好序的前景虛擬機(jī)中,并結(jié)束流程。經(jīng)過實際的計算環(huán)境測試證明了兩層虛擬機(jī)劃分架構(gòu)確實能大大提高處理機(jī)的使用率,與現(xiàn)有的并行作業(yè)調(diào)度算法相比極大地提高了調(diào)度性能,而且本發(fā)明不改變已有并行作業(yè)調(diào)度器的結(jié)構(gòu)即可實現(xiàn)。
圖I為本發(fā)明的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法中當(dāng)一個新作業(yè)到達(dá)時的處理流程圖。圖2為本發(fā)明的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法中的背景層作業(yè)調(diào)度算法的流程圖。圖3為本發(fā)明的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法中的前景層作業(yè)調(diào)度算法的流程圖。 圖4為本發(fā)明的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法中的作業(yè)部署方法的流程圖。圖5為本發(fā)明的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法中當(dāng)前景虛擬機(jī)作業(yè)離開后的處理流程圖。
具體實施例方式以下結(jié)合附圖對本發(fā)明的原理和特征進(jìn)行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。本發(fā)明提出了一種基于兩層虛擬機(jī)的并行作業(yè)調(diào)度方法,其利用并行程序內(nèi)的進(jìn)程不能完整使用一個處理器的計算能力這一普遍現(xiàn)象,將所具有的多個處理器的每一個都劃分成有CPU使用優(yōu)先級差別的兩層虛擬CPU以使得每個處理器能同時容納兩個來自不同作業(yè)的進(jìn)程;將作業(yè)嘗試運行這一技術(shù)手段引入作業(yè)調(diào)度過程;最后基于這種處理器劃分和嘗試運行對現(xiàn)有廣泛使用的并行作業(yè)調(diào)度方法進(jìn)行改進(jìn),提出了一種新的并行作業(yè)調(diào)度方法。首先,說明本發(fā)明方法主要涉及的幾個重要的技術(shù)環(huán)節(jié)
1、硬件虛擬化(可選)
將涉及到的所有計算資源通過Xen或者其它硬件虛擬化技術(shù)虛擬化成虛擬計算資源;
2、處理器的兩層有權(quán)限虛擬劃分
將每個處理器(核)虛擬化成兩個虛擬CPU,每個虛擬CPU分配到兩個不同的虛擬機(jī)中,然后將其中的一個虛擬機(jī)的CPU權(quán)限設(shè)置為最高優(yōu)先級,稱之為前景虛擬機(jī);將另外一個虛擬機(jī)的CPU權(quán)限設(shè)置為最低優(yōu)先級,稱之為背景虛擬機(jī)。這種劃分下,背景虛擬機(jī)只有在前景虛擬機(jī)沒有CPU需求時才能使用CPU?;谶@種有優(yōu)先級差別劃分后,前景虛擬機(jī)中運行的進(jìn)程性能和該進(jìn)程獨占處理器時相近(少于4%的性能下降);背景虛擬機(jī)中的進(jìn)程能最大程度上的使用前景虛擬機(jī)的剩余CPU周期從而提高計算資源的利用率;
如果數(shù)據(jù)中心不支持硬件虛擬化,那么可以對CPU進(jìn)行邏輯劃分。實際使用過程中,可以將進(jìn)程直接部署到物理CPU上面,同時通過操作系統(tǒng)的進(jìn)程權(quán)限設(shè)置來實現(xiàn)進(jìn)程間的(PU權(quán)限差別;
3、作業(yè)嘗試運行
在作業(yè)被調(diào)度到前景虛擬機(jī)運行前,嘗試先將作業(yè)安排到背景虛擬機(jī)運行,當(dāng)這種嘗試違背調(diào)度公平性時,通過殺死這些作業(yè)來捍衛(wèi)調(diào)度的公平性。作業(yè)調(diào)度算法決定什么時候由哪個作業(yè)嘗試運行。本發(fā)明的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法的基本思想為
1、使用基于先到先服務(wù)的回填算法調(diào)度作業(yè)往前景虛擬機(jī)中運行,使用最短作業(yè)優(yōu)先算法調(diào)度作業(yè)往背景虛擬機(jī)中運行;
2、前景層調(diào)度不僅考慮正在等待隊列中的作業(yè),同時也考慮正在背景虛擬機(jī)中運行的作業(yè),以保證調(diào)度的公平性;3、當(dāng)調(diào)度一個正在背景虛擬機(jī)中運行的作業(yè)往前景虛擬機(jī)運行時,有下面兩種情況當(dāng)所有該作業(yè)對應(yīng)的前景虛擬機(jī)都空閑時,對換兩層虛擬機(jī)的CPU權(quán)限,使得該作業(yè)在原處理器上繼續(xù)執(zhí)行;當(dāng)部分該作業(yè)對應(yīng)的前景虛擬機(jī)不空閑時,殺死該作業(yè)后在新處理器上重新運行該作業(yè)。因為背景虛擬機(jī)使用的是前景層剩余的免費CPU時鐘,相比單層來講,殺死該作業(yè)并不會導(dǎo)致計算資源的浪費。下面結(jié)合圖1-5具體說明基于兩層虛擬機(jī)的作業(yè)調(diào)度方法。在數(shù)據(jù)中心運營過程中,當(dāng)一個新作業(yè)到達(dá)時的處理流程如圖I所示,包括
步驟1,將新到達(dá)的作業(yè)放到等待隊列的末尾;
步驟2,調(diào)用前景層作業(yè)調(diào)度算法將所有能安排到前景虛擬機(jī)的作業(yè)部署到前景虛擬
機(jī);
步驟3,調(diào)用背景層作業(yè)調(diào)度算法將所有能安排到背景虛擬機(jī)的作業(yè)部署到背景虛擬機(jī)。圖2示出了前景層作業(yè)調(diào)度算法的流程圖。具體地,上述步驟2具體步驟包括 步驟21,讓集合Jobs=當(dāng)前等待隊列中作業(yè)與當(dāng)前背景層中作業(yè)的并集,讓作業(yè)
J=Jobs中的第一個作業(yè);
步驟22,判斷作業(yè)J的進(jìn)程數(shù)量是否不多于當(dāng)前前景層空閑虛擬機(jī)數(shù)量,如果是,則轉(zhuǎn)入步驟221,否則轉(zhuǎn)入步驟23 ;
步驟221,調(diào)用作業(yè)部署算法將作業(yè)J部署到前景虛擬機(jī);
步驟222,如果Jobs中存在作業(yè)J的下一個作業(yè),那么讓J=下一個作業(yè),否則J=空作
業(yè);
步驟223,判斷作業(yè)J是否為空作業(yè),如果是,結(jié)束;否則轉(zhuǎn)入步驟22 ;
步驟23,求陰影時刻TS和額外前景虛擬機(jī)數(shù)量EN :讓Jobs=當(dāng)前等待隊列中作業(yè)與當(dāng)前背景層中作業(yè)的并集;讓作業(yè)J=Jobs中的第一個作業(yè);讓集合JobsinFg=當(dāng)前前景層中的作業(yè)集合;將JobsinFg中的作業(yè)按預(yù)計結(jié)束時間從早到晚排序;遍歷JobsinFg中的作業(yè),收集它們將在未來釋放的虛擬機(jī),直到某未來時刻的空閑前景虛擬機(jī)數(shù)量不小于作業(yè)J的進(jìn)程數(shù)量,則所述未來時刻稱之為陰影時刻TS,若前景層在此未來時刻的空閑虛擬機(jī)數(shù)量多于作業(yè)J的進(jìn)程數(shù)量,那么多出來的數(shù)量為額外前景虛擬機(jī)數(shù)量EN ;
步驟24,判斷當(dāng)前空閑前景虛擬機(jī)數(shù)量是否不小于作業(yè)J的進(jìn)程數(shù)量且作業(yè)J能在陰影時刻TS前結(jié)束,如果是,則轉(zhuǎn)入步驟241,否則轉(zhuǎn)入步驟25 ;
步驟241,判斷作業(yè)J是否來自等待隊列,如果是,則轉(zhuǎn)入步驟244,否則轉(zhuǎn)入步驟242 ;步驟242,判斷作業(yè)J所在處理器的所有前景虛擬機(jī)是否都空閑,如果是,則轉(zhuǎn)入步驟245 ;否則,轉(zhuǎn)入步驟243 ;
步驟243,殺死該作業(yè)J ;
步驟244,調(diào)用作業(yè)部署算法將作業(yè)J部署到前景虛擬機(jī),并轉(zhuǎn)入步驟26 ;
步驟245,將作業(yè)J所在處理器的前景虛擬機(jī)和背景虛擬機(jī)的CPU權(quán)限互換,并轉(zhuǎn)入步驟26 ;
步驟25,判斷作業(yè)J的進(jìn)程數(shù)量是否既不大于當(dāng)前空閑前景虛擬機(jī)數(shù)量又不大于額外 前景虛擬機(jī)數(shù)量EN,如果是,則轉(zhuǎn)入步驟242,否則轉(zhuǎn)入步驟26 ;
步驟26,如果Jobs中存在作業(yè)J的下一個作業(yè),那么讓J=下一個作業(yè),否則J=空作業(yè);
步驟27,判斷作業(yè)J是否為空作業(yè),如果是,則結(jié)束,否則轉(zhuǎn)入步驟24。圖3示出了背景層 作業(yè)調(diào)度算法的流程圖。具體地,上述步驟3具體步驟包括 步驟31,讓集合Jobs=當(dāng)前等待隊列中的作業(yè)集合,并將Jobs中的作業(yè)按運行時間從
短到長排序,讓作業(yè)J=排序后的Jobs中的第一個作業(yè);
步驟32,判斷作業(yè)J的進(jìn)程數(shù)量是否不大于當(dāng)前背景層中空閑虛擬機(jī)的數(shù)量,如果是,則轉(zhuǎn)入步驟33,否則直接轉(zhuǎn)入步驟34 ;
步驟33,調(diào)用作業(yè)部署算法將作業(yè)J部署到背景虛擬機(jī);
步驟34,如果Jobs中存在當(dāng)前作業(yè)J的下一個作業(yè),則J=下一個作業(yè),否則J=空作
業(yè);
步驟35,判斷作業(yè)J是否為空作業(yè),如果否,則轉(zhuǎn)入步驟32 ;否則,結(jié)束。圖4示出了作業(yè)部署算法的流程圖。具體步驟如下
步驟41,讓作業(yè)J=被部署的作業(yè),讓標(biāo)識flag=作業(yè)J即將部署的虛擬機(jī)(即前景或者背景虛擬機(jī)),同時將作業(yè)J中的進(jìn)程按照其CPU使用率降序排列;
步驟42,判斷標(biāo)識flag是否為前景層,如果是,則轉(zhuǎn)入步驟44 ;否則轉(zhuǎn)入步驟43 ;步驟43,將所有的多個背景虛擬機(jī)按其對應(yīng)的前景虛擬機(jī)的CPU使用率升序排列,然后將J中的進(jìn)程依次部署到排好序的背景虛擬機(jī)中,并結(jié)束流程;
步驟44,將所有的多個前景虛擬機(jī)按其對應(yīng)的背景虛擬機(jī)的CPU使用率升序排列,然后將J中的進(jìn)程依次部署到排好序的前景虛擬機(jī)中,并結(jié)束流程。在數(shù)據(jù)中心運營過程中,當(dāng)一個前景作業(yè)離開時,按照圖5所示的流程安排所有可能的作業(yè)到前景/背景虛擬機(jī)中運行。在數(shù)據(jù)中心運營過程中,當(dāng)一個背景作業(yè)離開時,直接按照圖2所示的流程安排所有可能的作業(yè)到背景虛擬機(jī)中運行。以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種基于兩層虛擬機(jī)的并行作業(yè)調(diào)度的方法,其特征在于,把所具有的多個處理器的每ー個處理器分別分成前景虛擬機(jī)和背景虛擬機(jī),所述前景虛擬機(jī)的CPU權(quán)限設(shè)置為最高優(yōu)先級,所述背景虛擬機(jī)的CPU權(quán)限設(shè)置為最低優(yōu)先級,所述方法包括 (1)當(dāng)ー個新作業(yè)到達(dá)時,執(zhí)行 步驟1,將新到達(dá)的作業(yè)放到等待隊列的末尾, 步驟2,調(diào)用前景層作業(yè)調(diào)度算法將所有能安排到前景虛擬機(jī)的作業(yè)部署到前景虛擬機(jī), 步驟3,調(diào)用背景層作業(yè)調(diào)度算法將所有能安排到背景虛擬機(jī)的作業(yè)部署到背景虛擬機(jī); (2)當(dāng)ー個前景作業(yè)離開時,僅執(zhí)行上述步驟2和3; (3)當(dāng)ー個背景作業(yè)離開時,直接執(zhí)行步驟3; 其中所述前景層作業(yè)調(diào)度算法基于先到先服務(wù)的回填算法,并同時考慮在所述等待隊列和正在背景虛擬機(jī)中運行的作業(yè);所述背景層作業(yè)調(diào)度算法基于最短作業(yè)優(yōu)先算法。
2.根據(jù)權(quán)利要求I所述的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,所述把所具有的多個處理器的每ー個處理器分別分成前景虛擬機(jī)和背景虛擬機(jī)具體為直接對CPU進(jìn)行邏輯劃分或者采用硬件虛擬化技術(shù)進(jìn)行劃分。
3.根據(jù)權(quán)利要求I所述的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,其特征在干,在所述前景層作業(yè)調(diào)度中,當(dāng)需要調(diào)度ー個正在背景虛擬機(jī)中運行的作業(yè)往前景虛擬機(jī)運行吋,當(dāng)該作業(yè)對應(yīng)的所有前景虛擬機(jī)都空閑時,對換兩層虛擬機(jī)的CPU權(quán)限,使得該作業(yè)在原處理器上繼續(xù)執(zhí)行;當(dāng)該作業(yè)對應(yīng)的部分前景虛擬機(jī)不空閑時,殺死該作業(yè)后在新處理器上重新運行該作業(yè)。
4.根據(jù)權(quán)利要求I所述的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,所述步驟3中的背景層作業(yè)調(diào)度算法包括 步驟31,讓集合Jobs=當(dāng)前等待隊列中的作業(yè)集合,并將Jobs中的作業(yè)按運行時間從短到長排序,讓作業(yè)J=排序后的Jobs中的第一個作業(yè); 步驟32,判斷作業(yè)J的進(jìn)程數(shù)量是否不大于當(dāng)前背景層中空閑虛擬機(jī)的數(shù)量,如果是,則轉(zhuǎn)入步驟33,否則直接轉(zhuǎn)入步驟34 ; 步驟33,調(diào)用作業(yè)部署算法將作業(yè)J部署到背景虛擬機(jī); 步驟34,如果Jobs中存在當(dāng)前作業(yè)J的下一個作業(yè),則J=下一個作業(yè),否則J=空作業(yè); 步驟35,判斷作業(yè)J是否為空作業(yè),如果否,則轉(zhuǎn)入步驟32 ;否則,結(jié)束。
5.根據(jù)權(quán)利要求I所述的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,所述步驟3中的前景層作業(yè)調(diào)度算法包括 步驟21,讓集合Jobs=當(dāng)前等待隊列中作業(yè)與當(dāng)前背景層中作業(yè)的并集,讓作業(yè)J=Jobs中的第一個作業(yè); 步驟22,判斷作業(yè)J的進(jìn)程數(shù)量是否不多于當(dāng)前前景層空閑虛擬機(jī)數(shù)量,如果是,則轉(zhuǎn)入步驟221,否則轉(zhuǎn)入步驟23 ; 步驟221,調(diào)用作業(yè)部署算法將作業(yè)J部署到前景虛擬機(jī); 步驟222,如果Jobs中存在作業(yè)J的下ー個作業(yè),那么讓J=下ー個作業(yè),否則J=空作業(yè); 步驟223,判斷作業(yè)J是否為空作業(yè),如果是,結(jié)束;否則轉(zhuǎn)入步驟22 ; 步驟23,求陰影時刻TS和額外前景虛擬機(jī)數(shù)量EN :讓Jobs=當(dāng)前等待隊列中作業(yè)與當(dāng)前背景層中作業(yè)的并集,讓作業(yè)J=Jobs中的第一個作業(yè),讓集合JobsinFg=當(dāng)前前景層中的作業(yè)集合,將JobsinFg中的作業(yè)按預(yù)計結(jié)束時間從早到晚排序,遍歷JobsinFg中的作業(yè),收集它們將在未來釋放的虛擬機(jī)直到某未來時刻的空閑前景虛擬機(jī)數(shù)量不小于作業(yè)J的進(jìn)程數(shù)量,則所述未來時刻稱之為陰影時刻TS,若前景層在此未來時刻的空閑虛擬機(jī)數(shù)量多于作業(yè)J的進(jìn)程數(shù)量,那么多出來的數(shù)量為額外前景虛擬機(jī)數(shù)量EN ; 步驟24,判斷當(dāng)前空閑前景虛擬機(jī)數(shù)量是否不小于作業(yè)J的進(jìn)程數(shù)量且作業(yè)J能在陰影時刻TS前結(jié)束,如果是,則轉(zhuǎn)入步驟241,否則轉(zhuǎn)入步驟25 ; 步驟241,判斷作業(yè)J是否來自等待隊列,如果是,則轉(zhuǎn)入步驟244,否則轉(zhuǎn)入步驟242 ;步驟242,判斷作業(yè)J所在處理器的所有前景虛擬機(jī)是否都空閑,如果是,則轉(zhuǎn)入步驟.245 ;否則,轉(zhuǎn)入步驟243 ; 步驟243,殺死該作業(yè)J ; 步驟244,調(diào)用作業(yè)部署算法將作業(yè)J部署到前景虛擬機(jī),并轉(zhuǎn)入步驟26 ; 步驟245,將作業(yè)J所在處理器的前景虛擬機(jī)和背景虛擬機(jī)的CPU權(quán)限互換,并轉(zhuǎn)入步驟26 ; 步驟25,判斷作業(yè)J的進(jìn)程數(shù)量是否既不大于當(dāng)前空閑前景虛擬機(jī)數(shù)量又不大于額外前景虛擬機(jī)數(shù)量EN,如果是,則轉(zhuǎn)入步驟242,否則轉(zhuǎn)入步驟26 ; 步驟26,如果Jobs中存在作業(yè)J的下一個作業(yè),那么讓J=下一個作業(yè),否則J=空作業(yè); 步驟27,判斷作業(yè)J是否為空作業(yè),如果是,則結(jié)束,否則轉(zhuǎn)入步驟24。
6.根據(jù)權(quán)利要求1-5任一所述的基于兩層虛擬機(jī)的作業(yè)調(diào)度方法,所述作業(yè)部署算法包括 步驟41,讓作業(yè)Jl=被部署的作業(yè),讓標(biāo)識flag=作業(yè)Jl即將部署的虛擬機(jī),同時將作業(yè)Jl中的進(jìn)程按照CPU使用率降序排列; 步驟42,判斷標(biāo)識flag是否為前景層,如果是,則轉(zhuǎn)入步驟44 ;否則轉(zhuǎn)入步驟43 ;步驟43,將所有的多個背景虛擬機(jī)按其對應(yīng)的前景虛擬機(jī)的CPU使用率升序排列,然后將Jl中的進(jìn)程依次部署到排好序的背景虛擬機(jī)中,并結(jié)束流程; 步驟44,將所有的多個前景虛擬機(jī)按其對應(yīng)的背景虛擬機(jī)的CPU使用率升序排列,然后將Jl中的進(jìn)程依次部署到排好序的前景虛擬機(jī)中,并結(jié)束流程。
全文摘要
本發(fā)明提供了一種基于兩層虛擬機(jī)的并行作業(yè)調(diào)度的方法,把所具有的多個處理器的每一個處理器分別分成前景虛擬機(jī)和背景虛擬機(jī),把前景虛擬機(jī)和背景虛擬機(jī)的CPU權(quán)限分別設(shè)置為最高和最低優(yōu)先級,當(dāng)一個新作業(yè)到達(dá)時,將該作業(yè)放到等待隊列的末尾,調(diào)用前景層作業(yè)調(diào)度算法將所有能安排到前景虛擬機(jī)的作業(yè)部署到前景虛擬機(jī),調(diào)用背景層作業(yè)調(diào)度算法將所有能安排到背景虛擬機(jī)的作業(yè)部署到背景虛擬機(jī),其中前景層作業(yè)調(diào)度算法基于先到先服務(wù)的回填算法,并同時考慮在所述等待隊列和正在背景虛擬機(jī)中運行的作業(yè),背景層作業(yè)調(diào)度算法基于最短作業(yè)優(yōu)先算法。本發(fā)明的方案無須改變已有并行作業(yè)調(diào)度器的結(jié)構(gòu),大大提高了處理機(jī)的使用率和調(diào)度性能。
文檔編號G06F9/455GK102662636SQ20121008399
公開日2012年9月12日 申請日期2012年3月27日 優(yōu)先權(quán)日2012年3月27日
發(fā)明者張柯 申請人:北京華如科技股份有限公司