本發(fā)明屬于虛擬化領(lǐng)域,具體涉及一種基于xen的vcpu多核實(shí)時(shí)調(diào)度算法。
背景技術(shù):
隨著嵌入式行業(yè)的發(fā)展,嵌入式系統(tǒng)所涉及的應(yīng)用場(chǎng)景不斷增多,這使得只支持單一應(yīng)用類型的嵌入式系統(tǒng)不再能夠滿足用戶需求,這導(dǎo)致現(xiàn)有的嵌入式系統(tǒng)往往包含多個(gè)子系統(tǒng),以滿足同時(shí)具有實(shí)時(shí)和非實(shí)時(shí),低安全等級(jí)和高安全等級(jí)等應(yīng)用場(chǎng)景的需求,嵌入式系統(tǒng)的設(shè)計(jì)也越來越復(fù)雜。在這一背景下,嵌入式行業(yè)亟需一些新的解決方案對(duì)這些隸屬不同子系統(tǒng)的應(yīng)用進(jìn)行整合。在嵌入式系統(tǒng)上應(yīng)用全虛擬化技術(shù),可以在同一個(gè)硬件平臺(tái)上虛擬出多個(gè)分區(qū),每個(gè)分區(qū)均可運(yùn)行獨(dú)立的操作系統(tǒng),使實(shí)時(shí)和通用操作系統(tǒng)并存,方便了對(duì)實(shí)時(shí)和非實(shí)時(shí)應(yīng)用的整合。
然而,在現(xiàn)有的采用全虛擬化技術(shù)的開源hypervisor中,暫時(shí)還沒有既能滿足實(shí)時(shí)任務(wù)的強(qiáng)實(shí)時(shí)需求的hypervisor。kvm虛擬機(jī)基于linux內(nèi)核,目前只具備軟實(shí)時(shí)性能,難以改造成強(qiáng)實(shí)時(shí)hypervisor,而xen目前所擁有的vcpu(virtualcentralprocessingunit)調(diào)度算法如credit、rtds也只能達(dá)到軟實(shí)時(shí)目的,不能滿足嵌入式系統(tǒng)在強(qiáng)實(shí)時(shí)應(yīng)用場(chǎng)景的需求。
本發(fā)明為xen提出了新的vcpu調(diào)度算法,并結(jié)合xen的中斷處理流程,對(duì)xen的實(shí)時(shí)性進(jìn)行增強(qiáng),使客戶操作系統(tǒng)在中斷和上下文切換方面的實(shí)時(shí)響應(yīng)性能得到顯著提升。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的旨在針對(duì)上述現(xiàn)有技術(shù)中存在的問題,提供一種基于xen的vcpu多核實(shí)時(shí)調(diào)度算法,對(duì)xen虛擬機(jī)進(jìn)行實(shí)時(shí)性增強(qiáng),提高運(yùn)行于xen平臺(tái)之上的實(shí)時(shí)操作系統(tǒng)對(duì)中斷和任務(wù)切換的響應(yīng)速度,從而達(dá)到實(shí)時(shí)性增強(qiáng)的目的。
為了達(dá)到以上目的,本發(fā)明采用以下技術(shù)方案來實(shí)現(xiàn)。
本發(fā)明提供了一種基于xen的vcpu多核實(shí)時(shí)調(diào)度算法,其特征在于,為運(yùn)行于xen平臺(tái)之上的所有操作系統(tǒng)分配一個(gè)靜態(tài)優(yōu)先級(jí),屬于同一個(gè)操作系統(tǒng)的vcpu擁有相同的優(yōu)先級(jí),保證系統(tǒng)中靜態(tài)優(yōu)先級(jí)較高的vcpu優(yōu)先響應(yīng);同時(shí)為每個(gè)vcpu實(shí)時(shí)維護(hù)一個(gè)中斷標(biāo)識(shí),用來記錄未完成中斷的個(gè)數(shù),保證亟需中斷響應(yīng)的vcpu優(yōu)先響應(yīng);所述vcpu多核實(shí)時(shí)調(diào)度算法包括以下4個(gè)模塊:
1.vcpu就緒隊(duì)列和vcpu中斷隊(duì)列
vcpu就緒隊(duì)列,每個(gè)vcpu在被創(chuàng)建時(shí)分配一個(gè)靜態(tài)優(yōu)先級(jí),就緒隊(duì)列中每個(gè)優(yōu)先級(jí)對(duì)應(yīng)一個(gè)子隊(duì)列,每個(gè)子隊(duì)列中的vcpu優(yōu)先級(jí)相同,就緒隊(duì)列按照到達(dá)的vcpu(中斷標(biāo)識(shí)為0)的靜態(tài)優(yōu)先級(jí)從高到底進(jìn)行排列。將運(yùn)行于xen平臺(tái)上的各個(gè)操作系統(tǒng)按實(shí)時(shí)性需求劃分為:實(shí)時(shí)分區(qū)、管理分區(qū)和非實(shí)時(shí)分區(qū),其中,管理分區(qū)負(fù)責(zé)其他分區(qū)的創(chuàng)建或者刪除等操作,靜態(tài)優(yōu)先級(jí)的分配必須保證實(shí)時(shí)分區(qū)的vcpu高于管理分區(qū)的vcpu,管理分區(qū)的vcpu高于非實(shí)時(shí)分區(qū)的vcpu;
vcpu中斷隊(duì)列,每個(gè)vcpu維護(hù)一個(gè)中斷標(biāo)識(shí),當(dāng)xen為某個(gè)vcpu注入中斷時(shí),中斷標(biāo)識(shí)加一,而每個(gè)vcpu完成一個(gè)中斷時(shí),中斷標(biāo)識(shí)減一,如果某個(gè)vcpu的中斷標(biāo)識(shí)非0,則表示該vcpu還有未處理完成的中斷,中斷隊(duì)列按照到達(dá)的vcpu(中斷標(biāo)識(shí)非0)的靜態(tài)優(yōu)先級(jí)從高到底進(jìn)行排列。
基于vcpu中斷隊(duì)列和vcpu就緒隊(duì)列,設(shè)定各vcpu的綜合優(yōu)先策略為:中斷標(biāo)識(shí)非0且屬于管理分區(qū)的vcpu,高于中斷標(biāo)識(shí)非0且屬于實(shí)時(shí)分區(qū)的vcpu,高于中斷標(biāo)識(shí)為0且屬于實(shí)時(shí)分區(qū)的vcpu,高于中斷標(biāo)識(shí)為0且屬于管理分區(qū)的vcpu,高于中斷標(biāo)識(shí)非0且屬于非實(shí)時(shí)分區(qū)的vcpu,高于中斷標(biāo)識(shí)為0且屬于非實(shí)時(shí)分區(qū)的vcpu。
2.vcpu插入算法
vcpu插入算法負(fù)責(zé)將處于就緒狀態(tài)的vcpu插入就緒隊(duì)列或者中斷隊(duì)列,具體包括以下步驟:
s01,判斷vcpu的中斷標(biāo)識(shí)是否為0,如果為0,則執(zhí)行步驟s02,否則執(zhí)行步驟s03;
s02,根據(jù)vcpu的靜態(tài)優(yōu)先級(jí)找到vcpu就緒隊(duì)列中對(duì)應(yīng)優(yōu)先級(jí)的子隊(duì)列,然后將該vcpu插入這個(gè)子隊(duì)列,插入結(jié)束;
s03,按照優(yōu)先級(jí)從高到底依次掃描中斷隊(duì)列,找到第一個(gè)靜態(tài)優(yōu)先級(jí)比待插入vcpu低的vcpu,然后將待插入vcpu插入這個(gè)低優(yōu)先級(jí)vcpu的前面,插入結(jié)束。
3.vcpu選擇算法
vcpu選擇算法負(fù)責(zé)從vcpu就緒隊(duì)列或者vcpu中斷隊(duì)列中按照綜合優(yōu)先策略來選擇一個(gè)合適的vcpu,具體實(shí)現(xiàn)方式包括以下步驟:
s11,判斷當(dāng)前已經(jīng)就緒的屬于管理分區(qū)的vcpu是否有中斷需要處理,如果有,則直接選擇該vcpu,選擇結(jié)束,否則執(zhí)行步驟s12;
s12,如果vcpu中斷隊(duì)列為空,直接進(jìn)入步驟s13,否則,按照靜態(tài)優(yōu)先級(jí)從高到低選取vcpu中斷隊(duì)列中第一個(gè)可以在當(dāng)前cpu上運(yùn)行的vcpu,然后進(jìn)入步驟s13;
s13,按照靜態(tài)優(yōu)先級(jí)從高到低依次掃描vcpu就緒隊(duì)列中的每個(gè)子隊(duì)列;
s14,如果子隊(duì)列不為空,則選取子隊(duì)列上第一個(gè)可以在當(dāng)前cpu上運(yùn)行的vcpu,然后執(zhí)行步驟s15,否則,如果該子隊(duì)列找不到合適的vcpu,返回步驟s13選取下一優(yōu)先級(jí)對(duì)應(yīng)的子隊(duì)列繼續(xù)查找;
s15,如果中斷隊(duì)列沒有找到符合條件的vcpu,或者,中斷隊(duì)列找到的vcpu屬于非實(shí)時(shí)分區(qū)而就緒隊(duì)列中找到的vcpu屬于實(shí)時(shí)分區(qū),則優(yōu)先選擇就緒隊(duì)列中找到的vcpu,否則優(yōu)先選擇中斷隊(duì)列中找到的vcpu,選擇結(jié)束;
s16,如果掃描完vcpu中斷隊(duì)列和vcpu就緒隊(duì)列均沒有找到符合條件的vcpu,那么返回空,代表選擇idlevcpu,vcpu選擇結(jié)束。
在步驟s12和s14中,選取的vcpu不能在當(dāng)前cpu上運(yùn)行的原因在于:xen中每個(gè)vcpu有對(duì)應(yīng)的cpu池,cpu池即為該vcpu可以在其上運(yùn)行的cpu集合,如果當(dāng)前cpu恰好不在該vcpu的cpu池中,那么即使vcpu處于就緒狀態(tài)也不能在此cpu上運(yùn)行。
4.vcpu搶占算法
vcpu搶占算法可以讓綜合優(yōu)先級(jí)較高的vcpu搶占綜合優(yōu)先級(jí)較低的vcpu所在的cpu,具體實(shí)現(xiàn)方式包括以下步驟:
s21,判斷引起搶占的vcpu是否為idlevcpu,如果是,則直接結(jié)束,否則進(jìn)入步驟s22;
s22,如果引起搶占的vcpu上次運(yùn)行時(shí)所在的cpu處于空閑狀態(tài),那么觸發(fā)該cpu的調(diào)度軟中斷,使之重新調(diào)度,引起搶占的vcpu將在下次調(diào)度時(shí)直接搶占該cpu,搶占結(jié)束,否則執(zhí)行步驟s23;
s23,遍歷平臺(tái)上的所有cpu,如果平臺(tái)上有其他cpu處于空閑狀態(tài),那么觸發(fā)該cpu的調(diào)度軟中斷,使之重新調(diào)度,引起搶占的vcpu將在下次調(diào)度時(shí)搶占該cpu,搶占結(jié)束,否則執(zhí)行步驟s24;
s24,如果沒有找到其他處于空閑狀態(tài)的cpu,則按照綜合優(yōu)先策略找到正在運(yùn)行的、優(yōu)先級(jí)最低的vcpu,如果引起搶占的vcpu的綜合優(yōu)先級(jí)比該vcpu更高,那么,觸發(fā)這個(gè)低優(yōu)先級(jí)的vcpu所在的cpu的調(diào)度軟中斷,使之重新調(diào)度,引起搶占的vcpu將在下次調(diào)度時(shí)搶占該cpu,搶占結(jié)束;否則執(zhí)行步驟s25;
s25,引起搶占的vcpu由于綜合優(yōu)先級(jí)較低,沒能搶占到cpu,搶占失敗。
結(jié)合上面的vcpu插入算法、vcpu選擇算法和vcpu搶占算法,本發(fā)明的vcpu多核實(shí)時(shí)調(diào)度算法的基本調(diào)度流程為:
步驟01,更新vcpu就緒隊(duì)列和vcpu中斷隊(duì)列,如果之前xen為某個(gè)vcpu注入中斷時(shí),該vcpu已經(jīng)處于就緒隊(duì)列中,此時(shí),需要將這部分vcpu從就緒隊(duì)列中刪除,并將其加入vcpu中斷隊(duì)列;
步驟02,調(diào)用vcpu選擇算法從中斷隊(duì)列或者就緒隊(duì)列中選擇一個(gè)符合運(yùn)行條件的綜合優(yōu)先級(jí)最高的vcpu;
步驟03,如果步驟02中選擇的是idlevcpu或者選擇的vcpu的綜合優(yōu)先級(jí)較當(dāng)前vcpu低,則仍然運(yùn)行當(dāng)前vcpu,調(diào)度結(jié)束,否則進(jìn)入步驟04;
步驟04,將步驟03中選擇的vcpu從中斷隊(duì)列或者就緒隊(duì)列中刪除,然后切換上下文,使當(dāng)前cpu運(yùn)行該vcpu;
步驟05,保存之前運(yùn)行的vcpu的上下文,并調(diào)用vcpu插入算法將這個(gè)vcpu插入就緒隊(duì)列或者中斷隊(duì)列,然后進(jìn)入步驟06;
步驟06,調(diào)用vcpu搶占算法使之前運(yùn)行的vcpu實(shí)施搶占,如果搶占成功,則再次進(jìn)入步驟01進(jìn)行調(diào)度,否則調(diào)度結(jié)束。
本發(fā)明提供的基于xen的vcpu多核實(shí)時(shí)調(diào)度算法,具有以下至少一項(xiàng)有益效果:
1、在xen中使用靜態(tài)優(yōu)先級(jí)可搶占式的調(diào)度算法,對(duì)于強(qiáng)實(shí)時(shí)分區(qū)的vcpu,則分配最高優(yōu)先級(jí),vcpu的優(yōu)先級(jí)隨實(shí)時(shí)性需求降低而降低,從而保證實(shí)時(shí)分區(qū)的實(shí)時(shí)性;
2、在調(diào)度算法中增加一個(gè)vcpu中斷隊(duì)列,優(yōu)先調(diào)度需要處理中斷的vcpu,可以減少由于靜態(tài)優(yōu)先級(jí)低而得不到運(yùn)行的分區(qū)的設(shè)備中斷延遲,從而提高設(shè)備響應(yīng)的實(shí)時(shí)性;
3、對(duì)于半虛擬化設(shè)備,其設(shè)備響應(yīng)依賴于管理分區(qū)的后端驅(qū)動(dòng),在vcpu選擇算法中無條件優(yōu)先響應(yīng)需要處理中斷的管理分區(qū)的vcpu,可以減少由于管理分區(qū)得不到運(yùn)行而帶來的中斷延遲。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,以下將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見地,以下描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖所示實(shí)施例得到其它的實(shí)施例及其附圖。
圖1為本實(shí)施例的vcpu中斷隊(duì)列和vcpu就緒隊(duì)列示意圖。
圖2為本實(shí)施例的vcpu選擇算法流程圖。
圖3為本實(shí)施例的vcpu搶占算法流程圖。
圖4為本實(shí)施例的vcpu多核實(shí)時(shí)調(diào)度算法流程圖。
具體實(shí)施方式
以下將結(jié)合附圖對(duì)本發(fā)明各實(shí)施例的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所得到的所有其它實(shí)施例,都屬于本發(fā)明所保護(hù)的范圍。
本發(fā)明針對(duì)xen現(xiàn)有的vcpu調(diào)度算法無法滿足強(qiáng)實(shí)時(shí)應(yīng)用場(chǎng)景需求的問題提出了一種基于xen的vcpu多核實(shí)時(shí)調(diào)度算法。為了能夠更容易讓本領(lǐng)域技術(shù)人員理解,以下實(shí)施例中均采用兩核的硬件平臺(tái)進(jìn)行說明。但其并不構(gòu)成對(duì)本發(fā)明的任何限制。本領(lǐng)域技術(shù)人員在本發(fā)明公開的技術(shù)內(nèi)容啟示下,將其應(yīng)用于其他多核硬件平臺(tái),例如四核、八核等。
如圖1所示,本實(shí)施例在調(diào)度算法中使用一個(gè)了vcpu就緒隊(duì)列runq和一個(gè)vcpu中斷隊(duì)列irqq,兩個(gè)cpu各自在進(jìn)行調(diào)度時(shí)都需要從這兩個(gè)隊(duì)列中挑選一個(gè)合適的vcpu來運(yùn)行,其中,runq按照靜態(tài)優(yōu)先級(jí)從高到底劃分為64個(gè)子隊(duì)列,每個(gè)子隊(duì)列中的vcpu具有相同的靜態(tài)優(yōu)先級(jí),因此,每個(gè)vcpu在被創(chuàng)建時(shí)都需要分配一個(gè)靜態(tài)優(yōu)先級(jí)prio,其中,prio值越小,靜態(tài)優(yōu)先級(jí)越高,并且保證實(shí)時(shí)分區(qū)的vcpu優(yōu)先級(jí)高于管理分區(qū)的vcpu優(yōu)先級(jí),管理分區(qū)的vcpu優(yōu)先級(jí)高于非實(shí)時(shí)分區(qū)的vcpu優(yōu)先級(jí);其次,每個(gè)vcpu都有一個(gè)中斷標(biāo)識(shí)irq_flag,用于標(biāo)志該vcpu是否有中斷仍未響應(yīng),irq_flag在每次xen為vcpu注入中斷時(shí)加一,在vcpu所屬分區(qū)完成中斷響應(yīng)時(shí)通過調(diào)用超級(jí)調(diào)用hypervisor_end_isr()減一,即,runq上的所有vcpu的irq_flag都為0,而irqq上的所有vcpu的irq_flag皆不為0。
基于vcpu就緒隊(duì)列和vcpu中斷隊(duì)列,為了更好地保證各個(gè)分區(qū)的實(shí)時(shí)性需求,設(shè)屬于管理分區(qū)的vcpu的靜態(tài)優(yōu)先級(jí)為prio0,則本實(shí)施例的綜合優(yōu)先策略可描述為:irq_flag非0且靜態(tài)優(yōu)先級(jí)值等于prio0的vcpu,高于irq_flag非0且靜態(tài)優(yōu)先級(jí)值小于prio0的vcpu,高于irq_flag為0且靜態(tài)優(yōu)先級(jí)值小于prio0的vcpu,高于irq_flag為0且靜態(tài)優(yōu)先級(jí)值等于prio0的vcpu,高于irq_flag非0且靜態(tài)優(yōu)先級(jí)值大于prio0的vcpu,高于irq_flag為0且靜態(tài)優(yōu)先級(jí)值大于prio0的vcpu。
本實(shí)施例提供的基于xen的vcpu多核實(shí)時(shí)調(diào)度算法,主要包括三個(gè)子算法,vcpu插入算法,vcpu選擇算法和vcpu搶占算法,下面結(jié)合附圖對(duì)這三個(gè)子算法進(jìn)行詳細(xì)解釋。
1.vcpu插入算法
vcpu中斷隊(duì)列和vcpu就緒隊(duì)列負(fù)責(zé)存放系統(tǒng)中已經(jīng)處于就緒狀態(tài)的vcpu集合,因此vcpu插入算法主要負(fù)責(zé)將某個(gè)到達(dá)的vcpu插入這兩個(gè)隊(duì)列,具體包括以下步驟:
s01,首先判斷到達(dá)的vcpu的irq_flag是否為0,如果為0,則執(zhí)行步驟s02,否則執(zhí)行步驟s03;
s02,根據(jù)vcpu的靜態(tài)優(yōu)先級(jí)prio找到就緒隊(duì)列中對(duì)應(yīng)優(yōu)先級(jí)的子隊(duì)列runq[prio],然后將該vcpu插入runq[prio]的隊(duì)尾,插入結(jié)束;
s03,按照靜態(tài)優(yōu)先級(jí)從高到底依次掃描中斷隊(duì)列irqq,如果找到第一個(gè)靜態(tài)優(yōu)先級(jí)比待插入vcpu低的vcpux,則將待插入vcpu插入vcpux的前面,否則直接插入隊(duì)尾,插入結(jié)束。
2.vcpu選擇算法
當(dāng)某個(gè)cpu進(jìn)行調(diào)度時(shí),vcpu選擇算法將按照綜合優(yōu)先策略從就緒隊(duì)列或者中斷隊(duì)列中選擇一個(gè)符合條件的、綜合優(yōu)先級(jí)最高的vcpu來運(yùn)行,其中,符合條件是指cpu必須在該vcpu的cpu池中,結(jié)合圖2,具體實(shí)現(xiàn)方式包括以下步驟:
s11,依次遍歷管理分區(qū)的每一個(gè)vcpu,如果該vcpu此時(shí)處于irqq上,即irq_flag不等于0,則表明管理分區(qū)的這個(gè)vcpu有未處理完成的中斷,此時(shí)直接選擇該vcpu,選擇結(jié)束,否則執(zhí)行步驟s12;
s12,如果vcpu中斷隊(duì)列irqq為空,則設(shè)vcpu1為null,進(jìn)入步驟s13,否則,按照靜態(tài)優(yōu)先級(jí)從高到低依次遍歷irqq中的每一個(gè)vcpu,如果該vcpu可以在當(dāng)前cpu上運(yùn)行,即當(dāng)前cpu在該vcpu的cpu池中,則設(shè)該vcpu為vcpu1,然后進(jìn)入步驟s13;
s13,按照靜態(tài)優(yōu)先級(jí)從高到低的順序依次掃描vcpu就緒隊(duì)列的每個(gè)子隊(duì)列runq[i],其中,i值越小,子隊(duì)列的優(yōu)先級(jí)越高;
s14,如果runq[i]不為空,則選取runq[i]上第一個(gè)可以在當(dāng)前cpu上運(yùn)行的vcpu2,即當(dāng)前cpu在vcpu2的cpu池中,然后執(zhí)行步驟s15,否則,如果runq[i]為空或者找不到符合條件的vcpu,返回步驟s13選取下一優(yōu)先級(jí)對(duì)應(yīng)的子隊(duì)列runq[i+1];
s15,如果vcpu1為null,或者,vcpu1的靜態(tài)優(yōu)先級(jí)低于管理分區(qū)的靜態(tài)優(yōu)先級(jí)(屬于非實(shí)時(shí)分區(qū))且vcpu2的靜態(tài)優(yōu)先級(jí)高于管理分區(qū)的靜態(tài)優(yōu)先級(jí)(屬于實(shí)時(shí)分區(qū)),則優(yōu)先選擇vcpu2,否則優(yōu)先選擇vcpu1,挑選結(jié)束;
s16,如果掃描完runq和irqq均沒有符合條件的vcpu,那么直接返回null,代表選擇idlevcpu,vcpu選擇結(jié)束。
3.vcpu搶占算法
在系統(tǒng)運(yùn)行的某些情況下,比如喚醒某個(gè)vcpu、或者在調(diào)度末尾時(shí)會(huì)觸發(fā)vcpu搶占算法。設(shè)引起搶占的vcpu為vcpux,vcpux上次運(yùn)行時(shí)所在的cpu為cpu1,結(jié)合圖3,那么vcpu搶占算法可以描述如下:
s21,首先判斷引起搶占的vcpux是否為idlevcpu,如果是,則直接結(jié)束,否則進(jìn)入步驟s22;
s22,判斷cpu1上是否正在運(yùn)行idlevcpu,如果是,則表明cpu1此時(shí)處于空閑狀態(tài),那么觸發(fā)cpu1的調(diào)度軟中斷,使之重新發(fā)起調(diào)度,vcpux將在cpu1下次執(zhí)行調(diào)度時(shí)直接搶占cpu1,搶占結(jié)束,否則執(zhí)行步驟s23;
s23,檢查平臺(tái)中的另一個(gè)cpu,即cpu2,如果發(fā)現(xiàn)cpu2正在運(yùn)行idlevcpu,表明cpu2此時(shí)處于空閑狀態(tài),那么觸發(fā)cpu2的調(diào)度軟中斷,使之重新發(fā)起調(diào)度,vcpux將在cpu2下次執(zhí)行調(diào)度時(shí)搶占cpu2,搶占結(jié)束;否則執(zhí)行步驟s24;
s24,獲取cpu1和cpu2上正在運(yùn)行的vcpu,按照綜合優(yōu)先策略比較得出綜合優(yōu)先級(jí)最低的vcpuy,設(shè)管理分區(qū)的靜態(tài)優(yōu)先級(jí)為prio0,vcpux的靜態(tài)優(yōu)先級(jí)為priox,中斷標(biāo)識(shí)為irq_flagx,而vcpuy的靜態(tài)優(yōu)先級(jí)為prioy,中斷標(biāo)識(shí)為irq_flagy,如果vcpux的綜合優(yōu)先級(jí)比vcpuy更高,即滿足如下5種情況之一:
(1)irq_flagx不等于0,priox等于prio0,即有中斷的管理分區(qū)的vcpu直接搶占;
(2)irq_flagx和irq_flagy都等于0,priox小于prioy;
(3)irq_flagx和irq_flagy都不等于0,priox小于prioy;
(4)irq_flagx等于0,irq_flagy不等于0,priox不大于prio0,prioy大于prio0;
(5)irq_flagx不等于0,irq_flagy等于0,這種情況下,除非priox大于prio0且prioy不大于prio0,否則都認(rèn)為vcpux的綜合優(yōu)先級(jí)比vcpuy高。
那么,觸發(fā)vcpuy所在的cpu的調(diào)度軟中斷,使之重新發(fā)起調(diào)度,vcpux將在該cpu下次執(zhí)行調(diào)度時(shí)搶占該cpu,搶占結(jié)束;否則執(zhí)行步驟s25;
s25,vcpux由于綜合優(yōu)先級(jí)較低,沒能能搶占到cpu,搶占失敗。
結(jié)合圖4和上面的vcpu插入算法、vcpu選擇算法和vcpu搶占算法,本實(shí)施例的vcpu多核實(shí)時(shí)調(diào)度算法的基本調(diào)度流程為:
步驟01,更新vcpu就緒隊(duì)列和vcpu中斷隊(duì)列,如果之前xen為某個(gè)vcpu注入中斷時(shí),該vcpu已經(jīng)處于runq中,那么這次調(diào)度時(shí)必須將該vcpu從就緒隊(duì)列轉(zhuǎn)移到中斷隊(duì)列,針對(duì)這種情況,依次掃描runq中的每個(gè)子隊(duì)列,如果runq[i]中的vcpu的irq_flag不等于0,則將該vcpu從runq[i]中刪除,并將其插入中斷隊(duì)列irqq;
步驟02,調(diào)用vcpu選擇算法從runq或者irqq上選擇一個(gè)可以在當(dāng)前cpu上運(yùn)行的綜合優(yōu)先級(jí)最高的vcpux;
步驟03,如果步驟02中選擇的vcpux是idlevcpu,或者,當(dāng)前cpu上正在運(yùn)行的vcpu的綜合優(yōu)先級(jí)較vcpux更高(按照s24中的五種情況進(jìn)行判斷),則繼續(xù)運(yùn)行當(dāng)前vcpu,調(diào)度結(jié)束,否則進(jìn)入步驟04;
步驟04,將步驟03中選擇的vcpux從中斷隊(duì)列或者就緒隊(duì)列中刪除,然后切換上下文,使當(dāng)前cpu運(yùn)行vcpux;
步驟05,保存之前運(yùn)行的vcpu的上下文,并調(diào)用vcpu插入算法將這個(gè)vcpu插入就緒隊(duì)列或者中斷隊(duì)列,然后進(jìn)入步驟06;
步驟06,調(diào)用vcpu搶占算法使之前運(yùn)行的vcpu實(shí)施搶占,如果搶占成功,則再次進(jìn)入步驟01進(jìn)行調(diào)度,否則調(diào)度結(jié)束。
以上對(duì)本發(fā)明實(shí)施例所提供的基于xen的vcpu多核實(shí)時(shí)調(diào)度算法進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本發(fā)明的限制。