劉 佩, 章建雄, 馬 鵬, 閻燕山
1(華東計(jì)算技術(shù)研究所, 上海 200000)
2(中國(guó)航空無(wú)線電電子研究所615所, 上海 200241)
Xen的I/O虛擬化性能分析與優(yōu)化①
劉 佩1, 章建雄1, 馬 鵬1, 閻燕山2
1(華東計(jì)算技術(shù)研究所, 上海 200000)
2(中國(guó)航空無(wú)線電電子研究所615所, 上海 200241)
在Credit算法應(yīng)用中, 由I/O事務(wù)喚醒的VCPU處于最高優(yōu)先級(jí)BOOST狀態(tài), 優(yōu)先搶占PCPU資源, 使I/O操作的響應(yīng)速度提高, 但多個(gè)虛擬機(jī)同時(shí)進(jìn)行I/O操作時(shí), 會(huì)引起較長(zhǎng)延時(shí)和公平性原則被破壞問(wèn)題. 針對(duì)這個(gè)問(wèn)題, 研究分析SEDF算法、Credit算法、Credit2算法, 提出L-Credit調(diào)度算法解決多個(gè)虛擬機(jī)同時(shí)進(jìn)行I/O操作引起響應(yīng)延遲的問(wèn)題. 通過(guò)監(jiān)測(cè)I/O設(shè)備環(huán)共享頁(yè)面中響應(yīng)和請(qǐng)求的個(gè)數(shù)的方法, 對(duì)處于BOOST狀態(tài)下I/O操作進(jìn)一步細(xì)化排序, 使稀疏型I/O操作較密集型I/O操作先調(diào)用執(zhí)行. 通過(guò)對(duì)L-Credit算法與Credit算法在同一應(yīng)用場(chǎng)景下反復(fù)對(duì)比實(shí)驗(yàn), 得出L-Credit算法可以提高I/O響應(yīng)性能, 并且繼承了Credit算法負(fù)載均衡和按比例公平共享的特點(diǎn).
I/O虛擬化; Credit; SEDF; Credit2; L-Credit
虛擬化技術(shù)是云計(jì)算中最關(guān)鍵、最核心的技術(shù)原動(dòng)力[1]. 云計(jì)算的提出推動(dòng)了系統(tǒng)虛擬化技術(shù)的發(fā)展,而虛擬化的層次將決定虛擬機(jī)性能[2]. 虛擬化技術(shù)的研究方向主要分為: CPU虛擬化、內(nèi)存虛擬化和I/O虛擬化[3], 其中CPU虛擬化的核心問(wèn)題是如何保證VCPU(virtual CPU)的正確執(zhí)行; 內(nèi)存虛擬化的核心問(wèn)題是如何利用分塊共享的思想來(lái)虛擬計(jì)算機(jī)的物理內(nèi)存;I/O虛擬化的核心問(wèn)題是如何協(xié)調(diào)多個(gè)虛擬機(jī)對(duì)同一套硬件硬件設(shè)備的應(yīng)用同時(shí)保證I/O操作的實(shí)時(shí)性、正確性. Intel和AMD先后分別推出了Intel VT(Virtualization Technology)和AMD VT產(chǎn)品[5], 很大程度上解決了CPU虛擬化和內(nèi)存虛擬化問(wèn)題. 而I/O設(shè)備虛擬化由于I/O設(shè)備具有異構(gòu)性強(qiáng)、內(nèi)部狀態(tài)不易控制的特點(diǎn), 成為虛擬化的技術(shù)難點(diǎn)之一. 虛擬機(jī)是系統(tǒng)級(jí)虛擬技術(shù)的應(yīng)用平臺(tái), 其中Xen虛擬機(jī)管理器VMM是一個(gè)完全開(kāi)源項(xiàng)目, 具有較好的兼容性和運(yùn)行效率, 在學(xué)術(shù)界和業(yè)界受到廣泛重視[2]Xen. 在過(guò)去十幾年時(shí)間中, 對(duì)VCPU調(diào)度算法不斷的優(yōu)化改進(jìn), 按照時(shí)間排序: BVT算法、SEDF算法、Credit算法、Credit2算法, 目前最新版的Xen虛擬機(jī)的默認(rèn)算法為Credit算法, Credit2算法目前還在實(shí)驗(yàn)階段[4].
本文以Xen虛擬機(jī)管理器為基礎(chǔ), 通過(guò)對(duì)VCPU調(diào)度算法: SEDF、Credit、Credit2調(diào)度算法研究分析, 提出一種新的調(diào)度算法L-Credit算法, 用于解決多臺(tái)虛擬機(jī)同時(shí)進(jìn)行I/O操作時(shí), 存在的I/O操作延時(shí)長(zhǎng)和公平性原則被破壞等問(wèn)題.
在Xen系統(tǒng)中, 存在一個(gè)輕量級(jí)的軟件層虛擬機(jī)管理器(VMM或Xen Hypervisor), 向運(yùn)行在它之上的虛擬機(jī)提供虛擬硬件資源, 同時(shí)分配和管理這些資源, 并保證虛擬機(jī)之間的相互隔離[3]. 虛擬機(jī)則稱之為域(Dom).虛擬機(jī)管理器VMM存在于操作系統(tǒng)與硬件之間, 主要作用是為運(yùn)行的操作系統(tǒng)內(nèi)核提供硬件環(huán)境. Xen采用混合模式, 設(shè)置一個(gè)Dom為特權(quán)域Dom0, 其它域稱之為DomU. Dom0用于輔助Xen管理其他域DomU, 提供相應(yīng)的虛擬資源服務(wù), 特別是DomU的I/O操作.
根據(jù)VMM向虛擬機(jī)提供硬件資源的方式, Xen虛擬化方式分為FV(Full Virtualization)、PV(Para-Virtualization)、HAV(Hardware Assisted Virtualization).因?yàn)榻Y(jié)構(gòu)特點(diǎn), FV技術(shù)雖然可以向虛擬機(jī)虛擬出和真實(shí)硬件完全相同的硬件環(huán)境, 以及給虛擬機(jī)提供完整的硬件支持服務(wù), 但對(duì)于I/O設(shè)備而言, 仍然是基于PV環(huán)境開(kāi)發(fā)的前后端驅(qū)動(dòng)模式, 因此, 最初的Xen完全虛擬化需要使用Qemu來(lái)仿真計(jì)算機(jī)硬件, 其I/O設(shè)備的性能比PV技術(shù)要低. 而HAV技術(shù)需要CPU支持Intel-VT技術(shù)或者AMD-V技術(shù). 對(duì)比而言, PV技術(shù)實(shí)現(xiàn)的I/O虛擬化性能更優(yōu)良和方便.
以PV為例對(duì)Xen的I/O虛擬化過(guò)程進(jìn)行說(shuō)明. 如圖1所示, 在Xen系統(tǒng)中, I/O操作采用的是前后端(Frontend-Backend)I/O技術(shù), 其中前端設(shè)備驅(qū)動(dòng)(Frontend Device Driver)位于DomU中將I/O請(qǐng)求發(fā)送給位于Dom0的后端設(shè)備驅(qū)動(dòng)(Back-end Device Driver), 在由后端設(shè)備驅(qū)動(dòng)接收I/O請(qǐng)求, 權(quán)限檢查, 通過(guò)之后交由原生設(shè)備驅(qū)動(dòng). Dom與VMM之間的數(shù)據(jù)傳輸采用的是基于循環(huán)隊(duì)列結(jié)構(gòu)的生產(chǎn)者消費(fèi)者模型. 接收操作系統(tǒng)指令的傳遞, 是由Xen為每個(gè)Domain建立的VCPU完成. VCPU的調(diào)度算法對(duì)于I/O虛擬化的性能有著決定性的影響. 在Xen中, 關(guān)于VCPU的調(diào)度算法主要有SEDF調(diào)度算法、Credit調(diào)度算法、Credit2調(diào)度算法.
圖1 Xen半虛擬化結(jié)構(gòu)圖
I/O虛擬化技術(shù)的性能主要體現(xiàn)在實(shí)時(shí)性、負(fù)載均衡等特性上. SEDF算法可以在單核應(yīng)用場(chǎng)景中保證I/O操作的實(shí)時(shí)性; Credit算法可以在多核應(yīng)用場(chǎng)景中很好實(shí)現(xiàn)I/O虛擬化的負(fù)載均衡特性; Credit2算法結(jié)合Credit算法在多核應(yīng)用場(chǎng)景中保證負(fù)載平衡的基礎(chǔ)上,解決了I/O虛擬化操作的延時(shí)性等問(wèn)題, 但是帶來(lái)了緩存壓力過(guò)大的問(wèn)題.
2.1 SEDF算法
SEDF算法是一種動(dòng)態(tài)優(yōu)先調(diào)度算法, 最初為每個(gè)VCPU進(jìn)行初始化時(shí)設(shè)置一個(gè)截止期限. 截止期限最早的VCPU在VCPU調(diào)度時(shí)具有較高的優(yōu)先級(jí)會(huì)優(yōu)先調(diào)用. SEDF算法通過(guò)設(shè)置參數(shù)(s, p, x)控制VCPU的運(yùn)行,其中s指代時(shí)間片, p指代周期時(shí)間, x是布爾值. 在時(shí)間p內(nèi), 設(shè)置的VCPU至少可以獲取s單位的CPU運(yùn)行時(shí)間.x值代表額外的CPU運(yùn)行時(shí)間(p-s)是否可以繼續(xù)持有.調(diào)度器中維護(hù)一個(gè)可運(yùn)行隊(duì)列和一個(gè)等待隊(duì)列, 可運(yùn)行隊(duì)列中按照截止期限順序保存當(dāng)前周期仍有運(yùn)行時(shí)間的隊(duì)列, 等待隊(duì)列中保存當(dāng)前周期運(yùn)行時(shí)間已消耗完VCPU, 并結(jié)合x(chóng)參數(shù)以及截止時(shí)間依次排列. 每次調(diào)度時(shí), 處理器獲取運(yùn)行隊(duì)列中的頭元素進(jìn)行調(diào)度. 假設(shè)系統(tǒng)中存在兩個(gè)VCPU, 初始化時(shí)設(shè)vcpu1(2, 7, 1)、vcpu2(1, 9, 0), 如圖2, vcpu1的截止時(shí)間是第5個(gè)時(shí)刻,vcpu2的截止時(shí)間是第8個(gè)時(shí)刻, 按照算法的優(yōu)先原則,vcpu1先被調(diào)度執(zhí)行, 執(zhí)行2個(gè)時(shí)間單位, 接著調(diào)度執(zhí)行vcpu2, 執(zhí)行1個(gè)時(shí)間單位. 那么在時(shí)刻3處, vcpu1和vcpu2調(diào)度完成, 那么剩余的時(shí)間CPU處的狀態(tài)由x決定, x都為0時(shí), 代表周期剩余的時(shí)間是不能被VCPU使用, CPU處于idle狀態(tài). 若x為1, 代表剩余周期的時(shí)間,被某VCPU使用. 由于vcpu1中x=1, 代表剩余周期vcpu1將占用CPU, 直到有新的VCPU被釋放.
圖2 SEDF算法示例
SEDF算法在負(fù)載較輕時(shí), 處理器利用率很高, 但是當(dāng)多個(gè)負(fù)載超過(guò)50%時(shí), 會(huì)導(dǎo)致有些進(jìn)程錯(cuò)過(guò)截止時(shí)間, 忽略執(zhí)行, 對(duì)性能有很大影響. 而且算法只能對(duì)單個(gè)CPU進(jìn)行SEDF調(diào)度, 不能夠進(jìn)行多個(gè)CPU之間的負(fù)載平衡操作.
2.2 Credit算法
Credit調(diào)度算法是以VCPU調(diào)度為單位, 在調(diào)度過(guò)程中, 每個(gè)VCPU都包含兩個(gè)配置參數(shù): weight(VCPU的權(quán)重)和cap(VCPU能運(yùn)行的時(shí)間的上限). 由weight決定參數(shù)Credit(VCPU能夠運(yùn)行的時(shí)間)的值, 當(dāng)VCPU被調(diào)度過(guò)程中credit值會(huì)減少. Xen4.1虛擬機(jī)之后, 每個(gè)VCPU包含了3種運(yùn)行狀態(tài): BOOST、UNDER、OVER.UNDER狀態(tài): 當(dāng)VCPU處于正常等待運(yùn)行并且credit值不為負(fù)時(shí), VCPU處于UNDER狀態(tài). OVER狀態(tài): 只要當(dāng)credit值為負(fù)時(shí), VCPU切換為OVER狀態(tài), 不再被調(diào)用執(zhí)行. BOOST狀態(tài): 當(dāng)被事件喚醒的虛擬機(jī)具有較高的優(yōu)先級(jí)時(shí), VCPU進(jìn)入BOOST狀態(tài), 如果當(dāng)前運(yùn)行的VCPU為UNDER狀態(tài), 就搶占執(zhí)行, 如圖3所示. 若當(dāng)前運(yùn)行狀態(tài)為BOOST時(shí), 按照隊(duì)列先到先得的規(guī)則執(zhí)行.
Credit調(diào)度算法在執(zhí)行調(diào)度時(shí), 只關(guān)心VCPU所處狀態(tài), 按照被調(diào)度的優(yōu)先級(jí)由高到低排序, 依次是BOOST狀態(tài)、UNDER狀態(tài)、OVER狀態(tài). Credit算法為每個(gè)物理CPU維護(hù)一個(gè)運(yùn)行隊(duì)列, 按照先后順序依次是BOOST、UNDER、OVER 3個(gè)區(qū)域. 每個(gè)區(qū)域內(nèi)的VCPU按照先后順序排列, 按照隊(duì)列的特性, 每10 ms(一個(gè)時(shí)間片)響應(yīng)一次中斷, 執(zhí)行選擇隊(duì)列第一個(gè)VCPU運(yùn)行并且消耗credit值. 如果被調(diào)用VCPU的credit值為負(fù)處于OVER狀態(tài), 那么它將不再被繼續(xù)執(zhí)行, 重新計(jì)算credit值, 重新調(diào)度隊(duì)列VCPU. 若進(jìn)行了3個(gè)時(shí)間片, 一直執(zhí)行VCPU的credit值仍為非負(fù)值, 中止調(diào)度運(yùn)行, 重新計(jì)算credit值, 重新調(diào)度隊(duì)列VCPU.系統(tǒng)每隔10 ms會(huì)中斷一次, 當(dāng)前正在運(yùn)行的VCPU會(huì)被消耗100個(gè)credit值, 當(dāng)所有的credit值得總和為負(fù), 按照比例加速最初設(shè)置的weight值. 如果某個(gè)VCPU的credit值累積到一定值域, 將其減半, 然后處于睡眠狀態(tài).
圖3 Credit算法運(yùn)行狀態(tài)
加入了BOOST狀態(tài)的Credit算法大大降低了響應(yīng)延遲平均值, 提高了虛擬I/O操作性能. 但是當(dāng)多臺(tái)虛擬機(jī)同時(shí)運(yùn)行I/O操作時(shí), 它們按照虛擬機(jī)的優(yōu)先權(quán)限都被設(shè)置為BOOST狀態(tài), 而按照同一狀態(tài)模式下, 執(zhí)行順序按照先到先得服務(wù)機(jī)制, 會(huì)造成很長(zhǎng)延遲和公平性原則的破壞.
2.3 Credit2算法
Credit2算法任然沿用Credit算法參數(shù)weight和credit. 此時(shí)weight含義是credit值消耗速度, weight值越高消耗速度越慢. Credit2調(diào)度算法任然采用隊(duì)列去組織所有VCPU, 但是沒(méi)有按照優(yōu)先級(jí)狀態(tài)處理VCPU.在Credit算法各個(gè)狀態(tài)的隊(duì)列排序不會(huì)關(guān)心credit值大小, 但是Credit2算法中會(huì)按照credit值由大到小進(jìn)行隊(duì)列排序. 當(dāng)有新的VCPU加入時(shí), 會(huì)隊(duì)列進(jìn)行從頭到尾的遍歷, 按照credit值大小插入合適的位置, 然后選擇CPU選擇隊(duì)頭元素進(jìn)行運(yùn)行, 如圖4所示. 當(dāng)處于隊(duì)列中的下一個(gè)vcpu值是小于或者等于零時(shí), credit命令是reset, 意味著, 此時(shí)每個(gè)vcpu的credit值減去最小值, 然后加上固定的credit值.
圖4 Credit2算法運(yùn)行狀態(tài)
對(duì)于I/O虛擬化來(lái)說(shuō), I/O操作相比于其它任務(wù)占用的CPU資源較少, 會(huì)優(yōu)先運(yùn)行, 而且在同樣是I/O請(qǐng)求的情景下, 對(duì)于稀疏型I/O任務(wù)會(huì)優(yōu)先運(yùn)行, 解決了Credit算法產(chǎn)生的多個(gè)I/O操作同時(shí)進(jìn)行時(shí), 延遲和公平性原則得破壞的問(wèn)題, 但是由于頻繁的切換, 同時(shí)大大的增加了緩存的壓力, 目前Credit2算法仍處于改進(jìn)與測(cè)試中, 還沒(méi)有被設(shè)定為Xen默認(rèn)的調(diào)度器.
3.1 算法優(yōu)化的基本思想
通過(guò)對(duì)SEDF算法、Credit算法、Credit2算法分析比較, 針對(duì)解決虛擬機(jī)I/O操作延時(shí)問(wèn)題, 在Credit算法的基礎(chǔ)上可以根據(jù)喚醒VCPU的事件類型, 密集型I/O操作或者稀疏型I/O操作, 進(jìn)一步細(xì)分排序BOOST狀態(tài)下VCPU. 根據(jù)Xen結(jié)構(gòu)的I/O操作結(jié)構(gòu)特點(diǎn),Xen采用設(shè)備分離的策略如圖5, 原生的設(shè)備驅(qū)動(dòng)存在于特權(quán)域Dom0中同時(shí)還包含后端設(shè)備驅(qū)動(dòng), 在DomU中存在的是前端設(shè)備驅(qū)動(dòng). 前端驅(qū)動(dòng)通過(guò)環(huán)形隊(duì)列緩沖區(qū)、授權(quán)表以及事件通道與后端驅(qū)動(dòng)進(jìn)行交互.當(dāng)虛擬機(jī)的某個(gè)操作系統(tǒng)要發(fā)起I/O操作時(shí), 首先前端驅(qū)動(dòng)建立通信鏈接, 分配一個(gè)空閑頁(yè)面作為I/O設(shè)備環(huán)、分配授權(quán)表引用并在Xenstore中存放、分配允許后端驅(qū)動(dòng)連接的未被綁定的事件通道, 然后后端通信建立鏈接, 從Xenstore中讀取前端提供的授權(quán)表引用、映射到I/O設(shè)備環(huán)的共享頁(yè)面、獲取前端綁定的事件通道. 整個(gè)過(guò)程在分離設(shè)備驅(qū)動(dòng)的共享內(nèi)存中實(shí)現(xiàn), 交換請(qǐng)求和響應(yīng), 然后通過(guò)事件通道進(jìn)行異步通知, 每個(gè)域都有各自的I/O設(shè)備環(huán). 而且操作系統(tǒng)允許將一系列類似I/O請(qǐng)求形成請(qǐng)求隊(duì)列, 然后發(fā)送一個(gè)Hypercall, 使Xen以批量的方式來(lái)接受和響應(yīng)請(qǐng)求[3]. 在I/O設(shè)備環(huán)的代碼實(shí)現(xiàn)過(guò)程中, 定義了三種結(jié)構(gòu)體, 共享環(huán)頁(yè)面結(jié)構(gòu)體、前端私有變量結(jié)構(gòu)體、后端私有變量結(jié)構(gòu)體如,表1和表2所示. 通過(guò)獲取結(jié)構(gòu)體元素nr_ents知道共享頁(yè)面中響應(yīng)和請(qǐng)求的個(gè)數(shù), 這個(gè)將作為條件加入到新算法L-Credit算法中.
圖5 I/O設(shè)備環(huán)
表1 前端私有變量結(jié)構(gòu)體
表2 后端私有變量結(jié)構(gòu)體
3.2 優(yōu)化算法L-Credit
Credit算法的特點(diǎn)在于VCPU可以有三個(gè)運(yùn)行狀態(tài)BOOST、UNDER、OVER, 其中處于BOOST狀態(tài)的VCPU優(yōu)先被CPU調(diào)度執(zhí)行. 而Credit算法中I/O操作的VCPU處于最高優(yōu)先級(jí)BOOST, 確實(shí)降低了響應(yīng)延遲平均值, 提高了虛擬I/O性能, 但是當(dāng)面臨多個(gè)I/O操作同時(shí)進(jìn)行時(shí), 它們按照虛擬機(jī)的優(yōu)先權(quán)限都被設(shè)置為BOOST狀態(tài), 而按照同一狀態(tài)模式下, 執(zhí)行順序按照先到先得服務(wù)機(jī)制, 會(huì)造成很長(zhǎng)延遲和公平性原則得破壞. 為了解決這個(gè)問(wèn)題L-Credit算法可以加入一個(gè)新的運(yùn)行順序標(biāo)準(zhǔn): 當(dāng)VCPU被新的事務(wù)喚醒時(shí), 在Credit算法對(duì)于事務(wù)優(yōu)先等級(jí)的劃分進(jìn)行隊(duì)列排序基礎(chǔ)上, 在優(yōu)先等級(jí)同樣為BOOST狀態(tài)時(shí), 通過(guò)判斷當(dāng)前域中, 對(duì)應(yīng)的共享頁(yè)面中響應(yīng)和請(qǐng)求的個(gè)數(shù)對(duì)VCPU進(jìn)行排序,使處于BOOST狀態(tài)的VCPU調(diào)度順序進(jìn)行進(jìn)一步細(xì)分,數(shù)目少的先調(diào)度執(zhí)行, 數(shù)目相同時(shí)任選一個(gè)調(diào)度執(zhí)行,從而達(dá)到區(qū)分發(fā)起的I/O事務(wù)是屬于稀疏型還是密集型操作的目的, 保證稀疏型I/O操作先于密集型I/O操作先被調(diào)度執(zhí)行, 如圖6所示, 部分代碼如下文所示.
圖6 L-Credit算法運(yùn)行圖
L-credit算法的實(shí)現(xiàn)主要分為四個(gè)部分: Sburn_credit、runq_insert、runq_elem、Csched_load_balance,如圖7所示. 在runq_insert加入compare監(jiān)控函數(shù), 用于獲取VCPU之間共享頁(yè)面中響應(yīng)和請(qǐng)求的數(shù)值, 根據(jù)返回整數(shù)值作為同一優(yōu)先級(jí)BOOST狀態(tài)的操作排序依據(jù). Compare監(jiān)控函數(shù)偽代碼如下:
圖7 L-Credit算法結(jié)構(gòu)
Sburn_credit消耗信用值, 設(shè)Cs(P)為每個(gè)PCPU更新時(shí)全部可分配的credit值, Ws(P)為PCPU對(duì)應(yīng)所有VCPU全部weight值之和, 且每個(gè)域的VCPU數(shù)相同, 若第k個(gè)域?qū)?yīng)的weight值為Wk(P), 那么第k個(gè)域第i個(gè)VCPU每次更新時(shí)可分配的credit值為ΔCki(P), 滿足:
為驗(yàn)證L-Credit算法性能, 搭建測(cè)試環(huán)境如下:
硬件平臺(tái): thinkpad服務(wù)器, 處理器Inter Core i3 CPU, 內(nèi)存 4GB, CPU工作頻率: 2.4GHZ
軟件平臺(tái): 安裝Xen4.4.2版本開(kāi)源Xen虛擬機(jī)管理器, 特權(quán)域Dom0為系統(tǒng)Ubuntu 14.04, 其它3個(gè)域DoumU系統(tǒng)Ubuntu 13.1, 使用iozone命令模擬I/O操作,iostate命令用于實(shí)時(shí)監(jiān)控每個(gè)I/O請(qǐng)求處理的平均時(shí)間及其它信息.
實(shí)驗(yàn)場(chǎng)景: 分別就經(jīng)典算法Credit和L-Credit算法進(jìn)行比較, 在Dom0中進(jìn)行稀疏型I/O操作, DomU進(jìn)行I/O密集型操作, 運(yùn)行iozone命令產(chǎn)生對(duì)應(yīng)的I/O操作,iostate命令用于實(shí)時(shí)監(jiān)控每個(gè)I/O請(qǐng)求處理的平均時(shí)間.
操作:
(1)開(kāi)源Xen虛擬機(jī)管理器VCPU調(diào)度算法選擇:Credit調(diào)度算法和L-Credit調(diào)度算法二選一, 進(jìn)行實(shí)驗(yàn)比較.
static const struct scheduler *schedulers[] = {
&sched sedf_def,
&sched credit_def,
&sched credit2_def,
&sched l-credit_def,
};
/*選擇Credit調(diào)度算法作為VCPU調(diào)度算法*/
static char __initdata opt_sched[10] = “credit”;
/*選擇L-Credit調(diào)度算法作為VCPU調(diào)度算法*/
static char __initdata opt_sched[10] = “l(fā)-credit”;
string_param(“sched”, opt_sched);
(2) 進(jìn)行I/O讀寫測(cè)試, 測(cè)試文件大小是128 M, 記錄塊從2 K到8 M, 并將測(cè)試數(shù)據(jù)輸出到Excel文件中
命令行: /opt/iozone/bin/iozone -a -s 128 m -i 0 -i 1 -f /tmp/testfile -y 2k -q 8m -Rb output.xls
(3) 進(jìn)行I/O操作的實(shí)時(shí)監(jiān)控
命令行: iostat -d -x -k 1 10
其中, await(ms): 每一個(gè)I/O請(qǐng)求的處理的平均時(shí)間; svctm(ms): 表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間;%util: 在統(tǒng)計(jì)時(shí)間內(nèi)所有處理I/O時(shí)間, 除以總共統(tǒng)計(jì)時(shí)間. 如果svctm的值與await很接近, 表示幾乎沒(méi)有I/O等待, 如果await的值遠(yuǎn)高于svctm的值, 則表示I/O隊(duì)列等待太長(zhǎng).
(4) 多次重復(fù)測(cè)試, 實(shí)驗(yàn)結(jié)果統(tǒng)計(jì)如圖8、圖9和圖10所示.
圖8 Credit算法出現(xiàn)最壞情況下I/O平均響應(yīng)
圖9 Credit算法與L-Credit算法平均響應(yīng)
圖10 Credit算法出現(xiàn)最好情況下I/O平均響應(yīng)
設(shè)Tdl為延時(shí)響應(yīng)時(shí)間長(zhǎng)度, Tslice為時(shí)間片長(zhǎng)度,Tprd為VCPU被搶占前使用CPU的時(shí)間長(zhǎng)度. 而在Credit算法下, 喚醒VCPU的I/O事件到達(dá)后, 若同一時(shí)間沒(méi)有其他的I/O操作產(chǎn)生既VCPU處于非阻塞狀態(tài),那么I/O事件的響應(yīng)將等待PCPU對(duì)其的調(diào)度, 由Tdl值由Tslice和隊(duì)列中的VCPU數(shù)目決定. 對(duì)于I/O事務(wù)類型,稀疏型I/O操作所耗費(fèi)時(shí)間一定要小于I/O密集型操作所耗費(fèi)時(shí)間既value_min=Tslice. 根據(jù)Credit算法的特點(diǎn),當(dāng)同時(shí)出現(xiàn)多個(gè)I/O操作時(shí), 會(huì)發(fā)生阻塞, 最壞的情況是I/O稀疏型操作在所有密集型I/O操作完成之后才被PCUP調(diào)度執(zhí)行, 在本次實(shí)驗(yàn)場(chǎng)景中, Credit算法可能出現(xiàn)最壞情況如圖11所示, 按照?qǐng)?zhí)行先后順序Tdl=Tprd1+Tslice1+Tslice2+Tslice3, 實(shí)驗(yàn)結(jié)果如圖8所示. Credit算法可能出現(xiàn)最好的情況是稀疏型I/O操作最先被執(zhí)行如圖12所示,按照?qǐng)?zhí)行先后順序Tdl=Tprd0+Tslice.+Tslice1+Tslice2, 實(shí)驗(yàn)結(jié)果如圖10所示. 改進(jìn)之后的L-Credit算法, 在同時(shí)發(fā)生多個(gè)I/O操作事件時(shí), 可以自主的讓I/O稀疏型任務(wù)先執(zhí)行如圖12所示, 實(shí)驗(yàn)結(jié)果如圖8、9和10所示, 能夠確保減少平均響應(yīng)時(shí)間.
圖11 最壞情況下時(shí)間延遲
圖12 最好情況下時(shí)間延遲
本文主要對(duì)Xen虛擬機(jī)相關(guān)的VCPU調(diào)度算法(Credit、Credit2、SEDF調(diào)度算法)進(jìn)行了研究分析, 新提出的L-Credit調(diào)度算法相比于Credit調(diào)度算法, 增加了compare(struct csched_vcpu *vcpu1, struct csched_vcpu*vcpu2), 用于對(duì)處于同一BOOST狀態(tài)的VCPU隊(duì)列進(jìn)一步細(xì)分排序, 解決多個(gè)I/O操作同時(shí)進(jìn)行時(shí), 延遲和公平性原則得破壞的問(wèn)題. 在未來(lái)的工作中, 對(duì)Credit算法與L-Credit算法在多核處理器應(yīng)用場(chǎng)景下, 對(duì)同時(shí)發(fā)起I/O操作的虛擬機(jī)數(shù)目依次進(jìn)行增加,進(jìn)行重復(fù)試驗(yàn), 對(duì)L-Credit算法進(jìn)一步驗(yàn)證.
1惠新忠. Xen虛擬I/O優(yōu)化策略[碩士學(xué)位論文]. 大連: 大連理工大學(xué), 2010.
2丁曉波, 馬中, 戴新發(fā). 面向響應(yīng)延遲的虛擬機(jī)動(dòng)態(tài)時(shí)間片調(diào)度算法. 計(jì)算機(jī)工程, 2015, 41(7): 11–16, 24.
3石磊, 鄒德清, 金海. Xen虛擬化技術(shù). 武漢: 華中科學(xué)技術(shù)大學(xué)出版社, 2009.
4Hnarakis R. In Perfect Xen, A Performance Study of the Emerging Xen Schedule. Califormia: Califormia Polytechnic State University, 2013.
5胥平勇. 基于緩存關(guān)聯(lián)的Xen虛擬機(jī)調(diào)度優(yōu)化[碩士學(xué)位論文]. 南京: 南京大學(xué), 2012.
6廣小明. 虛擬化技術(shù)原理與實(shí)現(xiàn). 北京: 電子工業(yè)出版社,2012.
7張?zhí)煊? 關(guān)楠, 鄧慶緒. Xen虛擬機(jī)Credit調(diào)度算法的實(shí)時(shí)性能分析. 計(jì)算機(jī)科學(xué), 2015, 42(12): 115–119.
8Hess K, Newman A. 虛擬化技術(shù)實(shí)戰(zhàn). 徐炯, 譯. 北京: 人民郵電出版社, 2012.
9鄭興杰. 基于SMP架構(gòu)的半虛擬化CPU調(diào)度算法研究[碩士學(xué)位論文]. 哈爾濱: 哈爾濱工程大學(xué), 2009.
10黃漾. 多核平臺(tái)下XEN虛擬機(jī)動(dòng)態(tài)調(diào)度算法研究. 計(jì)算技術(shù)與自動(dòng)化, 2014, 33(3): 84–87.
11宋聿, 蔣烈輝, 董衛(wèi)宇, 等. 一種獨(dú)立式I/O虛擬化方法研究.計(jì)算機(jī)工程, 2014, 40(10): 81–85. [doi: 10.3969/j.issn.1000-3428.2014.10.016]
12李瑩瑩, 喬平安. 云環(huán)境下網(wǎng)絡(luò)I/O虛擬化的研究與改進(jìn).計(jì)算機(jī)與數(shù)字工程, 2015, 43(4): 684–688.
13王凱, 候紫峰. Xen虛擬機(jī)的虛擬CPU松弛協(xié)同調(diào)度方法.計(jì)算機(jī)研究與發(fā)展, 2012, 49(1): 118–127.
14張燦群. Xen虛擬CPU調(diào)度算法的研究與改進(jìn)[碩士學(xué)位論文]. 武漢: 華中科技大學(xué), 2012.
15顧振宇, 張申生, 李曉勇. Xen中Credit調(diào)度算法的優(yōu)化. 微型電腦應(yīng)用, 2009, 25(2): 1–3.
16葉漢民, 宋子航. 數(shù)據(jù)包聚合算法提高云計(jì)算環(huán)境下的網(wǎng)絡(luò)I/O虛擬化. 計(jì)算機(jī)應(yīng)用與軟件, 2016, 33(1): 127–130,133.
17郭御風(fēng), 郭誦忻, 鄧宇. 眾核處理器中硬件支持的I/O虛擬化優(yōu)化技術(shù)研究. 計(jì)算機(jī)科學(xué), 2012, 39(1): 299–304.
18李超. SR-IOV虛擬化技術(shù)的研究與優(yōu)化[碩士學(xué)位論文].長(zhǎng)沙: 國(guó)防科學(xué)技術(shù)大學(xué), 2010.
19王彤. Xen虛擬機(jī)調(diào)度算法的實(shí)時(shí)性能研究[碩士學(xué)位論文]. 沈陽(yáng): 東北大學(xué), 2014.
20張文濤. 基于I/O性能的虛擬機(jī)資源調(diào)度算法研究[碩士學(xué)位論文]. 武漢: 華中科技大學(xué), 2013.
21陳慧星. 多核環(huán)境下虛擬機(jī)調(diào)度算法研究[碩士學(xué)位論文].長(zhǎng)沙: 湖南大學(xué), 2013.
Performance Analysis and Optimization on I/O Virtualization of Xen
LIU Pei1, ZHANG Jian-Xiong1, MA Peng1, YAN Yan-Shan2
1(East China Institute of Computer Technology, Shanghai 200000, China)
2(China Aeronautical Radio Electronics Research Institute, Shanghai 200241, China)
In the application of Credit algorithms, the VCPU awakened by the I/O transaction is in the highest priority BOOST state, which gives it priority to gain access to the PCPU resources and improves the response speed of the I/O operation, but that will cause long time delay and destroy fairness principle, when multiple virtual machines are doing the operation of I/O at the same time. To solve this problem, SEDF algorithm, Credit algorithm, Credit2 algorithm are analyzed and L-Credit scheduling algorithm is proposed to reduce the response delay caused by multiple virtual machines’concurrent I/O operation. By monitoring I/O device ring sharing page to get the number of requests, which can further refine the sort in the I/O state BOOST operation, so that sparse type I/O operation can the implementation before the I/O intensive operations. According to the comparison report of the L-Credit algorithm and Credit algorithm in the same application scenario experiment, L-Credit algorithm can improve the performance of the I/O response, and inherits the Credit algorithm load balance and the characteristics of proportional fair sharing.
I/O virtualization; Credit; SEDF; Credit2; L-Credit
劉佩,章建雄,馬鵬,閻燕山.Xen的I/O虛擬化性能分析與優(yōu)化.計(jì)算機(jī)系統(tǒng)應(yīng)用,2017,26(7):10–16. http://www.c-s-a.org.cn/1003-3254/5857.html
2016-11-08; 收到修改稿時(shí)間: 2016-12-12