專利名稱:一種虛擬功能的動態(tài)調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機(jī)虛擬化領(lǐng)域,具體涉及一種虛擬功能的動態(tài)調(diào)度方法,用于支持設(shè)備直接分配方式的虛擬機(jī)平臺,對單根輸入輸出虛擬化標(biāo)準(zhǔn)(SR-1OV)的網(wǎng)卡所提供的虛擬功能進(jìn)行動態(tài)調(diào)度。
背景技術(shù):
隨著科技的進(jìn)步,虛擬化技術(shù)應(yīng)用范圍越來越廣。虛擬化技術(shù)可以分為CPU虛擬化、內(nèi)存虛擬化和I/o虛擬化。目前,CPU虛擬化和內(nèi)存虛擬化技術(shù)已經(jīng)比較成熟,而I/O虛擬化的性能有待提聞。虛擬機(jī)使用的I/O設(shè)備分為兩類,軟件模擬的I/O設(shè)備和通過設(shè)備直接分配方式分配的I/o設(shè)備。軟件模擬的I/O設(shè)備包括泛虛擬化方式模擬的設(shè)備和完全虛擬化方式模擬的設(shè)備。設(shè)備直接分配方式分配的I/o設(shè)備包括物理設(shè)備和支持單根輸入輸出虛擬化標(biāo)準(zhǔn)的設(shè)備的虛擬功能。軟件模擬I/O設(shè)備方式具有擴(kuò)展性好的優(yōu)點,但是該方式下所有的I/O操作需要被虛擬機(jī)監(jiān)控器捕獲再執(zhí)行,增加了虛擬機(jī)切換次數(shù),頻繁的上下文切換以及I/o路徑的增長,使得這種方式I/o性能較差。使用設(shè)備直接分配方式分配物理設(shè)備是將硬件平臺的物理設(shè)備分配給某一個虛擬機(jī)獨占使用,而其他的虛擬機(jī)不能夠使用。這種方式雖然性能較好,但是可擴(kuò)展性差,資源的利用率較低?;ミB外圍設(shè)備專業(yè)組(PC1-SIG)公布的新標(biāo)準(zhǔn)單根輸入輸出虛擬化,旨在將一個高速外設(shè)部件互連標(biāo)準(zhǔn)(PC1-E)物理功能抽象成多個虛擬功能,并能將虛擬功能分配給虛擬機(jī)直接使用。相比于軟件模擬I/O設(shè)備方式,其I/O性能提高;相比于使用設(shè)備直接分配方式分配物理設(shè)備,在略微影響I/O性能的前提下,提高了可擴(kuò)展性,為將基于以太網(wǎng)光纖通道等對IO性能要求較高的一類應(yīng)用部署到虛擬機(jī)中提供了基礎(chǔ)。然而單根輸入輸出虛擬化標(biāo)準(zhǔn)的設(shè)備依然存在一些問題1、可擴(kuò)展性不足,一個遵循單根輸入輸出虛擬化標(biāo)準(zhǔn)的設(shè)備能夠創(chuàng)建的虛擬功能個數(shù)受到硬件資源的限制。2、對虛擬功能的使用缺乏靈活性,當(dāng)分配虛擬功能給一個虛擬機(jī)之后,虛擬功能就一直由該虛擬機(jī)占用。其使用與虛擬機(jī)的I/O中斷次數(shù)、睡眠時間變化無關(guān),可能會降低設(shè)備的利用率。為了清楚地理解本發(fā)明,以下對本發(fā)明中所使用的術(shù)語進(jìn)行解釋單根輸入輸出虛擬化標(biāo)準(zhǔn)(SR-1OV,Single Root I/O Virtualization):互連外圍設(shè)備專業(yè)組(PC1-SIG, Peripheral Component InterconnectSpecial Interest Group)公布的設(shè)備虛擬化標(biāo)準(zhǔn),遵循該標(biāo)準(zhǔn)的設(shè)備具備單根輸入輸出虛擬化功能,可以讓物理設(shè)備成為共享設(shè)備。外設(shè)互聯(lián)標(biāo)準(zhǔn)(PCI,Peripheral Component Interconnect)一種連接電子計算機(jī)主板和外部設(shè)備的總線標(biāo)準(zhǔn)。
高速外設(shè)部件互連標(biāo)準(zhǔn)(PCI Express,簡稱PC1-E):是電腦總線外設(shè)互聯(lián)標(biāo)準(zhǔn)的一種,它沿用了現(xiàn)有的外設(shè)互聯(lián)標(biāo)準(zhǔn)編程概念及通訊標(biāo)準(zhǔn),但基于更快的串行通信系統(tǒng)。物理功能(PF, Physical Function):在高速外設(shè)部件互連標(biāo)準(zhǔn)中,物理設(shè)備(Physical Device)也叫做物理功能;本發(fā)明指支持單根輸入輸出虛擬化標(biāo)準(zhǔn)的物理設(shè)備。虛擬功能(VF, Virtual Function也稱為虛擬設(shè)備)物理功能遵循單根輸入輸出虛擬化標(biāo)準(zhǔn)創(chuàng)建虛擬功能,并共享一個或者多個物理資源,虛擬機(jī)可以直接使用虛擬功能。虛擬機(jī)(VM, Virtual Machine):指通過軟件模擬的、具有完整硬件系統(tǒng)功能的、運打在Iv完全隔尚環(huán)境中的完整計算機(jī)系統(tǒng)。虛擬機(jī)監(jiān)控器(VMM,Virtual Machine Monitor 也稱為 Hypervisor)一種運行在基礎(chǔ)物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可允許多個操作系統(tǒng)和應(yīng)用軟件共享硬件。設(shè)備直接分配虛擬機(jī)監(jiān)控器直接分配設(shè)備給虛擬機(jī),虛擬機(jī)內(nèi)的設(shè)備驅(qū)動程序可直接訪問設(shè)備,只需要經(jīng)過少量虛擬機(jī)監(jiān)控器的管理。泛虛擬化(Paravirtualization): —種向虛擬機(jī)提供與底層硬件類似但不相同的軟件接口技術(shù)。物理網(wǎng)卡(NIC, Network Interface Controller也稱為網(wǎng)絡(luò)接口控制器)是一塊被設(shè)計用來允許計算機(jī)在計算機(jī)網(wǎng)絡(luò)上進(jìn)行通訊的計算機(jī)硬件,本發(fā)明采用遵循單根輸入輸出虛擬化標(biāo)準(zhǔn)的物理網(wǎng)卡。虛擬網(wǎng)卡(VNIC,VirtualNetwork Interface Controller):虛擬化平臺中,通過軟件模擬出來的提供給虛擬機(jī)使用的網(wǎng)絡(luò)接口控制器。完全虛擬化(Full virtualization):一種能夠模擬完整的硬件環(huán)境的虛擬化技術(shù)。
發(fā)明內(nèi)容
本發(fā)明提供一種虛擬功能的動態(tài)調(diào)度方法,解決單根輸入輸出虛擬化標(biāo)準(zhǔn)的網(wǎng)卡所提供的虛擬功能使用中可擴(kuò)展性不足、靈活性差的問題,以提高所述網(wǎng)卡的利用率。本發(fā)明所提供的一種虛擬功能的動態(tài)調(diào)度方法,包括下述步驟(I)初始化步驟,順序包括下述子步驟(1.1)用戶創(chuàng)建配置文件,在配置文件中輸入要保證帶寬的各虛擬機(jī)名稱和帶寬值,其中帶寬值為要求保證的虛擬機(jī)帶寬值;(1.2)用戶啟用物理網(wǎng)卡的單根輸入輸出虛擬化功能,創(chuàng)建物理網(wǎng)卡的虛擬功倉泛;(2)創(chuàng)建隊列步驟,順序包括下述子步驟(2.1)分別創(chuàng)建第一隊列、第二隊列和第三隊列用于保存虛擬機(jī)信息,各隊列由節(jié)點組成,每個節(jié)點包含虛擬機(jī)名稱、I/o優(yōu)先級值、帶寬值、虛擬功能數(shù),其中1/0優(yōu)先級值為對應(yīng)虛擬機(jī)名稱的虛擬機(jī)的I/O優(yōu)先級;帶寬值在第一隊列的各節(jié)點中為對應(yīng)虛擬機(jī)名稱的虛擬機(jī)所要保證的帶寬,在第二隊列和第三隊列中,各節(jié)點帶寬值均為O ;虛擬功能數(shù)在第一隊列的各節(jié)點中為對應(yīng)虛擬機(jī)名稱的虛擬機(jī)所需要的虛擬功能數(shù)目,在第二隊列的各節(jié)點中為1,在第三隊列的各節(jié)點中為O ;第一隊列按照虛擬機(jī)加入順序保存具有帶寬保證的虛擬機(jī),第二隊列按照虛擬機(jī)的I/o優(yōu)先級值從大到小的順序保存沒有帶寬保證但已使用虛擬功能的虛擬機(jī),第三隊列按照虛擬機(jī)的I/o優(yōu)先級值從大到小的順序保存沒有帶寬保證且未使用虛擬功能的虛擬機(jī);(2. 2)創(chuàng)建虛擬功能隊列用于保存虛擬功能信息,該隊列由節(jié)點組成,每個節(jié)點包括編號、使用情況、虛擬機(jī)名稱,其中編號為虛擬功能編號,使用情況為該編號虛擬功能使用情況,虛擬機(jī)名稱為使用該編號虛擬功能的虛擬機(jī)名稱;將各虛擬功能按編號值從小到大的順序保存到虛擬功能隊列各節(jié)點中,同時將各節(jié)點中的使用情況設(shè)置成未使用,虛擬機(jī)名稱為空;(2. 3)將變量E設(shè)置為總虛擬功能數(shù),將變量B設(shè)置為O ;變量E為未使用的虛擬功能數(shù)目,變量B為第一隊列中所有虛擬機(jī)已經(jīng)使用的虛擬功能總數(shù);(3)虛擬機(jī)分類步驟,順序包括下述子步驟(3.1)判斷虛擬機(jī)監(jiān)控器中是否存在虛擬機(jī),是則進(jìn)行子步驟(3. 2),否則轉(zhuǎn)步驟(9);(3. 2)將虛擬機(jī)監(jiān)控器中所有的虛擬機(jī)按其在虛擬機(jī)監(jiān)控器中的順序依次加入到第三隊列的各節(jié)點中,并初始化節(jié)點,將各節(jié)點的I/O優(yōu)先級值、帶寬值、虛擬功能數(shù)設(shè)置為O ;(3. 3)獲取配置文件中所有虛擬機(jī)名稱,使用每一個虛擬機(jī)名稱查找第三隊列,將與該虛擬機(jī)名稱相同的節(jié)點從第三隊列移除,依次加入第一隊列,同時修改相應(yīng)節(jié)點帶寬值和虛擬功能數(shù),將帶寬值修改為配置文件中該虛擬機(jī)的帶寬值,將虛擬功能數(shù)按照下式計算并修改虛擬功能數(shù)=帶寬值X虛擬功能總數(shù)/物理網(wǎng)卡帶寬;(3. 4)啟動定時器,將其時間長度設(shè)置為6 12小時;(4)分配虛擬功能步驟,順序包括下述子步驟(4.1)判斷第一隊列是否為空,是則轉(zhuǎn)子步驟(4. 6),否則獲取第一隊列中的第一個節(jié)點,進(jìn)行子步驟(4.2);(4. 2)判斷是否(B+C) > A,是則轉(zhuǎn)子步驟(4. 5),否則進(jìn)行子步驟(4. 3);其中,變量A =虛擬功能總數(shù)/4,變量C為當(dāng)前節(jié)點的虛擬功能數(shù); (4. 3)順序?qū)⑻摂M功能隊列中C個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列當(dāng)前節(jié)點對應(yīng)的虛擬機(jī),將虛擬功能隊列中對應(yīng)這C個節(jié)點的虛擬機(jī)名稱修改為第一隊列當(dāng)前節(jié)點的虛擬機(jī)名稱,對應(yīng)這C個節(jié)點的使用情況設(shè)置為已使用,置E =E-C,置 B = B+C ;(4.4)判斷是否為第一隊列最后一個節(jié)點,是則轉(zhuǎn)子步驟(4. 6),否則獲取第一隊列下一個節(jié)點,轉(zhuǎn)子步驟(4.2);(4. 5)將第一隊列中當(dāng)前節(jié)點以及其后的節(jié)點對應(yīng)的虛擬機(jī)關(guān)閉,并將這些虛擬機(jī)從第一隊列和配置文件中移除;(4. 6)計算第二隊列中、第三隊列中各節(jié)點的I/O優(yōu)先級值并排序從虛擬機(jī)監(jiān)控器中獲取第二隊列中、第三隊列中各節(jié)點對應(yīng)的虛擬機(jī)的I/O中斷次數(shù)、睡眠時間;按照下式計算第二隊列中、第三隊列中所有節(jié)點的I/o優(yōu)先級值I/O優(yōu)先級值=I/O中斷次數(shù)XP+睡眠時間X (1-P),P為40% 60% ;
將結(jié)果保存到第二隊列、第三隊列相應(yīng)節(jié)點的I/O優(yōu)先級值中,按照I/O優(yōu)先級值從大到小的順序?qū)Φ诙犃?、第三隊列排序?4.7)判斷是否第三隊列為空,是則轉(zhuǎn)步驟(9),否則獲取第三隊列第一個節(jié)點,進(jìn)行子步驟(4. 8);(4. 8)判斷是否E > A,是則進(jìn)行子步驟(4. 9),否則轉(zhuǎn)步驟(9);(4. 9)將該節(jié)點從第三隊列移除,并按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列,將虛擬功能隊列中第一個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第二隊列中加入節(jié)點對應(yīng)的虛擬機(jī),將虛擬功能隊列中相應(yīng)節(jié)點的虛擬機(jī)名稱修改為第二隊列中加入節(jié)點的虛擬機(jī)名稱,將虛擬功能隊列中相應(yīng)節(jié)點的使用情況設(shè)置為已使用,置E = E-1,轉(zhuǎn)子步驟(4. 7);(5)判斷喚醒步驟判斷是否有喚醒信號,是則進(jìn)行子步驟(5.1);否則轉(zhuǎn)步驟(9),所述喚醒信號為虛擬機(jī)增加信號、虛擬機(jī)減少信號、定時完成信號之一;喚醒信號包含類型和虛擬機(jī)名稱,虛擬機(jī)增加信號類型為增加虛擬機(jī)、虛擬機(jī)名稱為新增虛擬機(jī)的名稱;虛擬機(jī)減少信號類型為減少虛擬機(jī)、虛擬機(jī)名稱為減少的虛擬機(jī)的名稱;定時完成信號類型為定時完成,虛擬機(jī)名稱為空;(5.1)計算第二隊列中、第三隊列中各節(jié)點的I/O優(yōu)先級值并排序,其方式與子步驟(4. 6)相同;(5. 2)判斷喚醒信號是否為虛擬機(jī)增加信號,是則轉(zhuǎn)步驟(6),否則進(jìn)行子步驟(5. 3);(5. 3)判斷喚醒信號是否為虛擬機(jī)減少信號,是則轉(zhuǎn)步驟(7),否則轉(zhuǎn)步驟(8);(6)虛擬機(jī)增加步驟,包括下述子步驟(6.1)根據(jù)虛擬機(jī)名稱在虛擬機(jī)監(jiān)控器中查詢是否存在該虛擬機(jī),是則進(jìn)行子步驟(6. 2),否則轉(zhuǎn)步驟(9);(6. 2)讀取配置文件,判斷所述虛擬機(jī)名稱是否存在配置文件中,是則進(jìn)行子步驟(6. 3),否則轉(zhuǎn)子步驟(6.9);(6. 3)將所述虛擬機(jī)名稱的虛擬機(jī)加入到第一隊列隊末節(jié)點,同時修改相應(yīng)節(jié)點帶寬值和虛擬功能數(shù),將帶寬值修改為配置文件中該虛擬機(jī)的帶寬值,將虛擬功能數(shù)按照下式計算并修改虛擬功能數(shù)=帶寬值X虛擬功能總數(shù)/物理網(wǎng)卡帶寬;(6. 4)判斷是否(B+C) > A,是則進(jìn)行子步驟(6. 5),否則轉(zhuǎn)子步驟(6. 6);(6. 5)關(guān)閉新加入第一隊列的虛擬機(jī),將其從第一隊列和配置文件中刪除,轉(zhuǎn)步驟
(8);(6. 6)判斷是否C > (E-A),是則進(jìn)行子步驟(6. 7),否則轉(zhuǎn)子步驟(6. 8);(6. 7)剝離第二隊列隊末的(C-(E-A))個節(jié)點對應(yīng)的虛擬機(jī)的虛擬功能,并將這些虛擬功能分配給新加入第一隊列的虛擬機(jī),將虛擬功能隊列中這些虛擬功能對應(yīng)節(jié)點的虛擬機(jī)名稱修改為第一隊列新加入節(jié)點的虛擬機(jī)名稱;將第二隊列隊末的(C-(E-A))個節(jié)點從第二隊列移除,并將這些節(jié)點按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第三隊列;順序?qū)⑻摂M功能隊列中(E-A)個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列新加入節(jié)點的虛擬機(jī),將虛擬功能隊列中對應(yīng)這(E-A)個節(jié)點的虛擬機(jī)名稱修改為第一隊列新加入節(jié)點的虛擬機(jī)名稱,對應(yīng)這(E-A)個節(jié)點的使用情況設(shè)置為已使用,置E = A, B = B+C,轉(zhuǎn)步驟(8);(6. 8)順序?qū)⑻摂M功能隊列中C個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列當(dāng)前節(jié)點的虛擬機(jī),將虛擬功能隊列中對應(yīng)這C個節(jié)點的虛擬機(jī)名稱修改為第一隊列當(dāng)前節(jié)點的虛擬機(jī)名稱,對應(yīng)這C個節(jié)點的使用情況設(shè)置為已使用,置E = E-C,置B = B+C,轉(zhuǎn)步驟(8);(6. 9)將新增虛擬機(jī)加入第三隊列隊首節(jié)點,并將該節(jié)點的I/O優(yōu)先級值設(shè)置為第三隊列中第二個節(jié)點的I/o優(yōu)先級值,將該節(jié)點的帶寬值、虛擬功能數(shù)設(shè)置為0,轉(zhuǎn)步驟
(8);(7)虛擬機(jī)減少步驟,包括下述子步驟(7.1)根據(jù)虛擬機(jī)名稱在第一隊列查詢是否存在相應(yīng)節(jié)點,是則轉(zhuǎn)子步驟(7. 3),否則進(jìn)行子步驟(7. 2);(7. 2)根據(jù)虛擬機(jī)名稱在第二隊列查詢是否存在相應(yīng)節(jié)點,是則將所述虛擬機(jī)對應(yīng)的節(jié)點移除,轉(zhuǎn)子步驟(7. 5),否則轉(zhuǎn)子步驟(7.4);(7.3)將節(jié)點從第一隊列移除,置B = B-N,轉(zhuǎn)子步驟(7. 5),N為所述虛擬機(jī)名稱對應(yīng)的虛擬機(jī)的虛擬功能數(shù);(7. 4)根據(jù)虛擬機(jī)名稱在第三隊列查詢是否存在相應(yīng)節(jié)點,是則將所述虛擬機(jī)對應(yīng)的節(jié)點移除,轉(zhuǎn)步驟(8),否則轉(zhuǎn)步驟(9);(7. 5)遍歷虛擬功能隊列,將所述虛擬機(jī)名稱對應(yīng)的節(jié)點的使用情況修改為未使用,置 E = E+N;(7.6)判斷第三隊列是否為空,是則轉(zhuǎn)步驟(8),否則獲取第三隊列第一個節(jié)點,進(jìn)行子步驟(7. 7);(7. 7)將該節(jié)點從第三隊列移除,并按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列,將虛擬功能隊列中第一個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第二隊列中插入的節(jié)點所對應(yīng)虛擬機(jī),將虛擬功能隊列中相應(yīng)節(jié)點的虛擬機(jī)名稱修改為第二隊列中插入節(jié)點的虛擬機(jī)名稱,將虛擬功能隊列中相應(yīng)節(jié)點的使用情況設(shè)置為已使用,置 E = E-LN = N-1 ;(7. 8)判斷N是否為0,是則轉(zhuǎn)步驟(8),否則轉(zhuǎn)子步驟(7. 6);(8)動態(tài)調(diào)整步驟,順序包括下述子步驟(8.1)判斷第二隊列隊隊末節(jié)點的I/O優(yōu)先級值是否大于第三隊列隊首節(jié)點的I/O優(yōu)先級值,是則進(jìn)行子步驟(8. 2),否則轉(zhuǎn)子步驟(8. 3)。(8. 2)將第三隊列中隊首的節(jié)點從第三隊列移除,再按照從大到小的順序根據(jù)其I/o優(yōu)先級值將其加入第二隊列;再將第二隊列列末的節(jié)點從第二隊列移除,按照從大到小的順序根據(jù)其I/o優(yōu)先級值將其加入第三隊列并剝離其虛擬功能,將剝離的虛擬功能分配給新加入第二隊列的節(jié)點對應(yīng)的虛擬機(jī),修改虛擬功能隊列中這個虛擬功能節(jié)點的虛擬機(jī)名稱,轉(zhuǎn)子步驟(8.1);(8. 3)將虛擬機(jī)監(jiān)控器中所有虛擬機(jī)的I/O中斷次數(shù)和睡眠時間設(shè)置為0,將定時器時間長度設(shè)置為6 12小時,轉(zhuǎn)步驟(9);
(9)休眠步驟休眠O. 5 2分鐘之后,轉(zhuǎn)步驟(5)?,F(xiàn)有虛擬功能調(diào)度方法為靜態(tài)分配,其中虛擬功能由用戶進(jìn)行分配,虛擬功能被分配給某虛擬機(jī)之后,一直由該虛擬機(jī)使用直到用戶剝離虛擬功能或者關(guān)閉虛擬機(jī)。相比于使用虛擬功能,I/o優(yōu)先級值大的虛擬機(jī)不使用虛擬功能時I/O性能會差。對于I/O優(yōu)先級值小的虛擬機(jī),使用虛擬功能不能夠帶來較大的性能提升,而虛擬功能的利用也不充分。理想情況為,虛擬功能總是被I/o優(yōu)先級值大的虛擬機(jī)使用。本發(fā)明設(shè)置3個隊列,對第一隊列進(jìn)行帶寬保證,對于第二隊列和第三隊列的虛擬機(jī),根據(jù)一段時間內(nèi)虛擬機(jī)的I/o中斷次數(shù)和睡眠時間,動態(tài)調(diào)度虛擬功能。虛擬功能的使用分為三種情況第一種情況虛擬功能被分配給要保證帶寬的虛擬機(jī),第二種情況虛擬功能被分配給沒有帶寬保證的虛擬機(jī)使用,第三種情況虛擬功能不進(jìn)行分配以保證剩余虛擬機(jī)使用。通過保證不進(jìn)行分配虛擬功能的數(shù)目不低于一個下限,動態(tài)分配其他的虛擬功能,從而使第一隊列虛擬機(jī)的性能能夠滿足需求,使第二隊列虛擬機(jī)具有較好性能。本發(fā)明在一段時間內(nèi),通過統(tǒng)計虛擬機(jī)I/o中斷次數(shù)和睡眠時間來動態(tài)調(diào)度虛擬功能,保證了虛擬功能由I/o優(yōu)先級值大的虛擬機(jī)使用,提高了 I/O優(yōu)先級值大的虛擬機(jī)的網(wǎng)絡(luò)性能,也充分利用了硬件。
圖1為本發(fā)明流程示意圖;圖2為分配虛擬功能步驟示意圖;圖3為虛擬機(jī)增加步驟示意圖;圖4為虛擬機(jī)減少步驟示意圖。
具體實施例方式下面結(jié)合附圖和實施例對本發(fā)明進(jìn)一步說明。以下實施例的應(yīng)用環(huán)境為12個虛擬機(jī)hi hl2按照標(biāo)號從小到大的順序存在于虛擬機(jī)監(jiān)控器中;英特爾82599網(wǎng)卡帶寬為10000Mb。實施例1,虛擬機(jī)增加,包括如下步驟(I)初始化步驟,順序包括下述子步驟(1.1)用戶創(chuàng)建配置文件a,在配置文件a中輸入要保證帶寬的虛擬機(jī)名稱hi和帶寬值600Mb,要保證帶寬的虛擬機(jī)名稱h2和帶寬值1200Mb ;(1. 2)用戶啟用英特爾82599網(wǎng)卡的單根輸入輸出虛擬化功能,在該網(wǎng)卡上創(chuàng)建16個虛擬功能;(2)創(chuàng)建隊列步驟,順序包括下述子步驟(2.1)分別創(chuàng)建第一隊列Q1、第二隊列Q2和第三隊列Q3用于保存虛擬機(jī)信息,各隊列由節(jié)點組成,每個節(jié)點包含虛擬機(jī)名稱、I/o優(yōu)先級值、帶寬值、虛擬功能數(shù);(2. 2)創(chuàng)建虛擬功能隊列V,該隊列由節(jié)點組成,每個節(jié)點包括編號、使用情況、虛擬機(jī)名稱;將16個虛擬功能按照編號值從小到大的順序保存到虛擬功能隊列V的各節(jié)點中,同時將各節(jié)點中的使用情況設(shè)置成未使用,虛擬機(jī)名稱為空;
(2. 3)將變量E設(shè)置為16,將變量B設(shè)置為O ;(3)虛擬機(jī)分類步驟,順序包括下述子步驟(3.1)判斷虛擬機(jī)監(jiān)控器中是否存在虛擬機(jī),是則進(jìn)行子步驟(3. 2),否則轉(zhuǎn)步驟
(9),本實施例進(jìn)行子步驟(3.2);(3. 2)將虛擬機(jī)監(jiān)控器中所有的虛擬機(jī)hi hl2按其在虛擬機(jī)監(jiān)控器中的順序依次加入到第三隊列Q3的各節(jié)點中,將第三隊列Q3中12個節(jié)點的I/O優(yōu)先級值、帶寬值、虛擬功能數(shù)均設(shè)置為O ;(3. 3)獲取配置文件a中所有虛擬機(jī)名稱hi和h2,使用虛擬機(jī)名稱hl、h2查找第三隊列Q3,將其中與虛擬機(jī)名稱hl、h2相同的節(jié)點從第三隊列Q3移除,依次加入第一隊列Ql,同時將hi對應(yīng)節(jié)點的帶寬值修改為600Mb,虛擬功能數(shù)為I ;將112對應(yīng)節(jié)點的帶寬值修改為1200Mb,虛擬功能數(shù)為2 ;上述虛擬功能數(shù)按照下式計算虛擬功能數(shù)=帶寬值X虛擬功能總數(shù)(16)/物理網(wǎng)卡帶寬(10000Mb);(3. 4)啟動定時器,將其時間長度設(shè)置為8小時;(4)分配虛擬功能步驟,順序包括下述子步驟(4.1)判斷第一隊列Ql是否為空,是則轉(zhuǎn)子步驟(4. 6),否則獲取第一隊列Ql中的第一個節(jié)點,進(jìn)行子步驟(4. 2),本實施例獲取第一隊列Ql中hi對應(yīng)的節(jié)點,進(jìn)行子步驟(4. 2);(4. 2)判斷是否(B+C) >A,是則轉(zhuǎn)子步驟(4. 5),否則進(jìn)行子步驟(4. 3),本實施例中,B = 0,變量C對于hi為1、對于h2為2 ;變量A = 4,因此進(jìn)行子步驟(4.3);(4. 3)順序?qū)⑻摂M功能隊列V中C個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列Ql當(dāng)前節(jié)點的虛擬機(jī),將虛擬功能隊列V中對應(yīng)這C個節(jié)點的虛擬機(jī)名稱修改為第一隊列Ql當(dāng)前節(jié)點的虛擬機(jī)名稱,對應(yīng)這C個節(jié)點的使用情況設(shè)置為已使用,置E = E-C,置 B = B+C ;(處理hi后E為15,B為1,虛擬功能隊列V中第一個節(jié)點的虛擬機(jī)名稱為hl,使用情況設(shè)置為已使用;處理h2后E為13,B為3,虛擬功能隊列V中第二個節(jié)點和第三個節(jié)點的虛擬機(jī)名稱修改為h2,使用情況設(shè)置為已使用;)(4.4)判斷是否為第一隊列Ql最后一個節(jié)點,是則轉(zhuǎn)子步驟(4. 6),否則獲取第一隊列Ql下一個節(jié)點,轉(zhuǎn)子步驟(4. 2);(4. 5)將第一隊列Ql中當(dāng)前節(jié)點以及其后的節(jié)點對應(yīng)的虛擬機(jī)關(guān)閉,并將這些虛擬機(jī)從第一隊列Ql和配置文件a中移除,轉(zhuǎn)子步驟(4. 6);(4. 6)計算第二隊列Q2中、第三隊列Q3中各節(jié)點的I/O優(yōu)先級值并排序從虛擬機(jī)監(jiān)控器中獲取第二隊列Q2中、第三隊列Q3中各節(jié)點對應(yīng)的虛擬機(jī)的I/O中斷次數(shù)、睡眠時間;按照下式計算第二隊列Q2中、第三隊列Q3中所有節(jié)點的I/O優(yōu)先級值I/O優(yōu)先級值=I/O中斷次數(shù)XP+睡眠時間X(1-P),P為50% ;將結(jié)果保存到第二隊列Q2、第三隊列Q3相應(yīng)節(jié)點的I/O優(yōu)先級值中,按照I/O優(yōu)先級值從大到小的順序?qū)Φ诙犃蠶2、第三隊列Q3排序;第三隊列Q3中從隊首開始各節(jié)點的虛擬機(jī)名稱、I/O優(yōu)先級值依次為h5 91、h6 83、h9 74、h8 70、h4 65、h3 58、hl0 50、h7 47、hll 30、hl2 10 ;(4. 7)判斷是否第三隊列Q3為空,是則轉(zhuǎn)步驟(9),否則獲取第三隊列Q3第一個節(jié)點,進(jìn)行子步驟(4.8);(4. 8)判斷是否E > A,是則進(jìn)行子步驟(4. 9),否則轉(zhuǎn)步驟(9);(4. 9)將該節(jié)點從第三隊列Q3移除,并按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其插入第二隊列Q2,將虛擬功能隊列V中第一個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第二隊列Q2中插入節(jié)點對應(yīng)虛擬機(jī),將虛擬功能隊列V中相應(yīng)節(jié)點的虛擬機(jī)名稱修改為第二隊列Q2中插入節(jié)點的虛擬機(jī)名稱,將虛擬功能隊列V中相應(yīng)節(jié)點的使用情況設(shè)置為已使用,置E = E-1,轉(zhuǎn)子步驟(4. 7);從第二隊列Q2隊首開始各節(jié)點的虛擬機(jī)名稱依次為h5、h6、h9、h8、h4、h3、hlO、h7、hi I ;從第三隊列Q3隊首開始各節(jié)點的虛擬機(jī)名稱依次為hl2 ;E為4 ;虛擬功能隊列V中從第四個節(jié)點開始到第十二節(jié)點對應(yīng)的虛擬機(jī)名稱為h5、h6、h9、h8、h4、h3、hl0、h7、hll,
使用情況均設(shè)置為已使用。(5)判斷喚醒步驟判斷是否有喚醒信號,是則進(jìn)行子步驟(5.1);否則轉(zhuǎn)步驟
(9);本實施例有喚醒信號,為虛擬機(jī)增加信號類型為增加虛擬機(jī)、虛擬機(jī)名稱為新增虛擬機(jī)的名稱hl3 ;(用戶創(chuàng)建虛擬機(jī)hl3,在配置文件a中輸入要保證帶寬的虛擬機(jī)名稱hl3和帶寬值500Mb ;)(5.1)計算第二隊列Q2、第三隊列Q3中各節(jié)點的I/O優(yōu)先級值并排序,其方式與子步驟(4. 6)相同;從第二隊列Q2隊首開始各節(jié)點的虛擬機(jī)名稱、I/O優(yōu)先級值依次為h9200、hll 186、h4 150、h8 105、h5 83、h3 79、hl069、h7 55、h6 32 ;從第三隊列 Q3 隊首開始各節(jié)點的虛擬機(jī)名稱、I/O優(yōu)先級值依次為hl2 59 ;(5.2)判斷喚醒信號是否為虛擬機(jī)增加信號,是則轉(zhuǎn)步驟(6),否則進(jìn)行子步驟(5. 3),本實施例轉(zhuǎn)步驟(6);(5. 3)判斷喚醒信號是否為虛擬機(jī)減少信號,是則轉(zhuǎn)步驟(7),否則轉(zhuǎn)步驟⑶;(6)虛擬機(jī)增加步驟,包括下述子步驟(6.1)根據(jù)hl3在虛擬機(jī)監(jiān)控器中查詢是否存在該虛擬機(jī),是則進(jìn)行子步驟(6. 2),否則轉(zhuǎn)步驟(9);本實施例轉(zhuǎn)子步驟(6.2);(6.2)讀取配置文件a,判斷hl3是否存在配置文件a中,是則進(jìn)行子步驟(6.3),否則轉(zhuǎn)子步驟(6. 9);本實施例轉(zhuǎn)子步驟(6. 3);(6. 3)將虛擬機(jī)hl3加入到第一隊列Ql隊末節(jié)點,同時修改相應(yīng)節(jié)點帶寬值為500Mb,修改虛擬功能數(shù)為I ;進(jìn)行子步驟(6.4);(6. 4)判斷是否(B+C) > A,是則進(jìn)行子步驟(6. 5),否則轉(zhuǎn)子步驟(6. 6);本實施例 B = 3, C = LA = 4,轉(zhuǎn)子步驟(6. 6);(6. 5)關(guān)閉新加入第一隊列Ql的虛擬機(jī),將其從第一隊列Ql和配置文件a中刪除,轉(zhuǎn)步驟⑶;(6.6)判斷是否0 (E-A),是則進(jìn)行子步驟(6. 7),否則轉(zhuǎn)子步驟(6.8),本實施例C = I, E = 4, A = 4,進(jìn)行子步驟(6. 7);(6. 7)剝離第二隊列Q2隊末的(C-(E-A))個節(jié)點對應(yīng)的虛擬機(jī)的虛擬功能,并將這些虛擬功能分配給hl3,將虛擬功能隊列V中這些虛擬功能對應(yīng)節(jié)點的虛擬機(jī)名稱修改為hl3 ;將第二隊列Q2隊末的(C-(E-A))個從第二隊列Q2移除,并將這些節(jié)點對應(yīng)的虛擬機(jī)按照從大到小順序根據(jù)其I/O優(yōu)先級值將其加入第三隊列Q3相應(yīng)節(jié)點;順序?qū)⑻摂M功能隊列V中(E-A)個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給hl3,將虛擬功能隊列V中對應(yīng)這(E-A)個節(jié)點的虛擬機(jī)名稱修改為hl3,對應(yīng)這(E-A)個節(jié)點的使用情況設(shè)置為已使用,置E = A,B = B+C,轉(zhuǎn)步驟⑶;其中(C-(E-A)) = 1,(E-A) = O ;從第二隊列Q2隊首開始節(jié)點的虛擬機(jī)名稱依次為h9、hll、h4、h8、h5、h3、hl0、h7 ;從第三隊列Q3隊首開始節(jié)點的虛擬機(jī)名稱依次為hl2、h6 ;虛擬功能隊列V中h6對應(yīng)的節(jié)點的虛擬機(jī)名稱修改為hl3 ;(6. 8)順序?qū)⑻摂M功能隊列V中C個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列Ql當(dāng)前節(jié)點的虛擬機(jī),將虛擬功能隊列V中對應(yīng)這C個節(jié)點的虛擬機(jī)名稱修改為第一隊列Ql當(dāng)前節(jié)點的虛擬機(jī)名稱,對應(yīng)這C個節(jié)點的使用情況設(shè)置為已使用,置E = E-C,置 B = B+C,轉(zhuǎn)步驟(8);(6. 9)將新增虛擬機(jī)加入第三隊列Q3隊首節(jié)點,并將該節(jié)點的I/O優(yōu)先級值設(shè)置為第三隊列Q3中第二個節(jié)點的I/O優(yōu)先級值,將該節(jié)點的帶寬值、虛擬功能數(shù)設(shè)置為0,轉(zhuǎn)步驟⑶;(8)動態(tài)調(diào)整步驟,順序包括下述子步驟(8.1)判斷第二隊列Q2隊末節(jié)點的I/O優(yōu)先級值是否大于第三隊列Q3隊首節(jié)點的I/o優(yōu)先級值,是則進(jìn)行子步驟(8. 2),否則轉(zhuǎn)子步驟(8.3);本實施例進(jìn)行子步驟(8. 2);(8. 2)將第三隊列Q3隊首的節(jié)點從第三隊列Q3移除,再按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列Q2 ;再將第二隊列Q2列末的節(jié)點從第二隊列Q2移除,按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第三隊列Q3并剝離其虛擬功能,將剝離的虛擬功能分配給新加入第二隊列Q2的節(jié)點對應(yīng)的虛擬機(jī),修改虛擬功能隊列V中這個虛擬功能節(jié)點的虛擬機(jī)名稱,轉(zhuǎn)子步驟(8.1);從第二隊列Q2隊首開始節(jié)點的虛擬機(jī)名稱依次為h9、hll、h4、h8、h5、h3、hlO、hl2 ;從第三隊列Q3隊首開始節(jié)點的虛擬機(jī)名稱依次為h7、h6 ;虛擬功能隊列V中h7對應(yīng)的節(jié)點的虛擬機(jī)名稱修改為hl2 ;(8. 3)將虛擬機(jī)監(jiān)控器中所有虛擬機(jī)的I/O中斷次數(shù)和睡眠時間設(shè)置為0,將定時器時間長度設(shè)置為8小時,轉(zhuǎn)步驟(9);(9)休眠步驟休眠I分鐘之后,轉(zhuǎn)步驟(5)。實施例2,虛擬機(jī)減少,包括如下步驟步驟(I)、⑵、⑶、(4)與實施例1相同。(5)判斷喚醒步驟判斷是否有喚醒信號,是則進(jìn)行子步驟(5.1);否則轉(zhuǎn)步驟
(9);本實施例有喚醒信號,為虛擬機(jī)減少信號,類型為減少虛擬機(jī)、虛擬機(jī)名稱為h2 ;(此時用戶關(guān)閉虛擬機(jī)h2);(5.1)計算第二隊列Q2中、第三隊列Q3中各節(jié)點的I/O優(yōu)先級值并排序,其方式與子步驟(4. 6)相同;從第二隊列Q2隊首開始各節(jié)點的虛擬機(jī)名稱、I/O優(yōu)先級值依次為h8 300、h9 256、h42 24、h6 198、hll 175、h5148、h7 103、hl2 93、h3 84 ;從第三隊列 Q3隊首開始各節(jié)點的虛擬機(jī)名稱、I/o優(yōu)先級值依次為hlO 71 ;(5. 2)判斷喚醒信號是否為虛擬機(jī)增加信號,是則轉(zhuǎn)步驟(6),否則進(jìn)行子步驟(5. 3);本實施例轉(zhuǎn)子步驟(5. 3);(5. 3)判斷喚醒信號是否為虛擬機(jī)減少信號,是則轉(zhuǎn)步驟(7),否則轉(zhuǎn)步驟(8);本實施例轉(zhuǎn)步驟(7);(7)虛擬機(jī)減少步驟,包括下述子步驟(7.1)根據(jù)h2在第一隊列Ql查詢是否存在相應(yīng)節(jié)點,是則轉(zhuǎn)子步驟(7. 3),否則進(jìn)行子步驟(7. 2);本實施例轉(zhuǎn)子步驟(7. 3);(7. 2)根據(jù)虛擬機(jī)名稱在第二隊列Q2查詢是否存在相應(yīng)節(jié)點,是則將所述虛擬機(jī)對應(yīng)的節(jié)點移除,轉(zhuǎn)子步驟(7. 5),否則進(jìn)行子步驟(7.4);(7. 3)將h2對應(yīng)的節(jié)點從第一隊列Ql移除,置B = B-N, (B = I, N = 2)轉(zhuǎn)子步驟(7. 5);(7. 4)根據(jù)虛擬機(jī)名稱在第三隊列Q3查詢是否存在相應(yīng)節(jié)點,是則將所述虛擬機(jī)對應(yīng)的節(jié)點移除,轉(zhuǎn)步驟(8),否則轉(zhuǎn)步驟(9);(7. 5)遍歷虛擬功能隊列V,將h2對應(yīng)的節(jié)點的使用情況修改為未使用,置E = 6 ;(7. 6)判斷第三隊列Q3是否為空,是則轉(zhuǎn)步驟(8),否則獲取第三隊列Q3第一個節(jié)點,進(jìn)行子步驟(7.7);(7. 7)將該節(jié)點從第三隊列Q3移除,并按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列Q2,將虛擬功能隊列V中第一個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第二隊列Q2中插入的節(jié)點所對應(yīng)虛擬機(jī),將虛擬功能隊列V中相應(yīng)節(jié)點的虛擬機(jī)名稱修改為第二隊列Q2中插入節(jié)點的虛擬機(jī)名稱,將虛擬功能隊列V中相應(yīng)節(jié)點的使用情況設(shè)置為已使用,置E = E-1,N = N-1 ;(7.8)判斷N是否為0,是則轉(zhuǎn)步驟(8),否則轉(zhuǎn)子步驟(7.6);從第一隊列Ql隊首開始各節(jié)點的虛擬機(jī)名稱依次為hl,從第二隊列Q2隊首開始各節(jié)點的虛擬機(jī)名稱依次為 h8、h9、h4、h6、hll、h5、h7、hl2、h3、hl0 ;E = 5, B = I, N = O ;虛擬功能隊列V中h2對應(yīng)的第一個節(jié)點的虛擬機(jī)名稱修改為hl0,h2對應(yīng)的第二個節(jié)點的使用情況修改為未使用,轉(zhuǎn)步驟(8);(8)動態(tài)調(diào)整步驟,順序包括下述子步驟(8.1)判斷第二隊列Q2隊隊末節(jié)點的I/O優(yōu)先級值是否大于第三隊列Q3隊首節(jié)點的I/o優(yōu)先級值,是則轉(zhuǎn)子步驟(8. 2),否則轉(zhuǎn)子步驟(8.3);本實施例轉(zhuǎn)子步驟(8.3);(8. 2)將第三隊列Q3中隊首的節(jié)點從第三隊列Q3移除,再按照從大到小的順序根據(jù)其I/o優(yōu)先級值將其加入第二隊列Q2 ;再將第二隊列Q2列末的節(jié)點從第二隊列Q2移除,按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第三隊列Q3并剝離其虛擬功能,將剝離的虛擬功能分配給新加入第二隊列Q2的節(jié)點對應(yīng)的虛擬機(jī),修改虛擬功能隊列V中這個虛擬功能節(jié)點的虛擬機(jī)名稱,轉(zhuǎn)子步驟(8.1);(8. 3)將虛擬機(jī)監(jiān)控器中所有虛擬機(jī)的I/O中斷次數(shù)和睡眠時間設(shè)置為0,將定時器時間長度設(shè)置為8小時,轉(zhuǎn)步驟(9);(9)休眠步驟休眠I分鐘之后,轉(zhuǎn)步驟(5)。
權(quán)利要求
1.一種虛擬功能的動態(tài)調(diào)度方法,包括下述步驟 (1)初始化步驟,順序包括下述子步驟 (1.1)用戶創(chuàng)建配置文件,在配置文件中輸入要保證帶寬的各虛擬機(jī)名稱和帶寬值,其中帶寬值為要求保證的虛擬機(jī)帶寬值; (1. 2)用戶啟用物理網(wǎng)卡的單根輸入輸出虛擬化功能,創(chuàng)建物理網(wǎng)卡的虛擬功能; (2)創(chuàng)建隊列步驟,順序包括下述子步驟 (2.1)分別創(chuàng)建第一隊列、第二隊列和第三隊列用于保存虛擬機(jī)信息,各隊列由節(jié)點組成,每個節(jié)點包含虛擬機(jī)名稱、I/O優(yōu)先級值、帶寬值、虛擬功能數(shù),其中I/O優(yōu)先級值為對應(yīng)虛擬機(jī)名稱的虛擬機(jī)的I/O優(yōu)先級;帶寬值在第一隊列的各節(jié)點中為對應(yīng)虛擬機(jī)名稱的虛擬機(jī)所要保證的帶寬,在第二隊列和第三隊列中,各節(jié)點帶寬值均為O ;虛擬功能數(shù)在第一隊列的各節(jié)點中為對應(yīng)虛擬機(jī)名稱的虛擬機(jī)所需要的虛擬功能數(shù)目,在第二隊列的各節(jié)點中為1,在第三隊列的各節(jié)點中為O ;第一隊列按照虛擬機(jī)加入順序保存具有帶寬保證的虛擬機(jī),第二隊列按照虛擬機(jī)的I/O優(yōu)先級值從大到小的順序保存沒有帶寬保證但已使用虛擬功能的虛擬機(jī),第三隊列按照虛擬機(jī)的I/O優(yōu)先級值從大到小的順序保存沒有帶寬保證且未使用虛擬功能的虛擬機(jī); (2. 2)創(chuàng)建虛擬功能隊列用于保存虛擬功能信息,該隊列由節(jié)點組成,每個節(jié)點包括編號、使用情況、虛擬機(jī)名稱,其中編號為虛擬功能編號,使用情況為該編號虛擬功能使用情況,虛擬機(jī)名稱為使用該編號虛擬功能的虛擬機(jī)名稱; 將各虛擬功能按編號值從小到大的順序保存到虛擬功能隊列各節(jié)點中,同時將各節(jié)點中的使用情況設(shè)置成未使用,虛擬機(jī)名稱為空; (2. 3)將變量E設(shè)置為總虛擬功能數(shù),將變量B設(shè)置為O ;變量E為未使用的虛擬功能數(shù)目,變量B為第一隊列中所有虛擬機(jī)已經(jīng)使用的虛擬功能總數(shù); (3)虛擬機(jī)分類步驟,順序包括下述子步驟(3.1)判斷虛擬機(jī)監(jiān)控器中是否存在虛擬機(jī),是則進(jìn)行子步驟(3. 2),否則轉(zhuǎn)步驟(9);(3. 2)將虛擬機(jī)監(jiān)控器中所有的虛擬機(jī)按其在虛擬機(jī)監(jiān)控器中的順序依次加入到第三隊列的各節(jié)點中,并初始化節(jié)點,將各節(jié)點的I/O優(yōu)先級值、帶寬值、虛擬功能數(shù)設(shè)置為O ; (3. 3)獲取配置文件中所有虛擬機(jī)名稱,使用每一個虛擬機(jī)名稱查找第三隊列,將與該虛擬機(jī)名稱相同的節(jié)點從第三隊列移除,依次加入第一隊列,同時修改相應(yīng)節(jié)點帶寬值和虛擬功能數(shù),將帶寬值修改為配置文件中該虛擬機(jī)的帶寬值,將虛擬功能數(shù)按照下式計算并修改 虛擬功能數(shù)=帶寬值X虛擬功能總數(shù)/物理網(wǎng)卡帶寬; (3. 4)啟動定時器,將其時間長度設(shè)置為6 12小時; (4)分配虛擬功能步驟,順序包括下述子步驟 (4.1)判斷第一隊列是否為空,是則轉(zhuǎn)子步驟(4. 6),否則獲取第一隊列中的第一個節(jié)點,進(jìn)行子步驟(4.2); (4. 2)判斷是否(B+C) > A,是則轉(zhuǎn)子步驟(4. 5),否則進(jìn)行子步驟(4. 3); 其中,變量A =虛擬功能總數(shù)/4,變量C為當(dāng)前節(jié)點的虛擬功能數(shù); (4. 3)順序?qū)⑻摂M功能隊列中C個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列當(dāng)前節(jié)點對應(yīng)的虛擬機(jī),將虛擬功能隊列中對應(yīng)這C個節(jié)點的虛擬機(jī)名稱修改為第一隊列當(dāng)前節(jié)點的虛擬機(jī)名稱,對應(yīng)這C個節(jié)點的使用情況設(shè)置為已使用,置E = E-C,置B = B+C ; (4. 4)判斷是否為第一隊列最后一個節(jié)點,是則轉(zhuǎn)子步驟(4. 6),否則獲取第一隊列下一個節(jié)點,轉(zhuǎn)子步驟(4.2); (4. 5)將第一隊列中當(dāng)前節(jié)點以及其后的節(jié)點對應(yīng)的虛擬機(jī)關(guān)閉,并將這些虛擬機(jī)從第一隊列和配置文件中移除; (4. 6)計算第二隊列中、第三隊列中各節(jié)點的I/O優(yōu)先級值并排序 從虛擬機(jī)監(jiān)控器中獲取第二隊列中、第三隊列中各節(jié)點對應(yīng)的虛擬機(jī)的I/O中斷次數(shù)、睡眠時間;按照下式計算第二隊列中、第三隊列中所有節(jié)點的I/O優(yōu)先級值 I/o優(yōu)先級值=I/O中斷次數(shù)XP+睡眠時間X (1-P),P為40% 60% ; 將結(jié)果保存到第二隊列、第三隊列相應(yīng)節(jié)點的I/O優(yōu)先級值中,按照I/O優(yōu)先級值從大到小的順序?qū)Φ诙犃?、第三隊列排序? (4. 7)判斷是否第三隊列為空,是則轉(zhuǎn)步驟(9),否則獲取第三隊列第一個節(jié)點,進(jìn)行子步驟(4. 8); (4. 8)判斷是否E > A,是則進(jìn)行子步驟(4. 9),否則轉(zhuǎn)步驟(9); (4. 9)將該節(jié)點從第三隊列移除,并按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列,將虛擬功能隊列中第一個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第二隊列中加入節(jié)點對應(yīng)的虛擬機(jī),將虛擬功能隊列中相應(yīng)節(jié)點的虛擬機(jī)名稱修改為第二隊列中加入節(jié)點的虛擬機(jī)名稱,將虛擬功能隊列中相應(yīng)節(jié)點的使用情況設(shè)置為已使用,置E=E-1,轉(zhuǎn)子步驟(4. 7); (5)判斷喚醒步驟判斷是否有喚醒信號,是則進(jìn)行子步驟(5.1);否則轉(zhuǎn)步驟(9),所述喚醒信號為虛擬機(jī)增加信號、虛擬機(jī)減少信號、定時完成信號之一;喚醒信號包含類型和虛擬機(jī)名稱,虛擬機(jī)增加信號類型為增加虛擬機(jī)、虛擬機(jī)名稱為新增虛擬機(jī)的名稱;虛擬機(jī)減少信號類型為減少虛擬機(jī)、虛擬機(jī)名稱為減少的虛擬機(jī)的名稱;定時完成信號類型為定時完成,虛擬機(jī)名稱為空; (5.1)計算第二隊列中、第三隊列中各節(jié)點的I/O優(yōu)先級值并排序,其方式與子步驟(4. 6)相同; (5.2)判斷喚醒信號是否為虛擬機(jī)增加信號,是則轉(zhuǎn)步驟(6),否則進(jìn)行子步驟(5.3); (5.3)判斷喚醒信號是否為虛擬機(jī)減少信號,是則轉(zhuǎn)步驟(7),否則轉(zhuǎn)步驟(8); (6)虛擬機(jī)增加步驟,包括下述子步驟 (6.1)根據(jù)虛擬機(jī)名稱在虛擬機(jī)監(jiān)控器中查詢是否存在該虛擬機(jī),是則進(jìn)行子步驟(6. 2),否則轉(zhuǎn)步驟(9); (6. 2)讀取配置文件,判斷所述虛擬機(jī)名稱是否存在配置文件中,是則進(jìn)行子步驟(6. 3),否則轉(zhuǎn)子步驟(6.9); (6. 3)將所述虛擬機(jī)名稱的虛擬機(jī)加入到第一隊列隊末節(jié)點,同時修改相應(yīng)節(jié)點帶寬值和虛擬功能數(shù),將帶寬值修改為配置文件中該虛擬機(jī)的帶寬值,將虛擬功能數(shù)按照下式計算并修改 虛擬功能數(shù)=帶寬值X虛擬功能總數(shù)/物理網(wǎng)卡帶寬; (6. 4)判斷是否(B+C) > A,是則進(jìn)行子步驟(6. 5),否則轉(zhuǎn)子步驟(6. 6);(6. 5)關(guān)閉新加入第一隊列的虛擬機(jī),將其從第一隊列和配置文件中刪除,轉(zhuǎn)步驟(8); (6. 6)判斷是否C > (E-A),是則進(jìn)行子步驟(6. 7),否則轉(zhuǎn)子步驟(6. 8); (6. 7)剝離第二隊列隊末的(C-(E-A))個節(jié)點對應(yīng)的虛擬機(jī)的虛擬功能,并將這些虛擬功能分配給新加入第一隊列的虛擬機(jī),將虛擬功能隊列中這些虛擬功能對應(yīng)節(jié)點的虛擬機(jī)名稱修改為第一隊列新加入節(jié)點的虛擬機(jī)名稱;將第二隊列隊末的(C-(E-A))個節(jié)點從第二隊列移除,并將這些節(jié)點按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第三隊列; 順序?qū)⑻摂M功能隊列中(E-A)個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列新加入節(jié)點的虛擬機(jī),將虛擬功能隊列中對應(yīng)這(E-A)個節(jié)點的虛擬機(jī)名稱修改為第一隊列新加入節(jié)點的虛擬機(jī)名稱,對應(yīng)這(E-A)個節(jié)點的使用情況設(shè)置為已使用,置E=A,B = B+C,轉(zhuǎn)步驟(8); (6. 8)順序?qū)⑻摂M功能隊列中C個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第一隊列當(dāng)前節(jié)點的虛擬機(jī),將虛擬功能隊列中對應(yīng)這C個節(jié)點的虛擬機(jī)名稱修改為第一隊列當(dāng)前節(jié)點的虛擬機(jī)名稱,對應(yīng)這C個節(jié)點的使用情況設(shè)置為已使用,置E = E-C,置B =B+C,轉(zhuǎn)步驟(8); (6. 9)將新增虛擬機(jī)加入第三隊列隊首節(jié)點,并將該節(jié)點的I/O優(yōu)先級值設(shè)置為第三隊列中第二個節(jié)點的I/O優(yōu)先級值,將該節(jié)點的帶寬值、虛擬功能數(shù)設(shè)置為O,轉(zhuǎn)步驟(8); (7)虛擬機(jī)減少步驟,包括下述子步驟 (7.1)根據(jù)虛擬機(jī)名稱在第一隊列查詢是否存在相應(yīng)節(jié)點,是則轉(zhuǎn)子步驟(7. 3),否則進(jìn)行子步驟(7. 2); (7. 2)根據(jù)虛擬機(jī)名稱在第二隊列查詢是否存在相應(yīng)節(jié)點,是則將所述虛擬機(jī)對應(yīng)的節(jié)點移除,轉(zhuǎn)子步驟(7. 5),否則轉(zhuǎn)子步驟(7.4); (7. 3)將節(jié)點從第一隊列移除,置B = B-N,轉(zhuǎn)子步驟(7. 5),N為所述虛擬機(jī)名稱對應(yīng)的虛擬機(jī)的虛擬功能數(shù); (7. 4)根據(jù)虛擬機(jī)名稱在第三隊列查詢是否存在相應(yīng)節(jié)點,是則將所述虛擬機(jī)對應(yīng)的節(jié)點移除,轉(zhuǎn)步驟(8),否則轉(zhuǎn)步驟(9); (7. 5)遍歷虛擬功能隊列,將所述虛擬機(jī)名稱對應(yīng)的節(jié)點的使用情況修改為未使用,置E = E+N ; (7. 6)判斷第三隊列是否為空,是則轉(zhuǎn)步驟(8),否則獲取第三隊列第一個節(jié)點,進(jìn)行子步驟(7. 7); (7. 7)將該節(jié)點從第三隊列移除,并按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列,將虛擬功能隊列中第一個使用情況為未使用的節(jié)點所對應(yīng)的虛擬功能分配給第二隊列中插入的節(jié)點所對應(yīng)虛擬機(jī),將虛擬功能隊列中相應(yīng)節(jié)點的虛擬機(jī)名稱修改為第二隊列中插入節(jié)點的虛擬機(jī)名稱,將虛擬功能隊列中相應(yīng)節(jié)點的使用情況設(shè)置為已使用,置 E = E-1, N = N-15 (7.8)判斷N是否為O,是則轉(zhuǎn)步驟(8),否則轉(zhuǎn)子步驟(7.6); (8)動態(tài)調(diào)整步驟, 順序包括下述子步驟 (8.1)判斷第二隊列隊隊末節(jié)點的I/O優(yōu)先級值是否大于第三隊列隊首節(jié)點的I/O優(yōu)先級值,是則進(jìn)行子步驟(8. 2),否則轉(zhuǎn)子步驟(8. 3)。
(8. 2)將第三隊列中隊首的節(jié)點從第三隊列移除,再按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第二隊列;再將第二隊列列末的節(jié)點從第二隊列移除,按照從大到小的順序根據(jù)其I/O優(yōu)先級值將其加入第三隊列并剝離其虛擬功能,將剝離的虛擬功能分配給新加入第二隊列的節(jié)點對應(yīng)的虛擬機(jī),修改虛擬功能隊列中這個虛擬功能節(jié)點的虛擬機(jī)名稱,轉(zhuǎn)子步驟(8.1); (8. 3)將虛擬機(jī)監(jiān)控器中所有虛擬機(jī)的I/O中斷次數(shù)和睡眠時間設(shè)置為O,將定時器時間長度設(shè)置為6 12小時,轉(zhuǎn)步驟(9); (9)休眠步驟休眠O. 5 2分鐘之后,轉(zhuǎn)步驟(5)。
全文摘要
一種虛擬功能的動態(tài)調(diào)度方法,屬于計算機(jī)虛擬化領(lǐng)域,解決單根輸入輸出虛擬化標(biāo)準(zhǔn)的網(wǎng)卡所提供的虛擬功能使用中可擴(kuò)展性不足、靈活性差的問題,以提高所述網(wǎng)卡的利用率。本發(fā)明包括初始化步驟、創(chuàng)建隊列步驟、虛擬機(jī)分類步驟、分配虛擬功能步驟、判斷喚醒步驟、虛擬機(jī)增加步驟、虛擬機(jī)減少步驟、動態(tài)調(diào)整步驟和休眠步驟。本發(fā)明在一段時間內(nèi),通過統(tǒng)計虛擬機(jī)I/O中斷次數(shù)和睡眠時間,對單根輸入輸出虛擬化標(biāo)準(zhǔn)(SR-IOV)的網(wǎng)卡所提供的虛擬功能進(jìn)行動態(tài)調(diào)度,保證了虛擬功能由I/O優(yōu)先級值大的虛擬機(jī)使用,提高了其網(wǎng)絡(luò)性能,充分利用了硬件,用于支持設(shè)備直接分配方式的虛擬機(jī)平臺。
文檔編號G06F9/455GK103049331SQ20121052155
公開日2013年4月17日 申請日期2012年12月6日 優(yōu)先權(quán)日2012年12月6日
發(fā)明者童薇, 馮丹, 劉景寧, 李宇, 張炬 申請人:華中科技大學(xué)