本發(fā)明涉及云計(jì)算技術(shù)領(lǐng)域,尤其涉及一種基于erlang虛擬機(jī)和linux容器技術(shù)的云計(jì)算方法。
背景技術(shù):
cgroup技術(shù)是controlgroups的縮寫,是linux內(nèi)核提供的一種可以限制、記錄、隔離進(jìn)程組(processgroups)所使用的物理資源(如cpu內(nèi)存i/o等等)的機(jī)制。cgroup技術(shù)不是全新創(chuàng)造的,它將進(jìn)程管理從cpuset中剝離出來(lái),cgroup也是linux容器(lxc)為實(shí)現(xiàn)虛擬化所使用的資源管理手段。cgroup本身是提供將進(jìn)程進(jìn)行分組化管理的功能和接口的基礎(chǔ)結(jié)構(gòu),i/o或內(nèi)存的分配控制等具體的資源管理功能是通過(guò)這個(gè)功能來(lái)實(shí)現(xiàn)的。這些具體的資源管理功能稱為cgroup子系統(tǒng)或控制器。cgroup子系統(tǒng)有控制內(nèi)存的memory控制器、控制進(jìn)程調(diào)度的cpu控制器等。運(yùn)行中的內(nèi)核可以使用的cgroup子系統(tǒng)由代碼.../proc/cgroup來(lái)確認(rèn)。
任務(wù)(task):cgroup的術(shù)語(yǔ)中,任務(wù)就表示系統(tǒng)的一個(gè)進(jìn)程。
控制組(cgroup):cgroup中的資源控制都以控制組為單位實(shí)現(xiàn)??刂平M表示按某種資源控制標(biāo)準(zhǔn)劃分而成的任務(wù)組,包含一個(gè)或多個(gè)子系統(tǒng)。一個(gè)任務(wù)可以加入某個(gè)控制組,也可以從某個(gè)控制組遷移到另外一個(gè)控制組。
子系統(tǒng)(subsystem):cgroup中的子系統(tǒng)就是一個(gè)資源調(diào)度控制器(resourcecontroller)。比如cpu子系統(tǒng)可以控制cpu時(shí)間分配,內(nèi)存子系統(tǒng)可以限制cgroup內(nèi)存使用量。
層級(jí)(hierarchy):層級(jí)由一系列控制組以一個(gè)樹(shù)狀結(jié)構(gòu)排列而成,每個(gè)層級(jí)通過(guò)綁定對(duì)應(yīng)的子系統(tǒng)進(jìn)行資源調(diào)度。層級(jí)中的控制組節(jié)點(diǎn)可以包含零或多個(gè)子節(jié)點(diǎn),子節(jié)點(diǎn)繼承父節(jié)點(diǎn)的屬性。整個(gè)系統(tǒng)可以有多個(gè)層級(jí)。
erlang是一種通用的面向并發(fā)的編程語(yǔ)言,它由瑞典電信設(shè)備制造商愛(ài)立信所轄的cs-lab開(kāi)發(fā),目的是創(chuàng)造一種可以應(yīng)對(duì)大規(guī)模并發(fā)活動(dòng)的編程語(yǔ)言和運(yùn)行環(huán)境。erlang是運(yùn)行于虛擬機(jī)的解釋性語(yǔ)言,但是現(xiàn)在也包含有烏普薩拉大學(xué)高性能erlang計(jì)劃(hipe)開(kāi)發(fā)的本地代碼編譯器,自r11b-4版本開(kāi)始,erlang也開(kāi)始支持腳本式解釋器。在編程范型上,erlang屬于多重范型編程語(yǔ)言,涵蓋函數(shù)式、并發(fā)式及分布式。
erlang是一個(gè)結(jié)構(gòu)化,動(dòng)態(tài)類型編程語(yǔ)言,內(nèi)建并行計(jì)算支持。最初是由愛(ài)立信專門為通信應(yīng)用設(shè)計(jì)的,比如控制交換機(jī)或者變換協(xié)議等,因此非常適合于構(gòu)建分布式,實(shí)時(shí)軟并行計(jì)算系統(tǒng)。使用erlang編寫出的應(yīng)用運(yùn)行時(shí)通常由成千上萬(wàn)個(gè)輕量級(jí)進(jìn)程組成,并通過(guò)消息傳遞相互通訊。進(jìn)程間上下文切換對(duì)于erlang來(lái)說(shuō)僅僅只是一兩個(gè)環(huán)節(jié),比起c程序的線程切換要高效得多。使用erlang來(lái)編寫分布式應(yīng)用要簡(jiǎn)單的多,因?yàn)樗姆植际綑C(jī)制是透明的:對(duì)于程序來(lái)說(shuō)并不知道自己是在分布式運(yùn)行。erlang運(yùn)行時(shí)環(huán)境是一個(gè)虛擬機(jī),代碼一經(jīng)編譯,同樣可以隨處運(yùn)行。它在運(yùn)行時(shí)系統(tǒng)甚至允許代碼在不被中斷的情況下更新。另外如果需要更高效的話,字節(jié)代碼也可以編譯成本地代碼運(yùn)行。因此,erlang虛擬機(jī)本身就具有erlang編程語(yǔ)言的優(yōu)點(diǎn)。
云計(jì)算通過(guò)分散計(jì)算資源的集中部署,能有效降低it成本并提升it服務(wù)質(zhì)量,已得到廣泛的認(rèn)可和應(yīng)用。目前大多數(shù)iaas層云計(jì)算技術(shù)(包括openstack、xen、vmware)都主要基于虛擬機(jī)技術(shù),在追求靈活性的過(guò)程中損失了一部分計(jì)算性能。而且現(xiàn)有技術(shù)中的云計(jì)算平臺(tái)對(duì)計(jì)算機(jī)物理資源的分配方法相對(duì)復(fù)雜。所以,如何構(gòu)建一個(gè)充分利用資源,使計(jì)算能力高效的云計(jì)算平臺(tái)是一個(gè)亟待解決的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
為解決上述技術(shù)問(wèn)題,本發(fā)明提出了一種基于erlang虛擬機(jī)和linux容器技術(shù)的云計(jì)算方法,以實(shí)現(xiàn)云計(jì)算平臺(tái)計(jì)算能力的高效性。
為此,本發(fā)明采用如下技術(shù)方案:
一方面,本發(fā)明提供了一種云計(jì)算方法,所述方法包括下述步驟:s1:每個(gè)linux容器系統(tǒng)創(chuàng)建一個(gè)cgroup層級(jí),每個(gè)erlang虛擬機(jī)進(jìn)程對(duì)應(yīng)一個(gè)所述cgroup層級(jí),通過(guò)cgroup技術(shù)提供的子系統(tǒng)對(duì)所述cgroup層級(jí)下的每個(gè)cgroup子節(jié)點(diǎn)分配物理資源權(quán)重wn;s2:將所述cgroup層級(jí)下的每個(gè)所述cgroup子節(jié)點(diǎn)與同一所述cgroup層級(jí)對(duì)應(yīng)的erlang虛擬機(jī)的進(jìn)程調(diào)度者一對(duì)一映射,使得所述進(jìn)程調(diào)度者對(duì)進(jìn)程任務(wù)的調(diào)度受到對(duì)應(yīng)的cgroup子節(jié)點(diǎn)的物理資源分配的限制;s3:修改所述erlang虛擬機(jī)的任務(wù)遷移機(jī)制,使所述進(jìn)程調(diào)度者中的空閑和低負(fù)載部分得到利用,使所述進(jìn)程調(diào)度者中的滿載部分不分配進(jìn)程任務(wù)。
進(jìn)一步的,所述步驟s3包括下述子步驟:s31:所述容器系統(tǒng)以一定頻率測(cè)量所述進(jìn)程調(diào)度者可運(yùn)行的最大進(jìn)程數(shù)m,將所述最大進(jìn)程數(shù)m乘以每個(gè)進(jìn)程調(diào)度者對(duì)應(yīng)的cgroup子節(jié)點(diǎn)的物理資源分配權(quán)重wn,得到所述進(jìn)程調(diào)度者應(yīng)承擔(dān)的進(jìn)程任務(wù)數(shù)tn;s32:根據(jù)所得進(jìn)程任務(wù)數(shù)tn和所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù),檢查所述進(jìn)程調(diào)度者的狀態(tài);當(dāng)所述進(jìn)程調(diào)度者所有任務(wù)運(yùn)行結(jié)束時(shí)或進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)小于某個(gè)閾值tx(tx<tn)時(shí),所述進(jìn)程調(diào)度者經(jīng)由如下方式中的至少一種遷入路徑,從其它進(jìn)程調(diào)度者的運(yùn)行隊(duì)列中遷入一個(gè)或多個(gè)進(jìn)程任務(wù),包括從第一相鄰的進(jìn)程調(diào)度者遷入,隨機(jī)從一個(gè)運(yùn)行隊(duì)列不為空的進(jìn)程調(diào)度者遷入,隨機(jī)從實(shí)時(shí)運(yùn)行進(jìn)程數(shù)大于某個(gè)閾值ty(tx<ty<tn)的進(jìn)程調(diào)度者遷入,步驟結(jié)束;否則執(zhí)行步驟s33;s33:當(dāng)所述進(jìn)程調(diào)度者被分配新進(jìn)程時(shí),檢查被分配的所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否已經(jīng)大于或等于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn,如果不大于且不等于則遷入所述新進(jìn)程;否則經(jīng)由如下方式中的至少一種遷出路徑將所述新進(jìn)程遷出到其他進(jìn)程調(diào)度者,包括向第二相鄰的進(jìn)程調(diào)度者遷出,隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者遷出。
進(jìn)一步的,所述步驟s33可重復(fù)執(zhí)行,當(dāng)所述第二相鄰的進(jìn)程調(diào)度者或隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)仍然已經(jīng)大于或等于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn,則繼續(xù)經(jīng)由如下方式中的至少一種遷出路徑將所述新進(jìn)程遷出到其他進(jìn)程調(diào)度者,包括向第二相鄰的進(jìn)程調(diào)度者遷出,隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者遷出,直到找到一個(gè)實(shí)時(shí)運(yùn)行進(jìn)程數(shù)小于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn的進(jìn)程調(diào)度者。
進(jìn)一步的,所述方法還包括下述子步驟:
s34:檢查所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否大于某個(gè)閾值ty,若大于則經(jīng)由如下方式中的至少一種遷出路徑將其運(yùn)行隊(duì)列中的一個(gè)或多個(gè)進(jìn)程任務(wù)遷出到其他進(jìn)程調(diào)度者,包括向第二相鄰的進(jìn)程調(diào)度者遷出,隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者遷出;
進(jìn)一步的,所述步驟s31的所述測(cè)量頻率為每秒鐘4次。
進(jìn)一步的,所述步驟s2是通過(guò)開(kāi)啟與所述cgroup層級(jí)下的所述cgroup子節(jié)點(diǎn)個(gè)數(shù)相同的進(jìn)程調(diào)度者數(shù)量的方式,以實(shí)現(xiàn)所述cgroup子節(jié)點(diǎn)與所述進(jìn)程調(diào)度者一對(duì)一映射。
進(jìn)一步的,所述步驟s32中的所述第一相鄰為進(jìn)程調(diào)度者序列中的前一個(gè)。
進(jìn)一步的,所述步驟s33中的所述第二相鄰為進(jìn)程調(diào)度者序列中的后一個(gè)。
另一方面,本發(fā)明提供了一種云計(jì)算系統(tǒng),其特征在于,包括存儲(chǔ)器,存放有程序;處理器,運(yùn)行所述程序,以執(zhí)行如上述所述的方法。
再一方面,本發(fā)明提供了一種包含計(jì)算機(jī)程序的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)程序可操作來(lái)使計(jì)算機(jī)執(zhí)行如上述所述的方法。
本發(fā)明的有益效果是:本發(fā)明的技術(shù)方案將linux容器的cgroup技術(shù)構(gòu)建在對(duì)稱多處理器(symmetricmulti-processor,smp)結(jié)構(gòu)的物理計(jì)算資源上,因?yàn)橄鄬?duì)于通過(guò)虛擬機(jī)監(jiān)視器(hypervisor)創(chuàng)建一個(gè)完整的操作系統(tǒng),linux容器利用linux的cgroup機(jī)制對(duì)進(jìn)程做了cpu、內(nèi)存和網(wǎng)絡(luò)方面的隔離,直接使用原生資源,沒(méi)有額外的操作系統(tǒng)開(kāi)銷,所以計(jì)算機(jī)物理資源利用率高,比通過(guò)虛擬機(jī)監(jiān)視器的計(jì)算效率高。并且充分基于erlang/otp13b版本之后對(duì)smp計(jì)算機(jī)結(jié)構(gòu)的支持,使erlang虛擬機(jī)的任務(wù)調(diào)度和均衡機(jī)制與linuxcgroup的資源隔離機(jī)制進(jìn)行映射,每個(gè)系統(tǒng)進(jìn)程可以支持1至1024個(gè)進(jìn)程調(diào)度者(scheduler),且每個(gè)scheduler擁有自己的運(yùn)行隊(duì)列(runqueue),使得當(dāng)scheduler增加時(shí)不會(huì)彼此阻塞,充分利用了計(jì)算機(jī)物理資源,保證了高并發(fā)計(jì)算能力。在進(jìn)程調(diào)度者和計(jì)算物理資源映射的基礎(chǔ)上,進(jìn)一步修改并優(yōu)化了任務(wù)遷移機(jī)制(migrationlogic),使任務(wù)分配具體到運(yùn)行隊(duì)列級(jí)別,進(jìn)而在多個(gè)運(yùn)行隊(duì)列中高效而均衡的運(yùn)行。因此,本發(fā)明的技術(shù)方案具備計(jì)算能力的高效性。
附圖說(shuō)明
圖1是本發(fā)明的云計(jì)算方法的流程圖;
圖2是本發(fā)明所涉及的基于erlang虛擬機(jī)和cgroup技術(shù)的云計(jì)算方法的結(jié)構(gòu)圖;
圖3是本發(fā)明所涉及的linux容器中每個(gè)cgroup節(jié)點(diǎn)的資源分配權(quán)重示意圖;
圖4是本發(fā)明所涉及的linux容器中每個(gè)cgroup節(jié)點(diǎn)與erlang虛擬機(jī)中的每個(gè)進(jìn)程調(diào)度者的映射圖;
圖5是本發(fā)明的云計(jì)算方法中步驟s3的子流程圖;
圖6是本發(fā)明所涉及的linux容器中erlang進(jìn)程調(diào)度與cgroup資源調(diào)度映射的原理示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示是本實(shí)施例提供的一種云計(jì)算方法的流程圖,為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,詳述如下:
s1:每個(gè)linux容器系統(tǒng)創(chuàng)建一個(gè)cgroup層級(jí),每個(gè)erlang虛擬機(jī)進(jìn)程對(duì)應(yīng)一個(gè)所述cgroup層級(jí),通過(guò)cgroup技術(shù)提供的子系統(tǒng)對(duì)所述cgroup層級(jí)下的每個(gè)cgroup子節(jié)點(diǎn)分配物理資源權(quán)重wn;
本實(shí)施例的計(jì)算容器是基于linux內(nèi)核版本2.6.29及其以上版本,和erlang的r13b以上版本構(gòu)建,在linux內(nèi)核源碼基礎(chǔ)上,基于cgroup系統(tǒng)實(shí)現(xiàn)。如圖2所示,因?yàn)閘inux內(nèi)核(linuxkernel)已經(jīng)集成了cgroup管理系統(tǒng),所以由linuxkernel直接管理多個(gè)erlang虛擬機(jī)(erlangvm)進(jìn)程,這些erlang虛擬機(jī)進(jìn)程偽裝成host進(jìn)程共存,每個(gè)虛擬機(jī)共用底層硬件部分,但是每個(gè)虛擬機(jī)有單獨(dú)的操作系統(tǒng),虛擬機(jī)之間又互相隔離進(jìn)程和資源。這樣由單個(gè)操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求的方式就稱為容器。可以通過(guò)在容器配置一次開(kāi)發(fā)環(huán)境,然后通過(guò)復(fù)制容器,形成多個(gè)虛擬機(jī);也可以在多個(gè)容器中分別配置開(kāi)發(fā)環(huán)境,形成多個(gè)虛擬機(jī)。在每個(gè)容器創(chuàng)建一個(gè)cgroup層級(jí),這樣每個(gè)erlang虛擬機(jī)進(jìn)程就對(duì)應(yīng)一個(gè)cgroup層級(jí)。cgroup子系統(tǒng)是物理資源控制器,主要是通過(guò)cpuset子系統(tǒng)管理cpu資源,memory子系統(tǒng)管理內(nèi)存資源和blkio子系統(tǒng)管理輸入/輸出資源。在一個(gè)容器中,這些cpuset,memory子系統(tǒng)可以掛載到一個(gè)目錄下,但是當(dāng)cpuset子系統(tǒng)已經(jīng)被掛載過(guò)一次之后,就不能再掛載到另外一個(gè)目錄。如圖3所示,在/cpu_mem_cg目錄下是掛載了cpuset的子系統(tǒng),在cgroup層級(jí)下有cg1,cg2,…,cgn,n個(gè)子節(jié)點(diǎn),根據(jù)用戶的實(shí)際需要對(duì)每個(gè)cgroup子節(jié)點(diǎn)分配cpu使用權(quán)重wn,即總cpu資源的使用占比,例如,為cg1分配20%的cpu資源。當(dāng)需要對(duì)每個(gè)cgroup子節(jié)點(diǎn)分配內(nèi)存使用權(quán)重時(shí),只需要將memory子系統(tǒng)附加到該容器的cgroup層級(jí)上即可。
s2:將所述cgroup層級(jí)下的每個(gè)所述cgroup子節(jié)點(diǎn)與同一所述cgroup層級(jí)對(duì)應(yīng)的erlang虛擬機(jī)的進(jìn)程調(diào)度者一對(duì)一映射,使得所述進(jìn)程調(diào)度者對(duì)進(jìn)程任務(wù)的調(diào)度受到對(duì)應(yīng)的cgroup子節(jié)點(diǎn)的物理資源分配的限制;
啟動(dòng)該容器中的erlang虛擬機(jī),在erlang虛擬機(jī)啟動(dòng)與cgroup層級(jí)下的cgroup子節(jié)點(diǎn)個(gè)數(shù)相同的進(jìn)程調(diào)度者,使進(jìn)程調(diào)度者和cgroup子節(jié)點(diǎn)一對(duì)一映射,如圖4所示。這就使得存在于每個(gè)cgroup子節(jié)點(diǎn)中的任務(wù)(task)與erlang虛擬機(jī)中的進(jìn)程調(diào)度者所擁有的運(yùn)行隊(duì)列(runqueue)映射起來(lái),從而進(jìn)程調(diào)度者對(duì)進(jìn)程任務(wù)的調(diào)度受到對(duì)應(yīng)的cgroup子節(jié)點(diǎn)的物理資源分配的限制。
s3:修改所述erlang虛擬機(jī)的任務(wù)遷移機(jī)制,使所述進(jìn)程調(diào)度者中的空閑和低負(fù)載部分得到利用,使所述進(jìn)程調(diào)度者中的滿載部分不分配進(jìn)程任務(wù)。
erlang虛擬機(jī)在r13b版本之后對(duì)對(duì)稱多處理器(smp)計(jì)算機(jī)架構(gòu)做了很好的支持,從過(guò)去的多個(gè)進(jìn)程調(diào)度者(scheduler)共享一個(gè)運(yùn)行隊(duì)列(runqueue)的方式改變?yōu)槊總€(gè)進(jìn)程調(diào)度者擁有獨(dú)立的運(yùn)行隊(duì)列,這樣可以通過(guò)利用多核處理器對(duì)任務(wù)的分擔(dān),極大減少了由于鎖沖突造成的系統(tǒng)性能下降。并且針對(duì)多個(gè)運(yùn)行隊(duì)列,erlang虛擬機(jī)還自身存在一種任務(wù)遷移機(jī)制,作用是從系統(tǒng)中收集的統(tǒng)計(jì)數(shù)據(jù),控制和平衡運(yùn)行隊(duì)列。但是由于進(jìn)程任務(wù)調(diào)度現(xiàn)在還受到物理資源分配的限制,需要對(duì)任務(wù)遷移機(jī)制進(jìn)行修改以滿足限制的要求。
進(jìn)一步的,步驟s3還包括下述子步驟,如圖5所示:
s31:所述容器系統(tǒng)以一定頻率測(cè)量所述進(jìn)程調(diào)度者可運(yùn)行的最大進(jìn)程數(shù)m,將所述最大進(jìn)程數(shù)m乘以每個(gè)進(jìn)程調(diào)度者對(duì)應(yīng)的cgroup子節(jié)點(diǎn)的物理資源分配權(quán)重wn,得到所述進(jìn)程調(diào)度者應(yīng)承擔(dān)的進(jìn)程任務(wù)數(shù)tn;
作為一種可選的實(shí)施方式,容器系統(tǒng)以每秒鐘4次實(shí)時(shí)測(cè)量erlang虛擬機(jī)下所有開(kāi)啟的進(jìn)程調(diào)度者可運(yùn)行的最大進(jìn)程數(shù)m,由于步驟s2中進(jìn)程調(diào)度者和cgroup子節(jié)點(diǎn)一對(duì)一映射關(guān)系,每個(gè)cgroup子節(jié)點(diǎn)又分配了物理資源分配權(quán)重wn,所以可通過(guò)計(jì)算m*wn=tn,得到每個(gè)進(jìn)程調(diào)度者能夠在有限物理資源下應(yīng)承擔(dān)的進(jìn)程任務(wù)數(shù)tn。
s32:根據(jù)所得進(jìn)程任務(wù)數(shù)tn和所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù),檢查所述進(jìn)程調(diào)度者的狀態(tài);當(dāng)所述進(jìn)程調(diào)度者所有任務(wù)運(yùn)行結(jié)束時(shí)或進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)小于某個(gè)閾值tx(tx<tn)時(shí),所述進(jìn)程調(diào)度者經(jīng)由如下方式中的至少一種遷入路徑,從其它進(jìn)程調(diào)度者的運(yùn)行隊(duì)列中遷入一個(gè)或多個(gè)進(jìn)程任務(wù),包括從第一相鄰的進(jìn)程調(diào)度者遷入,隨機(jī)從一個(gè)運(yùn)行隊(duì)列不為空的進(jìn)程調(diào)度者遷入,隨機(jī)從實(shí)時(shí)運(yùn)行進(jìn)程數(shù)大于某個(gè)閾值ty(tx<ty<tn)的進(jìn)程調(diào)度者遷入,步驟結(jié)束;否則執(zhí)行步驟s33;
進(jìn)程調(diào)度者會(huì)出現(xiàn)它所對(duì)應(yīng)的運(yùn)行隊(duì)列中所有任務(wù)都結(jié)束時(shí)即空閑狀態(tài),也會(huì)出現(xiàn)所對(duì)應(yīng)的運(yùn)行隊(duì)列中的實(shí)際運(yùn)行進(jìn)程數(shù)小于某個(gè)閾值tx(tx<tn)時(shí)即低負(fù)載狀態(tài)。當(dāng)某個(gè)進(jìn)程調(diào)度者處于空閑或低負(fù)載狀態(tài)時(shí),為了使計(jì)算容器整體高效運(yùn)行起來(lái),用編程方式控制空閑或低負(fù)載的進(jìn)程調(diào)度者主動(dòng)遷入任務(wù),放進(jìn)其所對(duì)應(yīng)的運(yùn)行隊(duì)列之中。因?yàn)橛?jì)算機(jī)在對(duì)進(jìn)程調(diào)度者進(jìn)行調(diào)度時(shí)是按順序調(diào)用,排在前面的進(jìn)程調(diào)度者會(huì)先被分配任務(wù),所以在某個(gè)進(jìn)程調(diào)度者需要遷入任務(wù)時(shí),也會(huì)優(yōu)先選擇進(jìn)程調(diào)度者序列中的前一個(gè)進(jìn)程調(diào)度者?;蛘呤峭ㄟ^(guò)隨機(jī)找到一個(gè)運(yùn)行隊(duì)列不為空的進(jìn)程調(diào)度者遷入。還可以從實(shí)時(shí)運(yùn)行進(jìn)程數(shù)大于某個(gè)閾值ty(tx<ty<tn)的進(jìn)程調(diào)度者遷入,作用是使高負(fù)載的進(jìn)程調(diào)度者的進(jìn)程任務(wù)可以流向空閑和低負(fù)載的進(jìn)程調(diào)度者。
s33:當(dāng)所述進(jìn)程調(diào)度者被分配新進(jìn)程時(shí),檢查被分配的所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否已經(jīng)大于或等于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn,如果不大于且不等于則遷入所述新進(jìn)程;否則經(jīng)由如下方式中的至少一種遷出路徑將所述新進(jìn)程遷出到其他進(jìn)程調(diào)度者,包括向第二相鄰的進(jìn)程調(diào)度者遷出,隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者遷出。
當(dāng)某個(gè)進(jìn)程人為的需要更多物理資源運(yùn)行或其他情況,計(jì)算機(jī)在將該進(jìn)程分配個(gè)某個(gè)進(jìn)程調(diào)度者時(shí),不會(huì)先考慮進(jìn)程調(diào)度者的狀態(tài)。因此當(dāng)某個(gè)進(jìn)程調(diào)度者被分配新進(jìn)程時(shí),需要先檢查被分配的進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否已經(jīng)大于或等于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn,如果不大于且不等于則遷入新進(jìn)程;否則就需要將該新進(jìn)程遷出到其他進(jìn)程調(diào)度者。同樣由于計(jì)算機(jī)在對(duì)進(jìn)程調(diào)度者進(jìn)行調(diào)度時(shí)是按順序調(diào)用,排在后面的進(jìn)程調(diào)度者往往會(huì)未被分配任務(wù)或分配少量任務(wù),所以在某個(gè)進(jìn)程調(diào)度者需要遷出任務(wù)時(shí),也會(huì)優(yōu)先選擇進(jìn)程調(diào)度者序列中的后一個(gè)進(jìn)程調(diào)度者。或者是通過(guò)隨機(jī)找到一個(gè)除自身之外的其它進(jìn)程調(diào)度者遷出。作為一種可選的實(shí)施方式,步驟s33可重復(fù)執(zhí)行,當(dāng)被找到的進(jìn)程調(diào)度者需要遷入該進(jìn)程時(shí),對(duì)于該進(jìn)程調(diào)度者同樣是一個(gè)被分配新進(jìn)程的過(guò)程。因此會(huì)再次檢測(cè)被找到的進(jìn)程調(diào)度者即第二相鄰的進(jìn)程調(diào)度者或隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者中,實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否已經(jīng)大于或等于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn,如果不大于且不等于則遷入所述新進(jìn)程;否則繼續(xù)經(jīng)由如下方式中的至少一種遷出路徑將所述新進(jìn)程遷出到其他進(jìn)程調(diào)度者,包括向第二相鄰的進(jìn)程調(diào)度者遷出,隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者遷出,直到找到一個(gè)實(shí)時(shí)運(yùn)行進(jìn)程數(shù)小于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn的進(jìn)程調(diào)度者。
進(jìn)一步的,所述方法還包括下述子步驟:
s34:檢查所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否大于某個(gè)閾值ty,若大于則經(jīng)由如下方式中的至少一種遷出路徑將其運(yùn)行隊(duì)列中的一個(gè)或多個(gè)進(jìn)程任務(wù)遷出到其他進(jìn)程調(diào)度者,包括向第二相鄰的進(jìn)程調(diào)度者遷出,隨機(jī)向除自身之外的其它進(jìn)程調(diào)度者遷出;
該步驟是使計(jì)算機(jī)可以主動(dòng)檢測(cè)進(jìn)程調(diào)度者是否處于高負(fù)載狀態(tài)即實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否大于某個(gè)閾值ty,當(dāng)處于高負(fù)載時(shí)主動(dòng)遷出任務(wù)。遷出路徑同樣采用向第二相鄰的進(jìn)程調(diào)度者遷出,或者是通過(guò)隨機(jī)找到一個(gè)除自身之外的其它進(jìn)程調(diào)度者遷出。作為一種可選的實(shí)施方式,當(dāng)步驟s33中進(jìn)程調(diào)度者被分配新進(jìn)程時(shí),檢查到被分配的所述進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)不大于且不等于它所對(duì)應(yīng)承擔(dān)的最大任務(wù)數(shù)tn后,還要繼續(xù)執(zhí)行步驟s34,檢查被分配的進(jìn)程調(diào)度者的實(shí)時(shí)運(yùn)行進(jìn)程數(shù)是否大于某個(gè)閾值ty,如果不大于才遷入該新進(jìn)程。如果大于閾值ty,則繼續(xù)執(zhí)行步驟s33。因此步驟s32、s33和s34的作用是使計(jì)算容器中每個(gè)cgroup子節(jié)點(diǎn)下的多個(gè)進(jìn)程任務(wù)(tasks)可以和每個(gè)進(jìn)程調(diào)度者中的運(yùn)行隊(duì)列映射起來(lái),如圖6所示,使得每個(gè)進(jìn)程任務(wù)可以具體分配到某個(gè)空閑或任務(wù)進(jìn)程數(shù)少的運(yùn)行隊(duì)列中,使進(jìn)程任務(wù)更加高效而均衡地執(zhí)行。
以上內(nèi)容是結(jié)合具體/優(yōu)選的實(shí)施方式對(duì)本發(fā)明所作的進(jìn)一步詳細(xì)說(shuō)明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說(shuō)明。對(duì)于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,其還可以對(duì)這些已描述的實(shí)施方式做出若干替代或變型,而這些替代或變型方式都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。