摘要:本文主要分析了Linux操作系統(tǒng)對于多核處理器的任務調(diào)度,探討了目前操作系統(tǒng)在面對多核處理器時所要解決的關鍵問題,并在此基礎上進一步提出新的多核處理器的任務調(diào)度算法。
關鍵詞:多核;處理器;任務
中圖分類號:TP332 文獻標識碼:A 文章編號:1007-9599 (2012) 18-0000-02
目前,隨著計算機技術的飛速發(fā)展,多核處理器已經(jīng)打面積普及,而在這種多核體系結(jié)構下,如何更好的利用好沒一個核心,充分發(fā)掘處理器的效率,成為一個關鍵問題。當處理器是單核心的時候,對于任務的處理處理器只需要按照既定的算法依次處理每個任務,但是當面對多核處理器時,這種方式顯然效率低下,造成計算能力的極大浪費。為此我們必須要思考,當面對多核處理器的時候,我們?nèi)绾伟汛罅咳蝿崭玫姆峙浣o處理器的核心,以充分使用處理器,提高資源的利用率。
對于單核處理器,我們已經(jīng)有大量的成熟算法,諸如先來先服務算法,輪轉(zhuǎn)調(diào)度法等,顯然這些算法無法滿足多核處理器的任務調(diào)度需求。一個任務到來應該分配給哪一個核心;分配完成后是不是需要調(diào)整整個處理器的負載,以達到每個核的負載均衡;一個任務完成后,會不會出現(xiàn)大面積的核心空閑,而部分核心負載過重,有大量任務唄阻塞,面對多核處理器由此產(chǎn)生的新問題迫使我們不得不重新發(fā)掘新的處理器任務調(diào)度算法。
鑒于處理器的調(diào)度是由操作系統(tǒng)來實施的,當前比較成熟的CMP體系操作系統(tǒng)是Linux,Windows,Mac OS。我們通過分析當前已有操作系統(tǒng)的多核任務調(diào)度,依次來借鑒,考慮到目前Linux系統(tǒng)的開源性,我們著重分析Linux系統(tǒng),當然Linux目前對于多核的處理也是比較經(jīng)典的,有大量的服務器采用了Linux。
Linux系統(tǒng)在調(diào)度多個核心是,給每個和性能都建立一個活動就緒隊列,并且把就緒任務劃分成140個優(yōu)先級,其中高100個優(yōu)先級用于實時任務,而低40個優(yōu)先級分配給普通用戶任務。每個就緒任務都有一個時間片,當時間片用完后將該任務轉(zhuǎn)移到該核心的等待就緒隊列并重新分配時間片。如果該核心的活動就緒隊列的所有任務的時間片都已運行完畢,則該核心的等待就緒隊就轉(zhuǎn)換為活動就緒隊列。以此保證各個任務可以公平使用核心。而Linux的處理器核心的負載均衡主要通過以下兩種方式來實現(xiàn),一是當一個核心上的任務全部結(jié)束后從最繁忙的核心上任意獲取一個任務來執(zhí)行,另一種則是在所有核心都有任務時每隔一定時間檢查以下所有核心,如果不均衡則發(fā)生任務遷移。
對于微軟比較經(jīng)典的Windows7來說,主要是采用了一種稱為NUMA的技術,該技術是一種分布式的存儲器訪問技術。使用該技術,處理器可以同時訪問不同的存儲器地址。具體來說就是,處理器的每個核心都被分配有一個本地存儲器地址空間,但該核心也可以訪問全部的物理存儲器。這樣就在傳統(tǒng)的多核與一個集中的存儲器的系統(tǒng)結(jié)構上,提高了訪問效率,便于核間的保護。
總的來說Linux較好的利用了多核處理器,但在面對復雜程序的多個任務時,未考慮讓這些任務盡量在同一個核心上運行,以避免遷移產(chǎn)生的低效。從以上分析來看,我們在對多核處理器進行任務調(diào)度時,要盡量保證同一程序的多個任務在同一核心上運行,以降低cache的缺失率,方便數(shù)據(jù)通信,同時減少任務的遷移次數(shù);與此同時,還需要盡量的保證每個核的負載均衡,以便提高處理器的利用效率,提升系統(tǒng)性能。因此,所要充分發(fā)揮多核處理器的性能,必須完美解決上述兩個看似矛盾而又統(tǒng)一的問題。
2 結(jié)束語
這樣在最壞的情況下,如果一個程序有多個長任務,此時會發(fā)生遷移以提高效率;如果是多個短任務,發(fā)生遷移也不會造成效率下降。
基于以上的調(diào)度策略,經(jīng)初步的實驗表明,可以大幅度提高處理器的使用效率,但是對于多核系統(tǒng)的研究還需進一步的思考。
參考文獻:
[1](美)拉芙 著,陳莉君,康華 譯. Linux內(nèi)核設計與實現(xiàn)(原書第3版),2011,6,1
[2](美)科曼(Cormen,T.H.)等著,潘金貴等譯.算法導論(原書第2版).2006.9.1.