專(zhuān)利名稱(chēng):異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法
技術(shù)領(lǐng)域:
本發(fā)明公開(kāi)了一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法,涉及計(jì)算機(jī)操作系統(tǒng)領(lǐng)域。屬于計(jì)算機(jī)技術(shù)領(lǐng)域。
背景技術(shù):
隨著處理器性能和速度的不斷提高,功耗和散熱成為未來(lái)高性能系統(tǒng)設(shè)計(jì)的重要挑戰(zhàn)。功耗的增加和熱量不僅帶來(lái)更高的熱封裝及散熱成本,而且增加了出現(xiàn)故障的可能性。指令級(jí)并行已經(jīng)力不從心,結(jié)構(gòu)設(shè)計(jì)人員開(kāi)始轉(zhuǎn)向線(xiàn)程級(jí)并行(TLP)的研究,多核處理器就是這一研究的產(chǎn)物。隨著研究的深入,研究人員發(fā)現(xiàn),同樣一個(gè)并行程序,在功耗與面積相同的前提下,在數(shù)量較多的簡(jiǎn)單核上運(yùn)行比在數(shù)量較少的復(fù)雜核上運(yùn)行效率要高。同時(shí)也發(fā)現(xiàn),程序的行為具有多樣性,表現(xiàn)在兩個(gè)方面,一是TLP的多樣性,二是微體系結(jié)構(gòu)特征的多樣性。所謂TLP的多樣性是指既有串行程序,又有并行程序,并行程序中串行部分所占比例也有多有少。所謂微體系結(jié)構(gòu)特征的多樣性是指程序大致可分為三類(lèi), cpu-bound,memory-bound, I/O-bound。cpu-bound指程序具有很高指令級(jí)并行度和數(shù)據(jù)局部性,這類(lèi)程序CPU利用率很高,而memory-bound和Ι/0-bound程序(為敘述方便,下文只提及memory-bound)卻存在訪存延遲和1/0延遲,使得CPU利用率不高,如果在快核上運(yùn)行,性能提升不明顯卻浪費(fèi)了功耗,如果在慢核上運(yùn)行,性能不降或下降很少但節(jié)省了功耗。于是,研究人員認(rèn)為,如果在多核處理器中引入不對(duì)稱(chēng)性,分別迎合不同屬性的應(yīng)用程序,將是降低功耗、提高功效的有效方法,這種引入了不對(duì)稱(chēng)性的多核處理器,稱(chēng)之為異構(gòu)多核處理器(Heterogeneous CMP)或非對(duì)稱(chēng)多核處理器(Asymmetric CMP)。由于現(xiàn)有的操作系統(tǒng)不支持異構(gòu),因而還看不到單指令集的異構(gòu)多核處理器,但 HP、Intel以及部分大學(xué)都在積極進(jìn)行異構(gòu)感知的操作系統(tǒng)研究。研究的核心在于如何將線(xiàn)程合理的分配到最佳的核上運(yùn)行。但實(shí)現(xiàn)這種合理的映射除了知道核的屬性外,還要清楚線(xiàn)程的屬性,傳統(tǒng)調(diào)度器絲毫沒(méi)有考慮到程序行為的差異,而如何將程序行為分析與操作系統(tǒng)調(diào)度有機(jī)結(jié)合是另一個(gè)必須解決的關(guān)鍵問(wèn)題,信息是否準(zhǔn)確、運(yùn)行時(shí)開(kāi)銷(xiāo)、對(duì)程序員是否透明是考慮的重點(diǎn)。最后就是負(fù)載均衡調(diào)度策略,由于頻率的差異,CPU的負(fù)載需要重新折算,在遷移時(shí),還要考慮目標(biāo)core的屬性與待遷移線(xiàn)程是否符合前面敘述的規(guī)則。美國(guó)加州大學(xué)圣迭戈分校的R. Kumar博士 [1]提出的動(dòng)態(tài)分析算法是把程序在每個(gè)核上試探性運(yùn)行一小段時(shí)間,根據(jù)試探運(yùn)行期間采樣的數(shù)據(jù)找出最優(yōu)的核,從而把線(xiàn)程調(diào)度上去。顯然,這種試探運(yùn)行的方法引入了大量開(kāi)銷(xiāo),可擴(kuò)展性差。來(lái)自Intel的Tong Ii博士通過(guò)修改Linux操作系統(tǒng)中與負(fù)載均衡相關(guān)的函數(shù)[2]來(lái)實(shí)現(xiàn)異構(gòu)感知,但沒(méi)有考慮線(xiàn)程遷移時(shí)程序行為的差異,同時(shí),完全改變了 Linux內(nèi)核現(xiàn)有的調(diào)度機(jī)制,調(diào)度域的作用也無(wú)法體現(xiàn)出來(lái)。來(lái)自Intel的Koufaty等人提出用內(nèi)部和外部延遲來(lái)估算bias,作為調(diào)度依據(jù)。 但作者使用了四個(gè)性能計(jì)數(shù)器來(lái)進(jìn)行事件采樣計(jì)數(shù),包括提交的指令數(shù)、片外請(qǐng)求、微操作延遲周期數(shù)和資源延遲。對(duì)于性能計(jì)數(shù)器少于四個(gè)的處理器核無(wú)法運(yùn)行該調(diào)度算法。Fedorova的研究小組給出了一個(gè)綜合的調(diào)度算法[3]。算法的核心在于將程序的微體系結(jié)構(gòu)差異和程序的線(xiàn)程級(jí)并行性同時(shí)加以考慮。這種方法看似完美,但增加了調(diào)度算法的復(fù)雜性。在內(nèi)核中,線(xiàn)程是最小的調(diào)度單位,操作系統(tǒng)很難識(shí)別出正在調(diào)度執(zhí)行的代碼是程序的串行部分還是并行部分。更為重要的是,這不符合調(diào)度器應(yīng)該簡(jiǎn)單而高效的原則。[1]R. Kumar, D. Μ. Tullsen, and N. P. Jouppi,“面向異構(gòu)多核處理器的核心體系結(jié)構(gòu)優(yōu)化”,第15屆并行體系結(jié)構(gòu)與編譯技術(shù)國(guó)際學(xué)術(shù)會(huì)議論文集,2006,32頁(yè)[2]Τ· Li,D. Baumberger, D. A. Koufaty,and S. Hahn, “面向性能不對(duì)稱(chēng)多核體系結(jié)構(gòu)的有效操作系統(tǒng)調(diào)度”,2007年ACM/IEEE超級(jí)計(jì)算國(guó)際學(xué)術(shù)會(huì)議論文集,2007.[3] J. C. Saez, M. Prieto, A. Fedorova, and S. Blagodurov, “一種面向不對(duì)稱(chēng)多核系統(tǒng)的綜合調(diào)度器”,第15屆計(jì)算機(jī)系統(tǒng)歐洲國(guó)際會(huì)議論文集,2010,139頁(yè)-152頁(yè).Linux2. 6內(nèi)核引入了調(diào)度域模型,這種層次化的結(jié)構(gòu)模型最顯著的優(yōu)勢(shì)在于它可以根據(jù)不同級(jí)別的調(diào)度域,以微小開(kāi)銷(xiāo)保證域內(nèi)所有調(diào)度組負(fù)載的平衡,即負(fù)載均衡。該負(fù)載均衡的不足之處在于1.沒(méi)有考慮到CPU頻率與負(fù)載的正比例關(guān)系,即頻率越高的CPU,其負(fù)載能力越強(qiáng),反之亦然。因此更高頻率的CPU應(yīng)當(dāng)承擔(dān)更多的負(fù)載。2.沒(méi)有考慮任務(wù)本身的特性。一個(gè)任務(wù)占用的CPU時(shí)間占任務(wù)完成時(shí)間的比重越大,其cpu-bound的特性就越明顯,反之依然。因此在負(fù)載均衡時(shí)應(yīng)當(dāng)盡量將cpu-bound 類(lèi)型的任務(wù)分配到頻率更高的CPU上,將memory-bound類(lèi)型的任務(wù)分配到頻率更低的CPU上。
發(fā)明內(nèi)容
本發(fā)明針對(duì)上述問(wèn)題,實(shí)現(xiàn)了一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法。主要思路為構(gòu)建真實(shí)的異構(gòu)多核環(huán)境,依據(jù)邏輯CPU的頻率和其運(yùn)行隊(duì)列上的任務(wù)的特性計(jì)算該邏輯CPU的負(fù)載值,并對(duì)負(fù)載值進(jìn)行動(dòng)態(tài)更新。任務(wù)遷移時(shí),依據(jù)目標(biāo)邏輯CPU的頻率和被遷移任務(wù)的特性共同決定任務(wù)到邏輯CPU的匹配。本發(fā)明一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法,具體設(shè)計(jì)如下(一 )兼容現(xiàn)有調(diào)度域模型的異構(gòu)多核環(huán)境現(xiàn)有的負(fù)載均衡方法是在一個(gè)調(diào)度域內(nèi)的調(diào)度組之間進(jìn)行的,這充分考慮了存儲(chǔ)層次對(duì)遷移開(kāi)銷(xiāo)的影響,通常的原則是先邏輯CPU,后物理core,最后是物理CPU ;本發(fā)明所涉及的異構(gòu)多核環(huán)境是針對(duì)邏輯CPU而言的,即如果處理器支持同時(shí)多線(xiàn)程(SMT),則將各邏輯CPU設(shè)定為不同頻率;如果不支持同時(shí)超線(xiàn)程,則將各物理核設(shè)定為不同頻率。具體實(shí)現(xiàn)方法是在內(nèi)核中定義NR_CPUS個(gè)元素的數(shù)組amp_factor,每個(gè)元素存儲(chǔ)對(duì)應(yīng)CPU的頻率因子和標(biāo)志位。其中頻率因子是CPU頻率的比例系數(shù),用于CPU的負(fù)載計(jì)算;標(biāo)志位用于任務(wù)遷移時(shí)確定應(yīng)向該CPU優(yōu)先遷移哪種特性的任務(wù)。每個(gè)任務(wù)的IPC值存儲(chǔ)在task_ struct結(jié)構(gòu)新增的IPC變量中,任務(wù)遷移時(shí),首先判斷目標(biāo)邏輯CPU是快核還是慢核,如果是快核,則遷移允許被遷移的IPC最大的任務(wù),如果是慢核,則遷移允許被遷移的IPC最小的任務(wù)。本發(fā)明的設(shè)計(jì)能夠保證與原有的調(diào)度域模型完全兼容,同時(shí),負(fù)載的修改是針對(duì)最底層(邏輯CPU層)進(jìn)行的,這樣保證了調(diào)度組的負(fù)載也得到一致性的改變。由于目前還沒(méi)有商用的單指令級(jí)的異構(gòu)多核處理器,因此,無(wú)法在啟動(dòng)時(shí)獲取頻率的差異,只能在啟動(dòng)后使用Dominik Brodowski開(kāi)發(fā)的cpufreq驅(qū)動(dòng)通過(guò)sysfs修改 CPU的頻率來(lái)搭建頻率不對(duì)稱(chēng)的性能異構(gòu)多核環(huán)境,要求CPU具有EIST (Enhanced Intel SpeedStep ^Technology)或 DBS (Demand Based Switching)特征(特指 htel 多核處理器) 或PowerNow特征(特指AMD多核處理器),cpufreq驅(qū)動(dòng)已經(jīng)加入了 Linux 2. 6內(nèi)核,只需要在內(nèi)核配置時(shí)選中以將其編譯進(jìn)內(nèi)核映像文件中。( 二)任務(wù)特征的動(dòng)態(tài)監(jiān)控任務(wù)的特征識(shí)別是為了對(duì)任務(wù)進(jìn)行分類(lèi),而任務(wù)的類(lèi)別以及目標(biāo)核的快慢又是本發(fā)明需要考慮的兩個(gè)新的要素。即如果目標(biāo)核為快核,則優(yōu)先遷移cpu-boimd程序,如果目標(biāo)核為慢核,則優(yōu)先遷移memory-bound任務(wù)或者Ι/0-bound任務(wù)。如何界定一個(gè)任務(wù)是 cpu-bound還是memory-bound任務(wù)?標(biāo)準(zhǔn)有很多,如緩存失效率(cache miss rate)、每個(gè)時(shí)鐘周期的指令數(shù)(IPC)、性能加速比(Speedup)等等。本發(fā)明使用IPC作為界定標(biāo)準(zhǔn),原因在于1) IPC可以通過(guò)CPU提供的硬件性能計(jì)數(shù)器在任務(wù)運(yùn)行過(guò)程中獲得;2) IPC基本上能夠較為準(zhǔn)確的界定一個(gè)任務(wù)的分類(lèi);3)當(dāng)不同的核之間僅存在頻率差異時(shí),同一段代碼在這些核上運(yùn)行的IPC相同。由于現(xiàn)代微處理器提供的硬件性能計(jì)數(shù)器數(shù)量有限,每個(gè)任務(wù)必須分時(shí)使用這些計(jì)數(shù)器來(lái)獲取IPC。如htel P6系列,每個(gè)核只有兩個(gè)事件設(shè)置寄存器和兩個(gè)事件計(jì)數(shù)器; AMDK7/K8系列提供了四個(gè)事件設(shè)置寄存器和四個(gè)事件計(jì)數(shù)器,而內(nèi)核中需要對(duì)每一個(gè)任務(wù)的IPC進(jìn)行計(jì)數(shù)。另外,如果在任務(wù)運(yùn)行前獲取IPC,這是一個(gè)平均值,不能準(zhǔn)確反映出較大規(guī)模應(yīng)用程序不同階段IPC的差異。為解決上述問(wèn)題,本發(fā)明使用Mikael Pettersson開(kāi)發(fā)的 Linux Performance-Monitoring Counters Driver (簡(jiǎn)禾爾為 perfctr),其優(yōu)勢(shì)在于實(shí)現(xiàn)了為每個(gè)任務(wù)虛擬出一套硬件性能計(jì)數(shù)器的功能,稱(chēng)為“Virtual”機(jī)制。Virtual的開(kāi)銷(xiāo)很小,它的工作原理是在任務(wù)切換的時(shí)刻,將硬件性能計(jì)數(shù)器記錄的特定事件發(fā)生次數(shù)存入前一個(gè)任務(wù)的虛擬硬件計(jì)數(shù)器vperfctr結(jié)構(gòu)中,切換后將后一個(gè)任務(wù)的vperfctr中保存的信息載入計(jì)數(shù)器,繼續(xù)監(jiān)控該任務(wù)。但該驅(qū)動(dòng)是面向用戶(hù)的,無(wú)法在內(nèi)核層直接使用; 為此,本發(fā)明做了以下修改或補(bǔ)充1)在內(nèi)核中增加vperfctr結(jié)構(gòu)的初始化方法,將計(jì)數(shù)事件設(shè)置為“Retired Instructions",在任務(wù)創(chuàng)建時(shí)調(diào)用。2)對(duì)于htel T5550處理器,原驅(qū)動(dòng)程序中使用kmalloc ()函數(shù)為vperfctr結(jié)構(gòu)開(kāi)辟內(nèi)存空間,開(kāi)銷(xiāo)太大,現(xiàn)改用SLAB高速緩存;對(duì)于64位AMD Opteron 2350處理器,則不需要修改。3)將部分聲明為static的函數(shù)改為全局函數(shù)。4)在進(jìn)程描述符中加入成員變量“IPC”,并在每次任務(wù)切換時(shí)更新上一個(gè)任務(wù)的 IPC值,該值由事件〃 Retired Instructions"的計(jì)數(shù)值與程序運(yùn)行的時(shí)鐘數(shù)共同確定。5)調(diào)度是針對(duì)未來(lái)的程序段進(jìn)行的,但未來(lái)程序段的IPC只能通過(guò)現(xiàn)在和歷史的 IPC進(jìn)行預(yù)測(cè)。本發(fā)明采用的預(yù)測(cè)方法為將任務(wù)IPC的歷史值和當(dāng)前值分別乘以不同的權(quán)重,再累加相加,得到任務(wù)IPC的預(yù)測(cè)值,公式如(1)所示a氺before (IPC) +(1一a)氺current (IPC) (1)式(1)中,a為IPC歷史值的權(quán)重,(l_a)為IPC當(dāng)前值的權(quán)重。(三)邏輯CPU負(fù)載計(jì)算在異構(gòu)多核環(huán)境下,每個(gè)邏輯CPU的負(fù)載不能仍為其上運(yùn)行隊(duì)列任務(wù)負(fù)載的總和,還應(yīng)考慮到每個(gè)邏輯CPU頻率的差異。在本發(fā)明中,計(jì)算邏輯CPU的負(fù)載按照如下方式計(jì)算當(dāng)任務(wù)遷入邏輯CPU運(yùn)行隊(duì)列時(shí),運(yùn)行隊(duì)列的負(fù)載等于原負(fù)載加上遷入任務(wù)的負(fù)載乘以本地CPU的頻率因子;當(dāng)任務(wù)遷出邏輯CPU運(yùn)行隊(duì)列時(shí),運(yùn)行隊(duì)列的負(fù)載等于原負(fù)載減去遷出任務(wù)的負(fù)載乘以本地CPU的頻率因子;頻率因子的計(jì)算方法如下我們以頻率最快的邏輯CPU為基準(zhǔn),其頻率因子定義為1,則慢核的頻率因子為快核的頻率*s/慢核的頻率,其中S定義為一常數(shù),如0. 85,主要是考慮到CPU的運(yùn)算效率還受到cache大小、訪存延遲等其他因素的影響??梢钥闯?,頻率高的核頻率因子小。因此,對(duì)于同樣的負(fù)載,快核上的任務(wù)數(shù)要比慢核多,意味著快核可以承擔(dān)更多的任務(wù)。(四)異構(gòu)和程序行為感知的負(fù)載均衡策略在負(fù)載均衡時(shí),將cpu-bound類(lèi)型的任務(wù)遷移到高頻率的CPU上運(yùn)行,將 memory-bound類(lèi)型的任務(wù)遷移到低頻率的CPU上運(yùn)行,頻率介于二者之間的CPU按照原有任務(wù)遷移規(guī)則遷移任務(wù)。為了不破壞原有調(diào)度器的公平性、及時(shí)性和實(shí)時(shí)性,對(duì)原有調(diào)度器的任務(wù)遷移順序和規(guī)則只進(jìn)行較小程度的修改。具體為原有調(diào)度器是從某一優(yōu)先級(jí)鏈表尾部往頭部遍歷選擇允許遷移的任務(wù), 現(xiàn)在的規(guī)則為,選擇某一優(yōu)先級(jí)鏈表IPC最大或最小的任務(wù)(依據(jù)目標(biāo)核是快核還是慢核而定),然后選擇該優(yōu)先級(jí)鏈表中IPC次大或次小的任務(wù),以此類(lèi)推,直到需要遷移的任務(wù)負(fù)載滿(mǎn)足要求。本發(fā)明一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法,其優(yōu)點(diǎn)及功效在于異構(gòu)感知,計(jì)算每個(gè)核的負(fù)載時(shí)考慮了時(shí)鐘頻率的差異,從而讓頻率高的核能夠承擔(dān)更多的任務(wù);程序行為感知,在遷移任務(wù)時(shí)根據(jù)目標(biāo)核是快核還是慢核來(lái)選擇最適合在該核上運(yùn)行的任務(wù),如果程序行為不感知,則是直接從過(guò)期隊(duì)列存在任務(wù)的最高優(yōu)先級(jí)的鏈表尾選擇任務(wù),有可能選擇的是適合在目標(biāo)核上運(yùn)行的任務(wù),也可能選擇的是不適合在目標(biāo)核上運(yùn)行的任務(wù),因此,服務(wù)質(zhì)量和性能得不到保證,時(shí)好時(shí)壞。實(shí)驗(yàn)顯示,本發(fā)明提出的方法在絕大多數(shù)情況下都要優(yōu)于傳統(tǒng)的異構(gòu)和程序行為不感知的調(diào)度器。
圖1異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法總體框架圖
圖2異構(gòu)和程序感知的負(fù)載均衡方法流程圖
具體實(shí)施例方式下面結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的說(shuō)明。本發(fā)明一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法,總體框架如圖1所示,適用于Linux-2. 6. 18/Linux_2. 6. 21內(nèi)核。具體實(shí)現(xiàn)方法如下1.兼容現(xiàn)有調(diào)度域模型的異構(gòu)多核環(huán)境定義結(jié)構(gòu)體amp 該結(jié)構(gòu)體用于存儲(chǔ)異構(gòu)邏輯CPU的頻率因子和標(biāo)志位。頻率因子是邏輯CPU頻率的比例系數(shù),用于CPU的負(fù)載計(jì)算;標(biāo)志位用于任務(wù)遷移時(shí)判斷該邏輯CPU 適合遷移哪種特性(cpu-intensive或者memory/10-intensive)的任務(wù)。在內(nèi)核在中定義元素個(gè)數(shù)為NR_CPUS的amp全局?jǐn)?shù)組amp_factor用于存儲(chǔ)每個(gè)異構(gòu)邏輯CPU的上述兩個(gè)信息。該數(shù)組的初始化由使用者定義,并放到init/main. c 中,在系統(tǒng)啟動(dòng)后,通過(guò)cpufreq驅(qū)動(dòng)將真實(shí)頻率比例調(diào)整到使用者定義的頻率比例。目前,本發(fā)明只支持能夠真實(shí)修改不同CPU頻率x86_64體系結(jié)構(gòu)處理器,如Quad-Core AMD Opteron(tm)Processor 2350。2.任務(wù)特性的動(dòng)態(tài)監(jiān)控本發(fā)明使用的PMC驅(qū)動(dòng)為perfctr-2. 6. χ,并對(duì)該驅(qū)動(dòng)做了如下修改和補(bǔ)充 在內(nèi)核中增加vperfctr結(jié)構(gòu)的初始化方法,將計(jì)數(shù)事件設(shè)置為〃 Retired Instructions “,放置在 copy—thread ()中[arch/x86_64/kernel/process. c]。 將函數(shù) get_empty_vperfctr(void)禾口函數(shù) put_vperfctr(struct vperfctr氺perfctr) [drivers/perfctr/virtual. c]從 static 改為全局函數(shù)。并修改 get_ empty_vperfctr,加入vperfctr結(jié)構(gòu)的清零操作。最后,在進(jìn)程描述符task_struct[include/linux/sched. h]中加入成員變量 “IPC”,這個(gè)值是由事件“Retired Instructions"的計(jì)數(shù)值PMC除以程序由開(kāi)始運(yùn)行到現(xiàn)在的時(shí)間戳TSC得到的。在每次任務(wù)切換時(shí)更新上一個(gè)任務(wù)的IPC值,即預(yù)測(cè)下一個(gè)時(shí)間片該任務(wù)的IPC, 預(yù)測(cè)方法為將任務(wù)IPC的歷史值和當(dāng)前值分別乘以不同的權(quán)重,再將結(jié)果累加,得到任務(wù) IPC的預(yù)測(cè)值,如公式(1)所示a氺before (IPC) +(1一a)氺current (IPC) (1)其中,a為IPC歷史值的權(quán)重,(l_a)為IPC當(dāng)前值的權(quán)重,將該操作放到宏定義 switch_to()中[include/asm/system· h]ο3.邏輯CPU負(fù)載計(jì)算在函數(shù) inc—raw—weighted—load()禾口 dec—raw—weighted—load()[kernel/sched. C]中,將運(yùn)行隊(duì)列的負(fù)載raw_weighted_load乘以該運(yùn)行隊(duì)列所在邏輯CPU的頻率因子,即在任務(wù)進(jìn)出隊(duì)列更新負(fù)載時(shí)加入對(duì)異構(gòu)邏輯CPU頻率的考慮。4.異構(gòu)和程序行為感知的負(fù)載均衡策略修改任務(wù)遷移函數(shù)move_tasks() [kernel/sched. c],在任務(wù)遷移過(guò)程中加入對(duì) CPU頻率和任務(wù)IPC的考慮,同時(shí)不改變?cè)腥蝿?wù)遷移規(guī)則,本發(fā)明實(shí)現(xiàn)的任務(wù)遷移規(guī)則為 (圖2所示)
如果目標(biāo)CPU被標(biāo)記為“頻率最大”,則按照先過(guò)期隊(duì)列后活動(dòng)隊(duì)列,先高優(yōu)先級(jí)后低優(yōu)先級(jí),先鏈表尾部后鏈表頭部的順序?qū)ふ掖w移任務(wù),但此時(shí)需要考慮待遷移任務(wù)是否是該優(yōu)先級(jí)鏈表中IPC最大的,因此,需要對(duì)整個(gè)鏈表進(jìn)行遍歷,找出IPC最大的任務(wù)進(jìn)行遷移,如果還沒(méi)有達(dá)到需要遷移的最大負(fù)載量,且該鏈表還有滿(mǎn)足條件的可遷移任務(wù),則重新回到鏈表的尾部進(jìn)行遍歷。 如果遷移目標(biāo)CPU的被標(biāo)記為“頻率最小”,則按照先過(guò)期隊(duì)列后活動(dòng)隊(duì)列,先高優(yōu)先級(jí)后低優(yōu)先級(jí),先鏈表尾部后鏈表頭部的順序?qū)ふ掖w移任務(wù),但此時(shí)需要考慮待遷移任務(wù)是否是該優(yōu)先級(jí)鏈表中IPC最小的,因此,需要對(duì)整個(gè)鏈表進(jìn)行遍歷,找出IPC最大的任務(wù)進(jìn)行遷移,如果還沒(méi)有達(dá)到需要遷移的最大負(fù)載量,且該鏈表還有滿(mǎn)足條件的可遷移任務(wù),則重新回到鏈表的尾部進(jìn)行遍歷。 如果遷移目標(biāo)CPU的被標(biāo)記為“普通CPU”,則按照原有Linux任務(wù)遷移規(guī)則進(jìn)行任務(wù)遷移。
權(quán)利要求
1. 一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法,其特征在于該方法具體如下(一)兼容現(xiàn)有調(diào)度域模型的異構(gòu)多核環(huán)境現(xiàn)有的負(fù)載均衡方法是在一個(gè)調(diào)度域內(nèi)的調(diào)度組之間進(jìn)行的,這充分考慮了存儲(chǔ)層次對(duì)遷移開(kāi)銷(xiāo)的影響,通常的原則是先邏輯CPU,后物理core,最后是物理CPU ;所述的異構(gòu)多核環(huán)境是針對(duì)邏輯CPU而言的,S卩如果處理器支持同時(shí)多線(xiàn)程,則將各邏輯CPU設(shè)定為不同頻率;如果不支持同時(shí)超線(xiàn)程,則將各物理核設(shè)定為不同頻率;具體實(shí)現(xiàn)方法是在內(nèi)核中定義NR_CPUS個(gè)元素的數(shù)組amp_factor,每個(gè)元素存儲(chǔ)對(duì)應(yīng)CPU的頻率因子和標(biāo)志位; 其中頻率因子是CPU頻率的比例系數(shù),用于CPU的負(fù)載計(jì)算;標(biāo)志位用于任務(wù)遷移時(shí)確定應(yīng)向該CPU優(yōu)先遷移哪種特性的任務(wù);每個(gè)任務(wù)的IPC值存儲(chǔ)在task_strUCt結(jié)構(gòu)新增的 IPC變量中,任務(wù)遷移時(shí),首先判斷目標(biāo)邏輯CPU是快核還是慢核,如果是快核,則遷移允許被遷移的IPC最大的任務(wù),如果是慢核,則遷移允許被遷移的IPC最小的任務(wù);(二)任務(wù)特征的動(dòng)態(tài)監(jiān)控任務(wù)的特征識(shí)別是為了對(duì)任務(wù)進(jìn)行分類(lèi),而任務(wù)的類(lèi)別以及目標(biāo)核的快慢又是需要考慮的兩個(gè)新的要素,即如果目標(biāo)核為快核,則優(yōu)先遷移CPU-bound程序,如果目標(biāo)核為慢核,則優(yōu)先遷移memory-bound任務(wù)或者Ι/0-bound任務(wù);這里具體使用“每個(gè)時(shí)鐘周期的指令數(shù),即IPC”來(lái)界定一個(gè)任務(wù)是cpu-boimd還是 memory-bound 任務(wù);由于現(xiàn)代微處理器提供的硬件性能計(jì)數(shù)器數(shù)量有限,每個(gè)任務(wù)必須分時(shí)使用這些計(jì)數(shù)器來(lái)獲取IPC ;需做以下修改或補(bǔ)充1)在內(nèi)核中增加vperfctr結(jié)構(gòu)的初始化方法,將計(jì)數(shù)事件設(shè)置為“Retired hstructions”,在任務(wù)創(chuàng)建時(shí)調(diào)用;2)對(duì)于htelT5550處理器,原驅(qū)動(dòng)程序中使用kmalloc ()函數(shù)為vperfctr結(jié)構(gòu)開(kāi)辟內(nèi)存空間,開(kāi)銷(xiāo)太大,現(xiàn)改用SLAB高速緩存;對(duì)于64位AMD Opteron 2350處理器,則不需要修改;3)將部分聲明為static的函數(shù)改為全局函數(shù);4)在進(jìn)程描述符中加入成員變量“IPC”,并在每次任務(wù)切換時(shí)更新上一個(gè)任務(wù)的IPC 值,該值由事件〃 Retired Instructions"的計(jì)數(shù)值與程序運(yùn)行的時(shí)鐘數(shù)共同確定;5)調(diào)度是針對(duì)未來(lái)的程序段進(jìn)行的,但未來(lái)程序段的IPC只能通過(guò)現(xiàn)在和歷史的IPC 進(jìn)行預(yù)測(cè);具體的預(yù)測(cè)方法為將任務(wù)IPC的歷史值和當(dāng)前值分別乘以不同的權(quán)重,再累加相加,得到任務(wù)IPC的預(yù)測(cè)值,公式如(1)所示a*before(IPC)+(l_a)^current(IPC)(1)式(1)中,a為IPC歷史值的權(quán)重,(1-a)為IPC當(dāng)前值的權(quán)重;(三)邏輯CPU負(fù)載計(jì)算在異構(gòu)多核環(huán)境下,每個(gè)邏輯CPU的負(fù)載不能仍為其上運(yùn)行隊(duì)列任務(wù)負(fù)載的總和,還應(yīng)考慮到每個(gè)邏輯CPU頻率的差異,則計(jì)算邏輯CPU的負(fù)載按照如下方式計(jì)算當(dāng)任務(wù)遷入邏輯CPU運(yùn)行隊(duì)列時(shí),運(yùn)行隊(duì)列的負(fù)載等于原負(fù)載加上遷入任務(wù)的負(fù)載乘以本地CPU的頻率因子;當(dāng)任務(wù)遷出邏輯CPU運(yùn)行隊(duì)列時(shí),運(yùn)行隊(duì)列的負(fù)載等于原負(fù)載減去遷出任務(wù)的負(fù)載乘以本地CPU的頻率因子;(四)異構(gòu)和程序行為感知的負(fù)載均衡策略在負(fù)載均衡時(shí),將cpu-bound類(lèi)型的任務(wù)遷移到高頻率的CPU上運(yùn)行,將memory-bound 類(lèi)型的任務(wù)遷移到低頻率的CPU上運(yùn)行,頻率介于二者之間的CPU按照原有任務(wù)遷移規(guī)則遷移任務(wù);為了不破壞原有調(diào)度器的公平性、及時(shí)性和實(shí)時(shí)性,對(duì)原有調(diào)度器的任務(wù)遷移順序和規(guī)則只進(jìn)行較小程度的修改具體為原有調(diào)度器是從某一優(yōu)先級(jí)鏈表尾部往頭部遍歷選擇允許遷移的任務(wù),現(xiàn)在的規(guī)則為,選擇某一優(yōu)先級(jí)鏈表IPC最大或最小的任務(wù),然后選擇該優(yōu)先級(jí)鏈表中IPC次大或次小的任務(wù),以此類(lèi)推,直到需要遷移的任務(wù)負(fù)載滿(mǎn)足要求。
全文摘要
本發(fā)明公開(kāi)了一種異構(gòu)多核環(huán)境下基于程序行為在線(xiàn)分析的負(fù)載均衡方法,該方法包括以下四個(gè)方面兼容現(xiàn)有調(diào)度域模型的異構(gòu)多核環(huán)境、任務(wù)特征的動(dòng)態(tài)監(jiān)測(cè)、邏輯CPU負(fù)載計(jì)算以及異構(gòu)和程序行為感知的負(fù)載均衡策略。本發(fā)明與現(xiàn)有操作系統(tǒng)調(diào)度策略完全兼容,算法在真實(shí)軟硬件平臺(tái)上測(cè)試,簡(jiǎn)潔而高效,適宜推廣使用。
文檔編號(hào)G06F9/50GK102184125SQ201110147099
公開(kāi)日2011年9月14日 申請(qǐng)日期2011年6月2日 優(yōu)先權(quán)日2011年6月2日
發(fā)明者孫衛(wèi)真, 張志敏, 張聰霞, 徐遠(yuǎn)超, 杜霖, 潘巍 申請(qǐng)人:首都師范大學(xué)