基于虛擬機當前工作性質以及任務負載的虛擬機調度算法
【技術領域】
[0001] 本發明涉及系統虛擬化、虛擬機中斷檢測、虛擬機CPU使用率檢測和虛擬機調度 器設計領域。具體地,涉及基于虛擬機當前工作性質以及任務負載的虛擬機調度算法,用于 解決由虛擬機調度器設計缺陷引起的I/O響應延遲、無法動態適應虛擬機負載變化以及1/ O性能較低的問題。
【背景技術】
[0002] 虛擬化技術已經以各種不同的形式存在了 50多年。抽象的說,虛擬化是各種可用 資源的邏輯表示,可以不受物理條件的限制。具體一點就是,虛擬化技術在系統中添加了一 層虛擬化層,能夠把下層的物理資源抽象成虛擬資源,供上層的應用使用。它既可以從單個 物理資源中劃分出多個虛擬資源,也可以把多個物理資源整合成一個虛擬資源。
[0003] 虛擬機監控器(Virtual Machine Monitor,VMM)是虛擬化技術中最重要的一部 分。它處于硬件層和虛擬機之間,運行在最高的特權級別。它的主要功能是抽象底層硬件 資源,使之成為虛擬資源,并提供給上層創建的虛擬機使用。虛擬機監控器的主要功能包括 虛擬環境的管理和物理資源的管理。
[0004] 目前業界主流的虛擬機監控器包括Xen、KVM、VirtualBox、Hyper_V、VMware等等。 其中Xen作為主流的開源虛擬機監控器,在實際應用以及學術研宄中占有很重要的地位。 Xen默認的調度算法為信用值調度算法(Credit Scheduler)。信用值調度算法把分配的時 間視為信用值,在每個信用值分配周期會為所有VCPU分配信用值,VCPU每運行一段時間就 會扣除與其運行時間相對應的信用值,信用值小于0后在這個調度周期內便不再運行。
[0005] 由于虛擬機監控器的引入,原本在傳統操作系統中已經解決的問題會出現新的變 化,同時還會出現一些傳統操作系統中不會出現的問題。其中一個很重要的問題就是I/O 響應延遲的問題。在傳統操作系統中,當一個I/O請求來臨時,操作系統會感知到這個請 求,并調度他的接收者,使其搶占當前運行的進程,處理I/O請求,從而使得I/O請求的延遲 變小。然而在虛擬化環境中,所有的I/O請求會由虛擬機監控器接收,然后轉發給對應的虛 擬機,操作系統無法感知到具體哪個虛擬機是I/O請求的接收者,因此無法進行搶占。當幾 個虛擬機共享一個物理CPU的時候,一個虛擬機就不得不等待其他的虛擬機使用完分配給 他們的時間之后才能處理自己的I/O請求。當有很多虛擬機共享同一個物理CPU的時候, 延遲會變得非常高,這么高的延遲對于一個I/O密集型的虛擬機來說是不可接受的。
[0006] 傳統的調度器把調度的公平性放在第一位,把I/O任務和CPU任務等同對待,會導 致I/O任務效率低下。為了解決I/O效率低下的問題,學術界提出了多種優化方法,將I/O 任務與CPU任務區別對待,但是比較極端的把虛擬機分成兩類:純I/O操作和純CPU計算, 并沒有考慮分配給I/O請求足夠的CPU時間去處理,沒有考慮混合型的虛擬機,因此也會影 響I/O任務的效率。另一方面,以往的部分研宄中虛擬機的類型只能在系統啟動時手動指 定,一個I/O密集型的虛擬機在系統運行時也可能會改變成為CPU密集型,當一個沒有被標 注為I/O密集型的虛擬機接收到大量I/O請求時,調度器無法改變調度時間片,使得I/O響 應的延遲無法降低。因此這些方法在實際的系統當中有局限性。
[0007] 綜上所述,傳統的調度器中存在著I/O響應延遲較大的問題,現有的研宄提出的 方法雖然能在一定程度上減少延遲,但是不能適應虛擬機負載動態的變化并且沒有考慮為 I/O請求提供充足的時間進行處理,同樣也會影響I/O請求的性能。因此,本領域的技術人 員致力于開發一種基于虛擬機當前工作性質以及任務負載的虛擬機調度算法,解決這一問 題。
【發明內容】
[0008] 有鑒于現有技術的上述缺陷,本發明所要解決的技術問題是提供基于虛擬機當前 工作性質以及任務負載的虛擬機調度算法,在保證I/O請求能夠被及時響應的同時,又有 足夠的CPU時間用于處理I/O請求,權衡時間片的大小,使I/O性能最大化,在提升I/O性 能的同時,又對CPU密集型的虛擬機帶來最少的額外開銷。
[0009] 為實現上述目的,本發明提供了基于虛擬機當前工作性質以及任務負載的虛擬機 調度算法,該算法包含了中斷監控模塊,CPU監控模塊和調度器模塊這三個模塊:
[0010] 中斷監控模塊運行在虛擬機監控器中,從事件通道獲取虛擬機接收的中斷請求。 根據中斷請求攜帶的信息,識別出包括domainU發送請求,domainU接收請求,domainO發送 回復,domainO接收回復等操作在內的I/O操作,監控所有虛擬機的中斷頻率,用于判斷各 個虛擬機的工作性質是CPU密集型還是I/O密集型。
[0011] CPU監控模塊運行在虛擬機監控器中,監控虛擬機CPU的忙閑比,并計算出CPU使 用率,根據虛擬機的CPU使用率計算出虛擬機所需的調度時間片。在計算時間片時,CPU監 控模塊會把CPU利用率從0%到100%映射到時間片的Ims到20ms區間內,為了保持時間 片的變化的穩定,減少性能的顛簸,只有在連續幾個周期CPU使用率都處于某個范圍的時 候才會修改時間片大小。該模塊在計算CPU使用率時利用了老化算法,將一定時間范圍內 的歷史信息結合到當前的信息中進行計算。
[0012] 調度器模塊在CREDIT調度器的基礎上進行修改,修改調度器的數據結構使之能 夠存儲中斷監控模塊和CPU監控模塊所反饋的信息。調度器算法中會維護兩個隊列,分別 稱之為A隊列和B隊列。根據中斷監控模塊反饋的信息,將不同工作性質的虛擬機放到不 同的隊列中。CPU密集型的虛擬機存放在A隊列中,I/O密集型的虛擬機存放在B隊列中, 在每個調度周期開始時,調度器會選取其中一個隊列的隊首元素作為下一個要運行的虛擬 機,具體的選取方法如下:
[0013] 步驟1、首先從B隊列選取隊首作為下一個要運行的虛擬機,然后將現在調度結束 的虛擬機插入與其工作性質類型相對應的隊列的隊尾。
[0014] 步驟2、直到B隊列中所有的虛擬機都運行過一次或者B隊列為空之后,挑選A隊 列的隊首作為下一個要運行的虛擬機。
[0015] 步驟3、重復步驟1和2,直到所有虛擬機用完了它們在這個周期所分配的時間片。
[0016] 步驟4、重新分配信用值和時間片,回到步驟1。
[0017] 在獲取了下一個要運行的虛擬機之后,調度函數會從domain結構中取出中斷監 控模塊和CPU監控模塊更新的信息,根據中斷監控模塊的信息對不同類型的虛擬機應用不 同的調度策略。根據CPU監控模塊的信息,獲得不同的時間片大小,并用這個時間片來設置 計時器,進行虛擬機的調度。
[0018] 基于虛擬機當前工作性質以及任務負載的虛擬機調度算法具有以下有益的技術 效果:
[0019] (1)中斷監控模塊會監控事件通道內的所有事件,截獲domainO和domainU之間的 通信事件,統計各個虛擬機的中斷頻率,用作區分虛擬機類型的依據。該模塊提供了虛擬機 工作性質的信息,將虛擬機劃分為I/O密集型和CPU密集型兩種類型,調度器會根據不同的 類型應用不同的調度算法。CPU密集型的虛擬機采用默認的Credit調度算法,I/O密集型 的虛擬機采用本發明提供的調度算法。
[0020] ⑵CPU監控模塊會統計一定時間周期內虛擬機的忙閑次數,用忙次數與總調度次 數之間的比值作為虛擬機的CPU使用率。根據監測出的CPU使用率計算對于I/O密集型虛 擬機采用的調度算法所需的時間片。在時間片的計算中采用了線性映射,避免了時間片的 顛簸,還采用了老化算法,讓一定時間范圍內的CPU使用率對當前周期內的時間片計算提 供信息,使計算更加準確。
[0021] (3)調度器模塊在原有的Credit調度器上進行修改,在一個調度周期內讓CPU密 集型虛擬機運行較大的時間片,讓I/O密集型虛擬機運行多個較小的時間片,同時優先調 度I/O密集型虛擬機,盡量減少I/O響應的延遲。I/O密集型的虛擬機所需的時間片由CPU 監控模塊計算得來,盡量保證有足夠的時間來處理I/O請求,進一步提升I/O性能。另一方 面,所有虛擬機在一個調度周期內獲得的時間片是相等的,保證了調度的公平性。<