• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Xen 的虛擬磁盤調(diào)度算法改進(jìn)

      2010-07-25 07:16:22劉可超李小勇
      微型電腦應(yīng)用 2010年4期
      關(guān)鍵詞:磁盤內(nèi)核隊列

      劉可超,李小勇

      0 引言

      Xen[1][2]是一款開源的虛擬機(jī)監(jiān)視器,最初由劍橋大學(xué)開發(fā)。它同時支持準(zhǔn)虛擬化(Para-Virtualization,也稱為半虛擬化或泛虛擬化)和全虛擬化(Full-Virtualization)。準(zhǔn)虛擬化主要是通過修改客戶操作系統(tǒng)內(nèi)核完成的;而全虛擬化的實現(xiàn)有兩種方式:動態(tài)二進(jìn)制翻譯;硬件虛擬化技術(shù),如Intel VT和AMD-V技術(shù)。以前由于缺乏硬件支持,而基于動態(tài)二進(jìn)制翻譯的全虛擬化方式性能較差,因此 Xen只支持準(zhǔn)虛擬化。但是準(zhǔn)虛擬化需要修改客戶操作系統(tǒng)的內(nèi)核,非開源的操作系統(tǒng)難以實現(xiàn)準(zhǔn)虛擬化。隨著硬件虛擬化技術(shù)的出現(xiàn),Xen開始支持全虛擬化,這種基于硬件的虛擬化(HVM,Hardware Virtual Machine)性能要更好。

      Xen本身并沒有集成各種設(shè)備的驅(qū)動程序,而是通過一個特殊的Linux內(nèi)核實現(xiàn)的。這個Linux內(nèi)核是經(jīng)過修改的,開機(jī)之后就會運行,主要功能就是為各個虛擬機(jī)提供設(shè)備驅(qū)動以及實現(xiàn)虛擬機(jī)的管理功能。在 Xen中,運行的操作系統(tǒng)內(nèi)核稱為域(Domain),提供驅(qū)動的內(nèi)核稱為Domain 0,其它虛擬機(jī)稱為Domain U。

      1 存儲虛擬化

      1.1 存儲虛擬化

      存儲的虛擬化可以通過以下幾種不同的方式[3]:直接使用物理硬盤或其分區(qū);通過網(wǎng)絡(luò)存儲協(xié)議,例如 NFS網(wǎng)絡(luò)文件系統(tǒng);基于邏輯卷(LVM,Logical Volume Manager);基于文件的虛擬存儲,也稱為虛擬磁盤鏡像(Virtual Disk Image)。本文主要研究的是基于文件的虛擬存儲。

      Xen使用 QEMU[4]來為虛擬機(jī)模擬各種設(shè)備,包括磁盤、網(wǎng)卡等。從虛擬機(jī)上發(fā)出的I/O請求的處理流程如圖1所示(以全虛擬化為例):

      圖1 全虛擬化環(huán)境下Xen虛擬機(jī)的I/O路徑

      首先 Domain U的內(nèi)核執(zhí)行磁盤讀寫訪問指令,觸發(fā)VMExit,處理器調(diào)用虛擬機(jī)監(jiān)視器(VMM)設(shè)置的VMExit處理函數(shù),從非根環(huán)境轉(zhuǎn)入根環(huán)境。然后,將I/O指令的具體信息寫入Domain U 內(nèi)核與QEMU設(shè)備模型共享的I/O共享頁中,并通過事件通道(Event Channel)機(jī)制通知Domain 0。接著虛擬機(jī)監(jiān)視器阻塞Domain U,并且調(diào)用調(diào)度算法,把執(zhí)行控制交給Domain 0。Domain 0負(fù)責(zé)收集這些虛擬機(jī)的I/O請求,并將執(zhí)行控制從內(nèi)核態(tài)返回用戶態(tài),處于用戶態(tài)的QEMU設(shè)備模型通過讀取I/O共享頁,識別對于磁盤設(shè)備的訪問,調(diào)用相應(yīng)的回調(diào)函數(shù),完成對磁盤的讀寫操作。

      當(dāng)硬盤讀寫操作完成后,磁盤控制器觸發(fā)硬件中斷,該中斷首先由虛擬機(jī)監(jiān)視器的處理函數(shù)接管,接著通知Domain 0,調(diào)用其中的中斷處理函數(shù)。Domain 0的中斷處理函數(shù)處理完后,喚醒正阻塞于I/O等待隊列中的設(shè)備模型進(jìn)程,當(dāng)設(shè)備模型發(fā)現(xiàn)有虛擬硬件中斷時,通過I/O共享頁設(shè)置相應(yīng)的中斷位,同時把這個虛擬硬件中斷通過事件通道通知虛擬機(jī)監(jiān)視器。當(dāng)虛擬機(jī)下次 VMEntry返回時,就可以喚醒被阻塞的Domain U,完成整個I/O操作。

      1.2 I/O調(diào)度

      Xen的Domain 0是基于改進(jìn)后的Linux 2.6內(nèi)核實現(xiàn)的,它支持四種 I/O調(diào)度算法[5]:完全公平隊列(CFQ,Complete Fair Queuing);最后期限調(diào)度(Deadline);基于預(yù)期的調(diào)度(Anticipatory);簡單的先到先服務(wù)調(diào)度(NOOP)。而其中CFQ算法支持基于優(yōu)先級的調(diào)度。CFQ算法根據(jù)同步和異步,對進(jìn)程提交的I/O請求進(jìn)行分類,優(yōu)先處理同步的I/O請求。CFQ算法內(nèi)部維護(hù)多個請求隊列,它根據(jù)發(fā)出I/O請求的進(jìn)程的標(biāo)識號(PID),通過散列函數(shù)將該請求映射到相應(yīng)的隊列中。CFQ優(yōu)先選擇I/O優(yōu)先級高的隊列進(jìn)行處理;在同優(yōu)先級的隊列之間,CFQ算法使用輪詢調(diào)度(Round Robin)的機(jī)制處理各個活動隊列,實現(xiàn)將I/O請求從CFQ隊列傳送到設(shè)備隊列。

      為了避免引起其它活動隊列的饑餓現(xiàn)象,CFQ算法同時還引入了時間片(Time Slice)的概念,對請求設(shè)置截止期限(Deadline)。當(dāng)請求在超過截止期限之后還沒有得到服務(wù)時,它們就會在下一個調(diào)度周期被優(yōu)先處理。處理過的請求被移出活動隊列并插入到底層設(shè)備的隊列中,該插入操作可以按照I/O請求的磁盤扇區(qū)順序進(jìn)行排列,目的是減少磁盤尋道時間。

      CFQ算法可以保證公平性,但是對于很多應(yīng)用場合來說(如服務(wù)器整合),除了公平性,還應(yīng)該合理的分配帶寬。因為不同的應(yīng)用所需的帶寬是不一樣的,對帶寬穩(wěn)定性的要求也是不一樣的,如果單純的在應(yīng)用之間平均分配,可能會導(dǎo)致有的應(yīng)用所獲得的帶寬超過了它所需的最低帶寬,而其它應(yīng)用的帶寬需求則沒有得到滿足。雖然CFQ調(diào)度算法中支持優(yōu)先級調(diào)度,通過設(shè)置I/O優(yōu)先級可以使服務(wù)得到不同的磁盤帶寬;但是它并不能夠提供定量的帶寬保證。

      2 動態(tài)優(yōu)先級實現(xiàn)模型

      基于反饋機(jī)制的動態(tài)優(yōu)先級調(diào)度的結(jié)構(gòu)如圖2所示:

      圖2 基于反饋的動態(tài)優(yōu)先級調(diào)度

      主要包括三個模塊:性能實時統(tǒng)計模塊、動態(tài)優(yōu)先級模塊以及控制模塊:

      2.1 性能實時統(tǒng)計

      由于虛擬機(jī)對于磁盤的訪問,都是通過QEMU設(shè)備模型來完成的,因此,通過改進(jìn) QEMU,可以實現(xiàn)實時的磁盤性能信息統(tǒng)計。而統(tǒng)計的時間間隔就顯得非常重要,因為如果間隔太短,則無法正確的得到實際的性能數(shù)據(jù);相反,如果間隔太長,則會影響到優(yōu)先級調(diào)整的速度,使得性能達(dá)不到預(yù)期的目的。目前,采用的時間間隔默認(rèn)是5秒鐘,實時統(tǒng)計模塊會記錄每個虛擬機(jī)在每5秒鐘之內(nèi)的I/O請求的大小,并將得到的帶寬傳給控制模塊。帶寬數(shù)據(jù)的傳遞是通過QEMU與控制模塊之間的消息隊列完成的。

      2.2 動態(tài)優(yōu)先級

      Linux 2.6內(nèi)核中從低到高支持3個I/O優(yōu)先級類型,分別是:空閑(Idle)、最大有效度(Best Effort)和實時(Real Time)。而每個優(yōu)先級類型中有分別包含8個優(yōu)先級,從低到高依次為7,6,…,0。在進(jìn)行調(diào)度的時候,優(yōu)先的處理實時類型的請求,根據(jù)具體的優(yōu)先級,從0到7進(jìn)行處理;當(dāng)優(yōu)先處理完實時優(yōu)先級的I/O請求之后,便會接著處理最大有效度類型的請求;最后當(dāng)系統(tǒng)中沒有其它類型的請求時,才會處理空閑類型的請求。而如果同一類型的多個進(jìn)程同時發(fā)出I/O請求,那么優(yōu)先級較高(數(shù)值較低)的進(jìn)程會得到更多的磁盤服務(wù)。但是,優(yōu)先級低的進(jìn)程并不是完全得不到服務(wù),而只是所占的比例較小。因此,可以通過調(diào)整I/O優(yōu)先級,使得磁盤帶寬在多個虛擬機(jī)之間,按照預(yù)先設(shè)定的目標(biāo)帶寬進(jìn)行分配。

      動態(tài)優(yōu)先級模塊負(fù)責(zé)通過系統(tǒng)調(diào)用動態(tài)的升高或降低各個虛擬機(jī)的QEMU設(shè)備模型進(jìn)程的I/O優(yōu)先級。具體如何調(diào)整是由控制模塊進(jìn)行控制的。在實際進(jìn)行調(diào)整的過程中,首先,將所有的虛擬機(jī)對應(yīng)的I/O優(yōu)先級都設(shè)置為Best Effort,優(yōu)先級為 4,這樣就處于一個居中的優(yōu)先級,便于靈活調(diào)整。然后,根據(jù)控制模塊傳來的控制信息,如果目前某個虛擬機(jī)的帶寬沒有達(dá)到預(yù)期,則升高它的I/O優(yōu)先級,如變?yōu)?,隔一定時間后,再根據(jù)控制信息進(jìn)行增減。如果增加到Best Effort 0還是達(dá)不到要求,則調(diào)整為Real Time 7;反之亦然。

      2.3 控制模塊

      每隔一定的時間間隔(5秒鐘),性能統(tǒng)計模塊就會將信息反饋給控制模塊??刂颇K通過實時的性能參數(shù)和預(yù)設(shè)的目標(biāo)參數(shù)來控制I/O優(yōu)先級的調(diào)整。如果虛擬機(jī)當(dāng)前的磁盤帶寬沒有達(dá)到它的目標(biāo)帶寬,就需要對該虛擬機(jī)所對應(yīng)的設(shè)備模型進(jìn)程的I/O優(yōu)先級進(jìn)行調(diào)整。這樣就可以通過反饋的機(jī)制來不斷進(jìn)行優(yōu)先級調(diào)整,以便使得各個虛擬機(jī)都能夠達(dá)到目標(biāo)帶寬。如果系統(tǒng)總體的性能無法滿足所有虛擬機(jī)的需求,則嘗試滿足盡量多的虛擬機(jī)。

      當(dāng)然,實際帶寬不可能完全和目標(biāo)帶寬一致,應(yīng)該允許一定的誤差范圍;同時由于目前的I/O調(diào)度算法中優(yōu)先級劃分的粒度較大,調(diào)整一個優(yōu)先級別就會使帶寬發(fā)生很大變化,頻繁調(diào)整優(yōu)先級會導(dǎo)致虛擬機(jī)的磁盤帶寬波動嚴(yán)重。因此,在實際實現(xiàn)中,只有當(dāng)有某個虛擬機(jī)的實際帶寬低于目標(biāo)帶寬超過 1MB/s時,才會向動態(tài)優(yōu)先級模塊發(fā)出控制信息,進(jìn)行優(yōu)先級調(diào)整。而如果某個虛擬機(jī)的實際帶寬超過了它的目標(biāo)帶寬,但是其它虛擬機(jī)的帶寬需求也能得到滿足,為了避免波動,不會進(jìn)行優(yōu)先級調(diào)整。

      3 性能評估

      3.1 實驗環(huán)境

      實驗機(jī)器配置如下:CPU:Intel Pentium 4 3.0GHz(支持VT-x),內(nèi)存:1GB,磁盤:80G B。使用的Xen版本為:Xen-Unstable:Change Set 20128, Xen Linux內(nèi)核版本:2.6.18.8。在其上運行兩個Red Hat Enterprise Linux 5.2(內(nèi)核2.6.18)的虛擬機(jī),分配給虛擬機(jī)的內(nèi)存大小都是為256 MB,兩個虛擬機(jī)的虛擬磁盤文件大小均為4 GB。

      3.2 結(jié)果對比

      分別在兩個虛擬機(jī)之上運行測試程序(使用dd命令進(jìn)行讀測試:dd if=/dev/hda1 of=/dev/null)。假定虛擬機(jī)2對帶寬的要求較高,其目標(biāo)帶寬為30MB/s;而虛擬機(jī)1則沒有這么高的要求,它只需要10MB/s左右的帶寬。對加入基于反饋的動態(tài)優(yōu)先級調(diào)度前后兩個虛擬機(jī)的平均磁盤帶寬進(jìn)行比較,結(jié)果如圖3所示:

      圖3 改進(jìn)前后對比

      在改進(jìn)之前,由于CFQ算法能保證較好的公平性,因此,兩個虛擬機(jī)的磁盤帶寬基本相等,都為22MB/s左右,總的系統(tǒng)吞吐量約為44MB/s。但是存在的問題是,虛擬機(jī)2的實際帶寬并沒有達(dá)到目標(biāo)的30MB/s,虛擬機(jī)1并不需要20多MB/s的帶寬,也就是說帶寬的分配不夠合理。

      增加了基于反饋的動態(tài)I/O優(yōu)先級調(diào)度之后,可以看到虛擬機(jī)2的帶寬約為31MB/s,達(dá)到了預(yù)期的30MB/s。這種情況下,虛擬機(jī)1的帶寬約為15MB/s,滿足了它本身的需要??偟南到y(tǒng)吞吐量約為46MB/s,與改進(jìn)之前相比,并沒有減少。結(jié)果表明,動態(tài)優(yōu)先級的引入達(dá)到帶寬按需分配的預(yù)期目標(biāo),而且對系統(tǒng)整體性能的影響很小。加入動態(tài)優(yōu)先級調(diào)度之后,兩個虛擬機(jī)的帶寬變化過程如圖4所示(以5秒鐘為單位測得):

      圖4 改進(jìn)后帶寬變化過程

      從結(jié)果中可以看出,兩個虛擬機(jī)在第2個5秒鐘就達(dá)到了目標(biāo)帶寬,后面基本都保持在目標(biāo)帶寬之上。當(dāng)然,結(jié)果中的帶寬還是有一些波動,但是都是在目標(biāo)帶寬之上的波動,也就是說達(dá)到了預(yù)期的目標(biāo)。

      4 結(jié)束語

      本文通過研究Xen中的存儲虛擬化以及I/O調(diào)度算法原理,提出了一種基于反饋的動態(tài)優(yōu)先級調(diào)度機(jī)制,以此來實現(xiàn)磁盤帶寬的動態(tài)調(diào)整,為運行于多個虛擬機(jī)之上的各種服務(wù)提供存儲帶寬的保證。而通過測試也可以看出,改進(jìn)之后,磁盤帶寬能夠在多個虛擬機(jī)之間按照需要進(jìn)行分配。

      [1]Barham P, Dragovic B, Fraser K, Hand S, Harris T, Ho A,Neugebauer R, Pratt I.and A Warfield. Xen and the art of virtualization. In 19th ACM Symposium on Operating Systems Principles, Oct 2003.

      [2]Pratt I, Fraser K, Hand S, Limpach C, Warfield A,Magenheimer D, Nakajima J, and Malick A. Xen 3.0 and the art of virtualization. In Proceedings of the 2005 Ottawa Linux Symposium, Ottawa, Canada, July 2005.

      [3]Xen 3.3 User Manual, http://bits.xensource.com/Xen/docs/user.pdf

      [4]Bellard F.QEMU, a Fast and Portable Dynamic Translator.In Proceedings of the USENIX Annual Technical Conference, 2005.

      [5]Pratt S, Heger D.Workload Dependent Performance Evaluation of the Linux 2.6 I/O Schedulers.In Proceedings of the Ottawa Linux Symposium, 2004.

      猜你喜歡
      磁盤內(nèi)核隊列
      萬物皆可IP的時代,我們當(dāng)夯實的IP內(nèi)核是什么?
      強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
      隊列里的小秘密
      基于多隊列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      解決Windows磁盤簽名沖突
      電腦愛好者(2019年2期)2019-10-30 03:45:31
      基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
      Linux內(nèi)核mmap保護(hù)機(jī)制研究
      在隊列里
      修改磁盤屬性
      豐田加速駛?cè)胱詣玉{駛隊列
      岗巴县| 调兵山市| 宜君县| 巴彦淖尔市| 左权县| 临夏县| 吕梁市| 登封市| 枣强县| 永善县| 中牟县| 萍乡市| 张北县| 灵山县| 翼城县| 宁安市| 孟连| 青岛市| 弥勒县| 前郭尔| 新建县| 积石山| 安康市| 斗六市| 青阳县| 马尔康县| 潼南县| 两当县| 集贤县| 侯马市| 大理市| 泰和县| 黄骅市| 阆中市| 新郑市| 韩城市| 柳江县| 江门市| 曲麻莱县| 平武县| 临清市|