王強,董小社,王恩東,朱正東
(1.西安交通大學(xué)電子信息與工程學(xué)院,710049,西安; 2.浪潮集團有限公司高效能服務(wù)器和存儲技術(shù)國家重點實驗室,250013,濟南)
?
基于I/O受限進程識別的虛擬處理器調(diào)度機制
王強1,董小社1,王恩東2,朱正東1
(1.西安交通大學(xué)電子信息與工程學(xué)院,710049,西安; 2.浪潮集團有限公司高效能服務(wù)器和存儲技術(shù)國家重點實驗室,250013,濟南)
針對多核平臺的虛擬化環(huán)境中客戶機與虛擬機管理器(virtual machine monitor, VMM)之間語義縫隙造成客戶機I/O性能下降的問題,提出了一種基于I/O受限進程識別的虛擬處理器(virtual CPU, vCPU)調(diào)度機制。該機制在客戶機內(nèi)部利用推斷技術(shù)識別I/O受限進程,通過客戶機與VMM的協(xié)作實現(xiàn)I/O事件與I/O受限進程的關(guān)聯(lián),利用保證客戶機之間公平性的虛擬對稱多核處理器(virtual symmetric multi-core processor, vSMP) Internal調(diào)度算法,優(yōu)先調(diào)度與I/O事件關(guān)聯(lián)的I/O受限進程所在的vCPU來橋接客戶機與VMM之間的語義縫隙,提高擁有vSMP的客戶機中I/O負(fù)載性能。測試結(jié)果表明,相比于KVM虛擬化環(huán)境的CFS調(diào)度機制,該機制可以在保證客戶機CPU公平性的前提下,有效提升運行混合負(fù)載的vSMP客戶機中I/O負(fù)載性能,同時只增加較小的客戶機額外開銷,可以應(yīng)用在負(fù)載多樣性和不可預(yù)測性的虛擬桌面和云計算環(huán)境中。
虛擬化;虛擬機管理器;虛擬處理器調(diào)度;I/O受限進程
云計算是推動IT轉(zhuǎn)向以業(yè)務(wù)為中心模式的一次重大變革,云平臺可以通過互聯(lián)網(wǎng)為用戶提供按需動態(tài)擴展的基礎(chǔ)架構(gòu)服務(wù)。虛擬化是構(gòu)建云基礎(chǔ)架構(gòu)不可或缺的關(guān)鍵技術(shù)之一,可以使得多個客戶機能同時安全相互隔離地運行在同一臺物理機器上。虛擬化在資源的有效利用、動態(tài)調(diào)配和高可靠性方面存在著巨大優(yōu)勢,同時多核處理器的日益廣泛應(yīng)用擴大了虛擬化技術(shù)的優(yōu)勢。使用多核處理器為平臺的虛擬機系統(tǒng)導(dǎo)致客戶機操作系統(tǒng)與虛擬機管理器(virtual machine monitor,VMM)構(gòu)成兩級調(diào)度框架[1]。兩級調(diào)度實體使用各自的調(diào)度策略和機制,相互之間缺少協(xié)同合作,導(dǎo)致客戶機與VMM之間存在語義縫隙[2]。在客戶機聚合的環(huán)境中,語義縫隙問題妨礙了VMM有效地為每個客戶機分配所需資源。特別地,對于擁有虛擬對稱多核處理器(virtual symmetric multi-core processor, vSMP)的客戶機,VMM給vSMP客戶機分配多個具有相同計算能力的虛擬處理器(virtual CPU, vCPU)。vSMP客戶機操作系統(tǒng)為了提高客戶機I/O受限進程的性能,優(yōu)先將I/O受限進程調(diào)度到vCPU中運行,然而VMM缺乏對vSMP客戶機vCPU內(nèi)部I/O進程的感知,僅僅是簡單地調(diào)度vSMP客戶機的多個vCPU分時共享物理計算資源,無法優(yōu)先調(diào)度運行客戶機I/O負(fù)載的vCPU。在虛擬桌面以及云計算環(huán)境中,客戶機配備多個vCPU同時運行I/O和CPU混合負(fù)載來充分利用底層物理處理器不斷增長的計算能力[3]。同時,在虛擬桌面以及云計算環(huán)境中負(fù)載一般是多樣性和不可預(yù)測性的[4],這種缺少協(xié)同合作的兩級調(diào)度實體會導(dǎo)致虛擬桌面以及云計算環(huán)境中的vSMP客戶機I/O性能嚴(yán)重下降。
目前已有研究主要從vCPU調(diào)度的角度解決語義縫隙導(dǎo)致的問題。Kim等對Xen的Credit調(diào)度器[5]boosting調(diào)度機制進行改進,提出了Partial bosting機制[6]。Partial bosting機制中一旦有I/O受限進程對應(yīng)的I/O事件到來,立即調(diào)度對應(yīng)的vCPU到物理CPU上運行,I/O受限進程處理完I/O事件之后將該vCPU調(diào)度出物理CPU。Partial bosting可以在保證公平性的前提下,提高混合負(fù)載情況下客戶機I/O受限進程的性能,但是該機制基于單核物理平臺下實現(xiàn),沒有考慮vCPU的遷移和同步問題,同時只適用于單個vCPU的客戶機,不能擴展到客戶機多vCPU的環(huán)境中,并且客戶機I/O負(fù)載的識別機制不適用于最新的硬件輔助MMU虛擬化技術(shù)[7-8]。為了適用多核物理平臺多vCPU環(huán)境,Kim等提出了vAMP機制[9],該機制根據(jù)vCPU中運行負(fù)載動態(tài)調(diào)整一個客戶機中各vCPU運行時間占客戶機總運行時間的比例,運行時間比例大的vCPU稱為快速vCPU,更容易被VMM調(diào)度運行。通過在VMM和客戶機中添加擴展使得客戶機中與用戶交互的負(fù)載運行在快速vCPU中,來改善交互負(fù)載的性能。vTurbo[10]和vBalance[11]從降低客戶機I/O中斷處理的延遲入手來解決語義縫隙導(dǎo)致的客戶機I/O性能下降問題。二者都沒有考慮客戶機I/O進程所在vCPU的調(diào)度延遲而導(dǎo)致I/O性能下降的問題。
針對運行混合負(fù)載的vSMP客戶機中I/O受限進程性能下降問題,提出了一種基于I/O受限進程識別的vCPU調(diào)度機制。該方法在客戶機內(nèi)部識別I/O受限進程,通過VMM與客戶機合作實現(xiàn)I/O事件與I/O受限進程關(guān)聯(lián),以優(yōu)先運行與I/O事件關(guān)聯(lián)的I/O受限進程所在的vCPU,可以有效提升運行混合負(fù)載的vSMP客戶機中I/O負(fù)載性能。
為了在混合負(fù)載中識別客戶機I/O受限進程,在客戶機內(nèi)部加載一個半虛擬化驅(qū)動程序[12]跟蹤客戶機進程運行,利用推斷技術(shù)識別I/O受限進程。在I/O受限進程識別的基礎(chǔ)上,vSMP Internal調(diào)度算法對客戶機內(nèi)部vCPU進行分類,當(dāng)與I/O受限進程關(guān)聯(lián)的I/O事件到來后,通過對不同類別vCPU之間物理CPU資源的切換提高I/O受限進程的性能。
首先闡述客戶機I/O受限進程的識別方法,然后在此基礎(chǔ)上描述vSMP Internal調(diào)度算法以及I/O事件與I/O受限進程的關(guān)聯(lián)方法。
1.1 I/O受限進程識別
VMM缺乏客戶機負(fù)載的認(rèn)知導(dǎo)致VMM調(diào)度vCPU的困難,所以客戶機進程的識別技術(shù)是實現(xiàn)有效vCPU調(diào)度機制的前提。識別I/O受限進程比較直接的方法是客戶機操作系統(tǒng)將I/O受限進程的信息通過超調(diào)用發(fā)送給VMM。另外一種比較常見的技術(shù)是推斷技術(shù),在VMM層獲得客戶機進程信息,根據(jù)進程信息來推斷進程類型。超調(diào)用的引入需要修改客戶機操作系統(tǒng),同時頻繁的超調(diào)用會增加性能開銷。VMM層的推斷技術(shù)不用修改客戶機操作系統(tǒng),對客戶機透明并且可擴展性強。然而,VMM只能對有限的客戶機I/O操作以及特權(quán)指令進行監(jiān)控[13],難以獲得有助于識別進程類型的詳細(xì)信息,不能準(zhǔn)確地識別I/O受限進程。I/O受限進程的識別作為vCPU調(diào)度的基礎(chǔ),錯誤的識別不但不會改善I/O性能,反而會導(dǎo)致系統(tǒng)性能的嚴(yán)重下降。
綜合以上兩種方法,本文提出一種在客戶機內(nèi)部識別I/O受限進程的方法。該方法為客戶機操作系統(tǒng)加載一個半虛擬化驅(qū)動程序,驅(qū)動程序跟蹤進程的運行,利用推斷技術(shù)識別客戶機I/O受限進程。驅(qū)動程序通過內(nèi)存映射的方式與VMM共享I/O受限進程的信息。驅(qū)動程序根據(jù)I/O受限進程如下兩個特點來推斷I/O受限進程:①I/O受限進程大部分時間是等待設(shè)備完成I/O請求,消耗很少的CPU時間;②I/O受限進程因為I/O請求不能立即完成而被阻塞,主動調(diào)用進程調(diào)度程序來釋放CPU資源。驅(qū)動程序監(jiān)控操作系統(tǒng)進程調(diào)度程序的運行,根據(jù)調(diào)用進程調(diào)度函數(shù)的進程是否滿足以上特點作為判斷I/O受限進程的依據(jù)。客戶機加載驅(qū)動程序的方式避免了對客戶機操作系統(tǒng)內(nèi)核的修改,同時利用內(nèi)存映射的方式共享信息相比超調(diào)用減少開銷。驅(qū)動程序通過監(jiān)控客戶機進程的運行來獲得進程詳細(xì)的信息,可以準(zhǔn)確地識別I/O受限進程。
1.2 vSMP Internal調(diào)度算法
在vSMP Internal調(diào)度算法中,將vSMP客戶機中的vCPU分為以下3類:①處理I/O中斷的vCPU(簡稱Intr-vCPU);②運行I/O受限進程的vCPU(簡稱IO-vCPU);③不處理I/O中斷,也沒有運行I/O受限進程的vCPU(簡稱Victim-vCPU)。在傳統(tǒng)調(diào)度方法下,客戶機I/O請求的處理過程如圖1所示。T1時刻IO-vCPU中的I/O受限進程對設(shè)備發(fā)出請求,該請求最終被發(fā)送給I/O thread進行異步處理。T2時刻I/O thread完成I/O請求并通知Main thread。T3時刻Main thread生成虛擬設(shè)備中斷并掛起到Intr-vCPU中,通知I/O請求完成。T4時刻Intr-vCPU得到運行機會,調(diào)用中斷處理程序處理中斷,并在T5時刻通知IO-vCPU中I/O受限進程請求數(shù)據(jù)到來。T6時刻IO-vCPU得到運行機會,調(diào)度I/O受限進程處理請求的數(shù)據(jù),完成此次I/O請求。
圖1 混合負(fù)載中vCPU處理I/O請求過程
顯然如下兩方面延遲因素影響I/O受限進程的性能:①I/O事件對應(yīng)的虛擬I/O中斷到達Intr-vCPU后到Intr-vCPU開始運行中斷處理程序之間的延遲(T3-T4);②Intr-vCPU處理完虛擬I/O中斷后到IO-vCPU中I/O受限進程開始運行之間的延遲(T5-T6)。這兩種延遲導(dǎo)致I/O受限進程等待時間增多,影響I/O受限進程的響應(yīng)時間和吞吐率。單一負(fù)載情況下,Intr-vCPU以及IO-vCPU經(jīng)常處于空閑狀態(tài),VMM會優(yōu)先調(diào)度Intr-vCPU和IO-vCPU運行。在混合負(fù)載的情況下,Intr-vCPU和IO-vCPU中的CPU受限進程消耗掉VMM分配給它們的CPU資源,導(dǎo)致VMM調(diào)度其他進程搶占Intr-vCPU和IO-vCPU。
圖2 vSMP Internal調(diào)度過程
為了減少混合負(fù)載情況下這兩種延遲,當(dāng)I/O事件到來后,需要給Intr-vCPU和IO-vCPU更多的運行機會。vSMP Internal調(diào)度算法過程如圖2所示,當(dāng)I/O事件對應(yīng)的虛擬I/O中斷掛起到Intr-vCPU后,如果Intr-vCPU沒有在物理CPU上運行或者在很長的一段時間之后才會運行,則立即調(diào)度Intr-vCPU來完成虛擬I/O中斷處理,以減少第一種延遲。同時,在Intr-vCPU完成虛擬I/O中斷處理之后,為了減少第二種延遲也要立即調(diào)度IO-vCPU運行,I/O受限進程才能處理數(shù)據(jù)并完成I/O請求。為了保證整個系統(tǒng)的公平性,vSMP Internal調(diào)度算法犧牲vSMP客戶機中Victim-vCPU的運行機會,Intr-vCPU和IO-vCPU通過搶占Victim-vCPU的運行時間來立即調(diào)度到物理CPU上運行。這樣當(dāng)I/O事件到來后能夠及時調(diào)度這兩種vCPU運行,提高I/O受限進程的響應(yīng)性能和吞吐率。
1.3 I/O事件與I/O受限進程的關(guān)聯(lián)方法
vSMP Internal算法中為了提高客戶機I/O負(fù)載性能,每當(dāng)有I/O事件到達vCPU時,就強制調(diào)度對應(yīng)的Intr-vCPU和IO-vCPU運行,但是由于某些非I/O受限進程也會執(zhí)行I/O請求,即并不是每個I/O事件對應(yīng)的進程都是I/O受限進程。這可能導(dǎo)致對非I/O受限進程對應(yīng)的I/O事件做出錯誤的響應(yīng),影響真正需要改善的I/O受限進程的性能以及系統(tǒng)公平性。因此,為了獲得低的響應(yīng)延遲以及整個系統(tǒng)的公平性,需要實現(xiàn)I/O事件與I/O受限進程的關(guān)聯(lián)。
設(shè)I/O事件集合為集合A,I/O受限進程集合為集合C,A和C為兩個非空集合。為了實現(xiàn)I/O事件與I/O受限進程的關(guān)聯(lián),需要滿足?a∈A,存在唯一的c∈C,使得(a,c)∈h,那么h為從A到C的函數(shù),記為h:A→C,由此問題轉(zhuǎn)化為求從A到C的函數(shù)h。語義縫隙的問題導(dǎo)致VMM無法獲得客戶機內(nèi)部進程的詳細(xì)信息,所以無法在VMM中直接實現(xiàn)關(guān)聯(lián)函數(shù)h。但是,如果存在一個媒介集合B,并且可以找到兩個函數(shù)f和g,使得f是從A到B的函數(shù)(記為f:A→B),g是從B到C的函數(shù)(記為g:B→C),那么,復(fù)合關(guān)系f°g就是從A到C的函數(shù)(記為g°f)。因此,為了得到h:A→C,需要找到媒介集合B,并且實現(xiàn)f:A→B以及g:B→C,如圖3所示。
圖3 I/O事件與I/O受限進程關(guān)聯(lián)
媒介集合的選取是實現(xiàn)關(guān)聯(lián)的基礎(chǔ),不同類型的設(shè)備需要選取不同的媒介集合來實現(xiàn)該類型設(shè)備發(fā)出的I/O事件與訪問該設(shè)備的I/O受限進程之間的關(guān)聯(lián)。設(shè)備模擬程序負(fù)責(zé)完成客戶機I/O請求并產(chǎn)生I/O事件,因此可以很容易地在VMM層實現(xiàn)函數(shù)f??蛻魴C可以通過監(jiān)控I/O受限進程與I/O設(shè)備的交互來實現(xiàn)函數(shù)g。這種VMM與客戶機合作的方法,可以有效地實現(xiàn)I/O事件與I/O受限進程的關(guān)聯(lián)。
本節(jié)講述基于I/O受限進程識別的vCPU調(diào)度機制在KVM(Kernel-based Virtual Machine)[14]虛擬化環(huán)境中的具體實現(xiàn)。宿主機與客戶機操作系統(tǒng)均為Centos 5.8,內(nèi)核版本3.10.21。KVM版本為kvm-kmod-3.10.21,模擬處理器的自由軟件QEMU版本為qemu-1.2.0。
圖4 vSMP Internal調(diào)度系統(tǒng)框圖
圖4為系統(tǒng)的結(jié)構(gòu)框圖,IO-Track是客戶機操作系統(tǒng)中一個動態(tài)可加載模塊,負(fù)責(zé)維護IOHash表、BlockHash表以及NetHash表。IO-Track使用IOHash表實現(xiàn)I/O受限進程的識別,同時使用BlockHash表以及NetHash表實現(xiàn)媒介集合到I/O受限進程集合的函數(shù)g;QEMU中的后端驅(qū)動程序?qū)崿F(xiàn)I/O事件集合到媒介集合的函數(shù)f。vSMP Internal利用CFS的相關(guān)特性通過對客戶機vCPU的切換來提高客戶機中I/O受限進程的性能。
2.1 I/O受限進程識別
為了管理客戶機內(nèi)I/O受限進程信息,IO-Track為每個客戶機維護一個I/O受限進程哈希表(IOHash)。IOHash表以進程標(biāo)識符(PID)作為鍵值,表項為io_info結(jié)構(gòu)體,該結(jié)構(gòu)體記錄了I/O受限進程的PID以及所屬vCPU的標(biāo)識符(vCPUID)。IO-Track利用kprobe[15]內(nèi)核探測機制在內(nèi)核進程調(diào)度函數(shù)asmlinkage void_sched schedule(void)的入口插入kprobe類型的探測點。探測點函數(shù)如算法1所示,根據(jù)當(dāng)前進程是否滿足I/O受限進程的特點來識別I/O受限進程。
算法1 識別I/O受限進程
輸入 進程描述符Task,哈希表IOHash
function KprobeSchedule
Threshold←Hz/2
io_info←HashFind(Task.pid,IOHash)
if Task.state=WaitState and Task.runtime if io_info≠NIL then io_info.vcpuid=Task.cpuid else io_info←Create(Task.pid,IOHash) HashAdd(Task.pid,IOHash,io_info) end if else if io_info≠NIL then 考慮邊界條件:在錨固段起始端P(z)|z=0=P,錨固段尾端P(z)|z=Lb=0,結(jié)合式(2)可得張拉載荷為P時,錨桿錨固段任何位置的軸力大小P(z)為 HashDel(Task.pid,IOHash) end if end function 如果進程處于等待狀態(tài),說明進程是因不能獲得必須的資源而主動調(diào)用進程調(diào)度函數(shù)來釋放CPU資源。Threshold代表I/O受限進程運行時間的閾值,I/O受限進程由于頻繁地發(fā)出I/O請求并等待請求的完成,所以運行時間一般小于Threshold。由于某些進程只在一段時間內(nèi)頻繁地請求I/O,所以探測點函數(shù)需要更新IOHash表,將不再滿足I/O受限進程特點的進程從IOHash表中刪除。 2.2 I/O事件與I/O受限進程的關(guān)聯(lián) 本節(jié)描述客戶機與QEMU后端驅(qū)動程序合作實現(xiàn)塊設(shè)備讀和網(wǎng)絡(luò)數(shù)據(jù)包接收這兩類對延遲敏感的I/O事件與I/O受限進程的關(guān)聯(lián)。 2.2.1 塊設(shè)備讀 一個塊設(shè)備的I/O中斷唯一對應(yīng)一個磁盤存儲區(qū)標(biāo)識符,且由于高速緩存的存在,不會出現(xiàn)兩個I/O受限進程對同一個磁盤存儲區(qū)標(biāo)識符發(fā)起讀請求操作。因此,一個磁盤存儲區(qū)標(biāo)識符也唯一對應(yīng)一個I/O受限進程,磁盤存儲區(qū)標(biāo)識符集合可以作為塊設(shè)備的I/O事件集合與對塊設(shè)備進行讀操作的I/O受限進程集合的媒介集合。 在虛擬化環(huán)境中,I/O事件對應(yīng)的是后端驅(qū)動程序發(fā)送給vCPU的虛擬中斷。為了實現(xiàn)I/O事件集合到磁盤存儲區(qū)標(biāo)識符集合的函數(shù)f:A→B,修改塊設(shè)備后端驅(qū)動的中斷注入函數(shù),將虛擬中斷對應(yīng)的磁盤存儲區(qū)標(biāo)識符信息與虛擬中斷一起發(fā)送給VMM。 IO-Track為每個客戶機維護了一個BlockHash表,VMM通過內(nèi)存映射的方式訪問每個客戶機BlockHash表。哈希表項為block_info結(jié)構(gòu),包含起始扇區(qū)號、扇區(qū)數(shù)和塊設(shè)備I/O受限進程所在vCPU標(biāo)識符(vCPUID),BlockHash表以塊請求的起始扇區(qū)號作為鍵值。BlockHash表實現(xiàn)磁盤存儲區(qū)標(biāo)識符集合到I/O受限進程集合的函數(shù)g:B→C。IO-Track利用kprobe內(nèi)核探測機制,對內(nèi)核函數(shù)void blk_queue_bio(struct request_queue *q,struct bio *bio)添加jprobe探測點,根據(jù)函數(shù)的參數(shù)bio結(jié)構(gòu)體獲得此次I/O請求的磁盤存儲區(qū)標(biāo)識符。探測點函數(shù)根據(jù)bio結(jié)構(gòu)體的bi_rw字段判斷是否是來自文件系統(tǒng)的塊設(shè)備讀請求,通過IOHash表判斷發(fā)出請求的進程是否為I/O受限進程,如果當(dāng)前進程為I/O受限進程,構(gòu)建block_info結(jié)構(gòu)并插入到BlockHash表中。 2.2.2 網(wǎng)絡(luò)數(shù)據(jù)包接收 每個網(wǎng)絡(luò)數(shù)據(jù)包到來的I/O事件唯一地對應(yīng)一個(傳輸層協(xié)議,目的端口號)二元組,對于同一個IP地址的機器,該二元組對應(yīng)一個唯一網(wǎng)絡(luò)I/O受限進程,所以該二元組集合可以作為網(wǎng)絡(luò)數(shù)據(jù)I/O事件集合與網(wǎng)絡(luò)數(shù)據(jù)包接收進程集合的媒介集合。 在虛擬化環(huán)境中,網(wǎng)絡(luò)數(shù)據(jù)包到達的I/O事件對應(yīng)的是網(wǎng)絡(luò)設(shè)備后端驅(qū)動程序發(fā)送給vCPU的虛擬中斷,網(wǎng)絡(luò)設(shè)備后端驅(qū)動程序根據(jù)接收到的網(wǎng)絡(luò)數(shù)據(jù)包的包頭獲得使用的傳輸層協(xié)議和目的端口號。為了實現(xiàn)網(wǎng)路數(shù)據(jù)包I/O事件集合到兩元組集合的函數(shù)f:A→B,需要修改網(wǎng)絡(luò)設(shè)備后端驅(qū)動的中斷注入函數(shù),將數(shù)據(jù)包對應(yīng)的傳輸層協(xié)議和目的端口號與虛擬中斷一起發(fā)送給VMM。 IO-Track為每個客戶機維護了一個以端口號為鍵值的NetHash表,VMM通過內(nèi)存映射方式訪問每個客戶機NetHash表。哈希表項為net_info結(jié)構(gòu),包含傳輸層協(xié)議(protocol)、端口號(port)以及網(wǎng)絡(luò)I/O受限進程所在vCPU的標(biāo)識符(vCPUID)。NetHash表實現(xiàn)(傳輸層協(xié)議,端口號)兩元組集合到網(wǎng)絡(luò)數(shù)據(jù)包接收I/O受限進程集合的函數(shù)f:B→C。TCP協(xié)議的服務(wù)器程序調(diào)用內(nèi)核函數(shù)struct sock *inet_csk_accept(struct sock *sk,int flags,int *err)監(jiān)聽來自客戶端的連接請求。TCP和UDP協(xié)議的服務(wù)器程序統(tǒng)一調(diào)用內(nèi)核函數(shù)int sock_recvmsg(struct socket *sock,struct msghdr *msg,size_t size,int flags)接收客戶端數(shù)據(jù)。IO-Track模塊利用kprobe內(nèi)核探測機制對以上兩個函數(shù)添加jprobe探測點,探測點函數(shù)首先通過IOHash判斷當(dāng)前進程是否為I/O受限進程,如果當(dāng)前進程為I/O受限進程,根據(jù)sock結(jié)構(gòu)體獲得傳輸層協(xié)議以及端口號,構(gòu)建net_info結(jié)構(gòu)并插入到NetHash表中。 2.3 vSMP Internal調(diào)度 本節(jié)主要描述vSMP Internal調(diào)度流程,以及如何利用CFS特性實現(xiàn)指定vCPU之間的切換。 2.3.1 vSMP Internal調(diào)度流程 當(dāng)I/O事件對應(yīng)的虛擬I/O中斷掛起到vCPU時,VMM利用I/O事件與I/O受限進程的關(guān)聯(lián)方法判斷是否啟動如算法2所示的vSMP Internal調(diào)度。 算法2 vSMP Internal調(diào)度 輸入 intr_vcpu,io_vcpu function vSMPInternal(intr_vcpu,io_vcpu) if intr_vcpu.preempted=True then vic_vcpu←VictimFind(intr_vcpu.pcpu) vCPUSwitch(intr_vcpu,vic_vcpu) end if if io_vcpu≠intr_vcpu and io_vcpu.preempted=True then vic_vcpu←VictimFind(io_vcpu.pcpu) vCPUSwitch(io_vcpu,vic_vcpu) end if end function vSMP Internal調(diào)用VictimFind時,將Intr-vCPU或IO-vCPU的所在物理CPU的ID(pcpu)作為參數(shù)傳遞給VictimFind,使得VictimFind盡量查找位于pcpu的Victim-vCPU,防止vCPUSwitch影響其他客戶機的運行。同時,為了防止某一個vCPU被頻繁地當(dāng)作Victim-vCPU而被搶占,vSMP Internal調(diào)度為每個客戶機記錄上次作為Victim-vCPU的下標(biāo)last_vic,VictimFind從last_vic開始輪轉(zhuǎn)查找占用物理CPU的Victim-vCPU。 2.3.2 vCPUSwitch實現(xiàn) Linux內(nèi)核將每個CPU中運行隊列與CFS調(diào)度器[16]相關(guān)的字段組合成一個新的數(shù)據(jù)結(jié)構(gòu)CFS運行隊列(struct cfs_rq)。cfs_rq的next字段代表要優(yōu)先調(diào)度的進程,skip字段代表不應(yīng)該被調(diào)度的進程。CFS在選取下一個被調(diào)度運行的進程時優(yōu)先選擇next字段代表的進程并且不選擇skip字段代表的進程運行。因此,vCPUSwitch將cfs_rq的skip字段設(shè)置為Victim-vCPU,next字段設(shè)置為要與Victim-vCPU切換的vCPU,然后調(diào)用進程調(diào)度函數(shù)實現(xiàn)vCPU之間的切換。 測試環(huán)境中宿主機配置見表1。 表1 宿主機軟硬件配置 網(wǎng)絡(luò)測試中客戶端運行在相同配置的物理機器上,兩臺物理機器通過華為Quidway S5328C-SI千兆交換機相連。在宿主機上同時運行了5個客戶機,每個客戶機配備8個vCPU以及1 GB內(nèi)存,客戶機操作系統(tǒng)為Centos 5.8,Linux內(nèi)核版本為3.10.21,客戶機網(wǎng)絡(luò)設(shè)備為Intel e1000網(wǎng)卡,塊設(shè)備為IDE硬盤。以一臺同時運行I/O受限任務(wù)和CPU受限任務(wù)的客戶機作為評估對象,另外4臺客戶機只運行CPU受限任務(wù)。所有的測試結(jié)果是5次測試的平均值,在本文測試結(jié)果中,I/O代表測試客戶機只運行單一的I/O負(fù)載,I/O+CPU代表客戶機同時運行I/O和CPU混合負(fù)載,Original代表KVM原CFS調(diào)度機制,vSMP Internal代表本文實現(xiàn)機制。 3.1 網(wǎng)絡(luò)性能測試 在虛擬化環(huán)境中,客戶機運行I/O密集型的網(wǎng)絡(luò)服務(wù)器對外提供服務(wù),TCP協(xié)議能夠提供端到端的可靠傳輸,被大量網(wǎng)絡(luò)應(yīng)用程序使用。本文通過Netperf工具對vSMP客戶機TCP數(shù)據(jù)傳輸吞吐率進行測試,評估本文提出的調(diào)度機制對I/O性能的提升。為了模擬多種真實的TCP網(wǎng)絡(luò)傳輸場景,采用3種測試模式進行批量數(shù)據(jù)傳輸和請求應(yīng)答吞吐率測試,實驗結(jié)果如圖5所示。其中TCP_STREAM模式模擬FTP等一次傳輸整個文件的批量數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)應(yīng)用,TCP_RR模式模擬一個TCP連接傳送多次交易的數(shù)據(jù)庫應(yīng)用,TCP_CRR模式模擬最典型的一次交易在一條單獨的TCP連接的HTTP應(yīng)用。圖5中是相對于客戶機單一I/O負(fù)載性能的歸一化表示,vSMP Internal相比Original在3種模式上都有顯著提高,并且接近客戶機單一I/O負(fù)載情況下的性能。圖6顯示的是vSMP Internal測試中各個客戶機對物理CPU的使用率,測試結(jié)果顯示客戶機對物理CPU的使用率大致相同,因此可以保證客戶機之間的公平性。 圖5 不同模式的網(wǎng)絡(luò)測試對比 客戶機1~4:CPU;客戶機5:IO+CPU圖6 vSMP Internal網(wǎng)絡(luò)測試中物理CPU使用情況 3.2 IO-Track開銷測試 本文提出的基于I/O受限進程識別的vCPU調(diào)度機制的開銷主要來自客戶機中實現(xiàn)I/O受限進程的識別,以及I/O事件與I/O受限進程的關(guān)聯(lián),即IO-Track帶來的開銷。為了證明本文提出的調(diào)度機制的輕量化,利用IOzone和SuperPI測試工具分別測試IO-Track對I/O負(fù)載和CPU負(fù)載的額外開銷。為了防止vSMP Internal對vCPU調(diào)度導(dǎo)致I/O負(fù)載測試的不準(zhǔn)確性,在所有測試中禁止vSMP Internal。 IOzone測試工具對磁盤多種不同模式的讀寫進行測試,可以充分評估IO-Track對磁盤I/O的影響。如圖7所示,在磁盤I/O負(fù)載測試中,磁盤寫操作會帶來1%~2%的性能開銷,磁盤讀操作會帶來5%~8%的性能開銷。寫操作的開銷主要來自IO-Track中內(nèi)核schedule()函數(shù)的kprobe探測點的運行,而讀操作的開銷除了來自schedule()函數(shù)的kprobe探測點以外,還來自blk_queue_bio()內(nèi)核函數(shù)jprobe探測點的運行,因此讀磁盤的開銷要大于寫磁盤的開銷。 圖7 IOzone測試的磁盤讀寫速度對比 Super PI測試結(jié)果如圖8所示,其中時間越短說明性能越好。測試結(jié)果顯示IO-Track對CPU負(fù)載帶來的開銷為0.5%,這主要來自IO-Track中schedule()函數(shù)kprobe探測點的運行。運行CPU負(fù)載的情況下,schedule()函數(shù)的運行次數(shù)要明顯少于運行I/O負(fù)載的情況,因此IO-Track對CPU負(fù)載帶來的開銷要明顯少于I/O負(fù)載。 圖8 Super PI基準(zhǔn)測試數(shù)據(jù)對比 本文通過客戶機與VMM合作實現(xiàn)基于I/O受限進程識別的vCPU調(diào)度機制。該機制在I/O受限進程與I/O事件關(guān)聯(lián)的基礎(chǔ)上,利用vSMP Internal調(diào)度算法橋接客戶機與VMM之間的語義縫隙。測試結(jié)果表明,在保證客戶機之間公平性的前提下,提高了運行混合負(fù)載的vSMP客戶機中I/O負(fù)載性能,因此本文提出的vCPU調(diào)度機制可以應(yīng)用在運行多樣性和不可預(yù)測性負(fù)載的虛擬桌面和云計算環(huán)境中。 [1]金海, 鐘阿林, 吳松, 等.多核環(huán)境下虛擬機VCPU調(diào)度研究:問題與挑戰(zhàn) [J].計算機研究與發(fā)展, 2011, 48(7):1216-1224.JIN Hai, ZHONG Alin, WU Song, et al.Virtual machine VCPU scheduling in the multi-core environment:issues and challenges [J].Journal of Computer Research and Development, 2011, 48(7):1216-1224. [2]CHEN P M, NOBLE B D.When virtual is better than real [C]∥Proceedings of the 8th Workshop on Hot Topics in Operating Systems.Piscataway, NJ, USA:IEEE, 2001:133-138. [3]SONG Xiang, SHI Jicheng, CHEN Haibo, et al.Schedule processes, not VCPUs [C]∥Proceedings of the 4th Asia-Pacific Workshop on Systems.New York, USA:ACM, 2013:1-7. [4]XU Fei, LIU Fangming, JIN Hai, et al.Managing performance overhead of virtual machines in cloud computing:a survey, state of the art, and future directions [J].Proceedings of the IEEE, 2014, 102(1):11-31. [5]BARHAM P, DRAGOVIC B, FRASER K, et al.Xen and the art of virtualization [C]∥Proceedings of the 19th ACM Symposium on Operating Systems Principles.New York, USA:ACM, 2003:164-177. [6]KIM H, LIM H, JEONG J, et al.Transparently bridging semantic gap in CPU management for virtualized environments [J].Journal of Parallel and Distributed Computing, 2011, 71(6):758-773. [7]UHLIG R, SMITH L, NEIGER G, et al.Intel virtualization technology [J].Computer, 2005, 38(5):48-56. [8]Advanced Micro Devices.AMD64 virtualization codenamed “Pacifica” technology:secure virtual machine architecture reference manual [M].Sunnyval, CA, USA:AMD, 2005:49-51. [9]KIM H, KIM S, JEONG J, et al.Virtual asymmetric multiprocessor for interactive performance of consolidated desktops [C]∥Proceedings of the 10th ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments.New York, USA:ACM, 2014:29-40. [10]XU Cong, GAMAGE S, LU Hui, et al.vTurbo:accelerating virtual machine I/O processing using designated turbo-sliced core [C]∥Proceedings of the 2013 USENIX Conference on Annual Technical Conference.Berkeley, CA, USA:USENIX, 2013:243-254. [11]CHENG Luwei, WANG Choli.vBalance:using interrupt load balance to improve I/O performance for SMP virtual machines [C]∥Proceedings of the Third ACM Symposium on Cloud Computing.New York, USA:ACM, 2012:1-14. [12]RUSSELL R.Virtio:towards a de-facto standard for virtual I/O devices [J].ACM SIGOPS Operating Systems Review:Research and Developments in the Linux Kernel, 2008, 42(5):95-103. [13]ADAMS K, AGESEN O.A comparison of software and hardware techniques for x86 virtualization [C]∥Proceedings of the 12th International Conference on Architectural Support for Programming Languages and Operating Systems.New York, USA:ACM, 2006:2-13. [14]KIVITY A, KAMAY Y, LAOR D, et al.KVM:the Linux virtual machine monitor [J].Proceedings of the Linux Symposium, 2007, 1:225-230. [15]KRISHNAKUMAR R.Kernel korner:kprobes-a kernel debugger [J].Linux Journal, 2005, 2005(133):11. [16]MOLNAR I.Modular scheduler core and completely fair scheduler [EB/OL].(2007-04-13) [2014-06-26].http:∥lwn.net/Articles/230501. [本刊相關(guān)文獻鏈接] 劉強,董小社,朱正東,等.一種短作業(yè)環(huán)境下的延遲調(diào)度算法.2015,49(2):1-5.[doi:10.7652/xjtuxb201502001] 樊源泉,伍衛(wèi)國,許云龍,等.MapReduce環(huán)境中的性能特征能耗估計方法.2015,49(1):14-19.[doi:10.7652/xjtuxb 201501003] 丑文龍,梅魁志,高增輝,等.ARM GPU的多任務(wù)調(diào)度設(shè)計與實現(xiàn).2014,48(12):87-92.[doi:10.7652/xjtuxb201412 014] 鄭鵬飛,尤佳莉,王勁林,等.一種多租戶云的內(nèi)部網(wǎng)絡(luò)共享策略.2014,48(8):54-59.[doi:10.7652/xjtuxb201408010] 馬莉,唐善成,王靜,等.云計算環(huán)境下的動態(tài)反饋作業(yè)調(diào)度算法.2014,48(7):77-82.[doi:10.7652/xjtuxb201407014] 張憶文,郭銳鋒.硬實時系統(tǒng)周期任務(wù)低功耗調(diào)度算法.2014,48(7):90-95.[doi:10.7652/xjtuxb201407016] 董皎皎,馬瑞瑞,翟橋柱,等.多類型煤炭海運運輸庫存管理一體化模型.2014,48(6):37-42.[doi:10.7652/xjtuxb2014 06007] 汝海,高峰,徐寅峰,等.單水庫汛期分段線性調(diào)度的在線策略與分析.2014,48(2):99-105.[doi:10.7652/xjtuxb2014 02017] 王兆杰,高峰,翟橋柱,等.高耗能企業(yè)關(guān)口平衡問題的雙目標(biāo)規(guī)劃模型.2013,47(8):26-32.[doi:10.7652/xjtuxb2013 08005] 莊威,桂小林,林建,等.云環(huán)境下基于多屬性層次分析的虛擬機部署與調(diào)度策略.2013,47(2):28-32.[doi:10.7652/xjtuxb201302005] 李健,黃慶佳,劉一陽,等.云計算環(huán)境下的大規(guī)模圖狀數(shù)據(jù)處理任務(wù)調(diào)度算法.2012,46(12):116-122.[doi:10.7652/xjtuxb201212020] 杜文超,陳庶樵,胡宇翔.面向網(wǎng)絡(luò)流的自適應(yīng)正則表達式分組匹配算法.2012,46(8):49-53.[doi:10.7652/xjtuxb2012 08009] (編輯 武紅江) A Virtual CPU Scheduling Mechanism Based on I/O-Awareness WANG Qiang1,DONG Xiaoshe1,WANG Endong2,ZHU Zhengdong1 (1.School of Electronics and Information Engineering, Xi’an Jiaotong University, Xi’an 710049, China; 2.State Key Laboratory of High-End Server and Storage Technology, Inspur Group Co., Ltd., Jinan 250013, China) A novel I/O-aware virtual CPU (vCPU) scheduling mechanism in virtualized environments based on multi-core platform is proposed to eliminate the semantic gap between guest and virtual machine monitor (VMM) that dramatically degrades the performance of I/O-bound workloads in virtual symmetric multi-core processor (vSMP) virtual machine (VM).Inference techniques are used to identify the I/O-bound tasks, and the I/O-bound tasks and I/O events are correlated through the coordination between the guest operating system and VMM.Then the correlation information is used to bridge the semantic gap by a vSMP Internal algorithm so that a vCPU with I/O-bound task can selectively be scheduled to handle its incoming events promptly with ensured fairness among VMs.Extensive evaluations and comparisons with the CFS scheduler used by the KVM virtual machine monitor show that the proposed mechanism significantly improves I/O performance of vSMP VMs with ensured CPU fairness, and little overhead is introduced to guest.Therefore, the proposed mechanism is widely applicable in such environments with unpredictable and varying workloads as virtual desktop and cloud computing. virtualization; virtual machine monitor; virtual CPU scheduling; I/O-bound 2014-08-14。 作者簡介:王強(1989—),男,碩士生;朱正東(通信作者),男,高級工程師。 基金項目:國家高技術(shù)研究發(fā)展計劃資助項目(2008AA01A202,2012AA01A306);國家自然科學(xué)基金資助項目(61173039);國家青年自然科學(xué)基金資助項目(61202041)。 時間:2015-02-10 http:∥www.cnki.net/kcms/detail/61.1069.T.20150210.0924.002.html 10.7652/xjtuxb201504009 TP333 A 0253-987X(2015)04-0053-083 測 試
4 結(jié) 論