一種基于smp系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及多處理器數(shù)據(jù)調(diào)度技術(shù),具體地說是一種實(shí)用性強(qiáng)、基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法。
【背景技術(shù)】
[0002]在1985?2000這段時(shí)間里,微處理器性能的增長(zhǎng)伴隨著單處理器主頻或者指令級(jí)并行度的提高達(dá)到了自20世紀(jì)50年代后期和60年代初期第一臺(tái)晶體管計(jì)算機(jī)誕生以來的最高速度。有賴于集成電路制造工藝的不斷精進(jìn)與提升,處理器上晶體管的集成度得以不斷提高,諸多旨在提升指令級(jí)并行度的技術(shù)被加入到微處理器中,然而這些技術(shù)都沒有能夠改變線程的串行執(zhí)行模式。通過指令的猜測(cè)執(zhí)行、分支預(yù)測(cè)與亂序執(zhí)行等手段可以從串行程序中找到可以用于并行執(zhí)行的指令,卻不能從根本上提升單處理器的并行能力;依靠增加片上集成的晶體管數(shù)目可以獲得性能提升,卻會(huì)導(dǎo)致CPU功耗的成倍增大,這一切都表明通過增加復(fù)雜度、添加電路和增大功率所能提升的性能正在減少。因此,當(dāng)多核技術(shù)以及多線程技術(shù)以較低的復(fù)雜度就實(shí)現(xiàn)了單處理器上線程級(jí)并行后,迅速得以在處理器制造技術(shù)中廣泛的應(yīng)用。
[0003]對(duì)稱多處理(Symmetrical Mult1-Processing,SMP)是指同時(shí)擁有多個(gè)同構(gòu)CPU、CPU間共享同一存儲(chǔ)子系統(tǒng)與總線的處理器結(jié)構(gòu)。SMP結(jié)構(gòu)的特點(diǎn)在于多個(gè)處理器并行運(yùn)行操作系統(tǒng)的單一副本并共享對(duì)總線、內(nèi)存和外設(shè)資源的訪問。SMP感知的操作系統(tǒng)中為每個(gè)CPU都設(shè)置了進(jìn)程就緒隊(duì)列,所有CPU隊(duì)列上的進(jìn)程都可以平等地進(jìn)行訪存、響應(yīng)中斷和應(yīng)答I/O。通過使用多總線代替單總線,或者通過交換機(jī)可以使集中共享存儲(chǔ)架構(gòu)支持?jǐn)U展到更大的對(duì)稱處理器規(guī)模上去。SMP技術(shù)在面向高性能服務(wù)器和工作站中應(yīng)用的較為廣泛。
[0004]伴隨著處理器和主存儲(chǔ)器間速度差距的進(jìn)一步增大,片外訪存操作的長(zhǎng)延遲瓶頸,容易導(dǎo)致SMP系統(tǒng)中總線整體有效利用率的下降。因而面向上述難題的解決、考慮多核多線程感知的SMP線程調(diào)度機(jī)制的設(shè)計(jì)一直是操作系統(tǒng)研宄中的重要方向。基于上述技術(shù),現(xiàn)提供一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的技術(shù)任務(wù)是針對(duì)以上不足之處,提供一種實(shí)用性強(qiáng)、基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法。
[0006]一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其具體實(shí)現(xiàn)過程為:
首先進(jìn)行訪存類型劃分:按照對(duì)于內(nèi)存或者總線訪問的密集程度,將待調(diào)度線程劃分為訪存延遲敏感型與訪存密集型兩類;
對(duì)線程帶寬訪問,即通過處理器內(nèi)建的硬件性能計(jì)數(shù)功能獲取運(yùn)行時(shí)線程的訪問總線速率;
進(jìn)行負(fù)載均衡優(yōu)化,該負(fù)載均衡通過調(diào)用1acLbalance函數(shù)來實(shí)現(xiàn)基于調(diào)度域的均衡操作;
根據(jù)上述總線帶寬使用情況的SMP任務(wù)調(diào)度優(yōu)化策略,該調(diào)度優(yōu)化策略分為兩大部分:性能技術(shù)采樣模塊與總線訪問負(fù)載均衡模塊,其中性能計(jì)數(shù)采樣模塊以1/T頻率執(zhí)行對(duì)線程性能計(jì)數(shù)信息的采樣,并且總是維護(hù)最近Twindow時(shí)間內(nèi),即采樣時(shí)間窗口內(nèi)的采樣數(shù)據(jù);在每間隔Twindow時(shí)間進(jìn)行線程內(nèi)存訪問密集度的計(jì)算;當(dāng)內(nèi)核執(zhí)行CPU負(fù)載均衡操作選出了負(fù)載最重的CPU進(jìn)程就緒隊(duì)列與輕載的目標(biāo)隊(duì)列并且將要執(zhí)行進(jìn)程迀移操作時(shí),總線訪問負(fù)載均衡模塊就分別計(jì)算源隊(duì)列與目標(biāo)隊(duì)列中進(jìn)程總線負(fù)載,并從源隊(duì)列挑選進(jìn)程進(jìn)行迀移操作。
[0007]所述訪存延遲敏感型線程是指占用CPU時(shí)間較多而訪存請(qǐng)求較少的計(jì)算型任務(wù),用于區(qū)分不同任務(wù)的總線訪問頻度的高低;訪存密集型線程則是通過進(jìn)程平均睡眠時(shí)間的計(jì)算區(qū)分不同任務(wù)CPU執(zhí)行時(shí)間的占用比重高低,該訪存密集型線程通過內(nèi)存訪問密集度衡量,內(nèi)存訪問密集度為線程訪問最末級(jí)Cache未命中產(chǎn)生訪存請(qǐng)求的頻度,其使用每千條指令cache丟失數(shù)來度量。
[0008]所述性能技術(shù)采樣模塊采樣過程為:當(dāng)內(nèi)核調(diào)用fork函數(shù)以創(chuàng)建新進(jìn)程時(shí),initSampleContext函數(shù)被調(diào)度;該initSampleContext函數(shù)用于為新進(jìn)程初始化性能采樣計(jì)數(shù)的設(shè)置,包括寫MSR寄存器以設(shè)定需要監(jiān)測(cè)的處理器事件類型;Sample函數(shù)在時(shí)鐘中斷程序的schedulejick函數(shù)中被調(diào)用,以T為周期采樣執(zhí)行進(jìn)程在被創(chuàng)建時(shí)就設(shè)定好的事件監(jiān)測(cè)計(jì)數(shù)。
[0009]所述性能技術(shù)采樣模塊中設(shè)置有進(jìn)程控制塊,該進(jìn)程控制塊中添加采樣函數(shù),所述采樣函數(shù)記錄采樣時(shí)間窗口內(nèi)的進(jìn)程帶寬使用情況、進(jìn)程總線訪問權(quán)重、采樣計(jì)數(shù)、采樣周期內(nèi)Cache未命中數(shù)統(tǒng)計(jì)、采樣周期內(nèi)線程執(zhí)行的指令周期數(shù)統(tǒng)計(jì)、采樣間隔前的計(jì)數(shù)狀態(tài)、采樣間隔后的計(jì)數(shù)狀態(tài)。
[0010]所述總線訪問負(fù)載均衡模塊的具體工作過程為:load_balance函數(shù)首先通過find_busiest_group函數(shù)在同一級(jí)調(diào)度域中找到一組最繁忙的CPU組,隨后執(zhí)行find_busiest_queue函數(shù)從find_busiest_group找到的最重負(fù)載CPU組里選出一個(gè)載重負(fù)荷最高的CPU ;度量一個(gè)CPU負(fù)荷的標(biāo)量是等待在該CPU就緒隊(duì)列中不同優(yōu)先級(jí)進(jìn)程占用CPU使用比重值的累加和;最后,挑選被迀移的進(jìn)程。
[0011]本發(fā)明的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,具有以下優(yōu)點(diǎn):
該發(fā)明的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法解決了在SM多核多線程的場(chǎng)景下系統(tǒng)總線資源利用率的問題;通過測(cè)試驗(yàn)證,優(yōu)化方案在一定程度上可以提升SMP總線訪問帶寬的整體利用率;在不影響CPU負(fù)載均衡效果的基礎(chǔ)上,提高總線的帶寬利用率;實(shí)用性強(qiáng),易于推廣。
【附圖說明】
[0012]附圖1為本發(fā)明的采樣流程圖。
[0013]附圖2為本發(fā)明的進(jìn)程迀移判斷流程圖。
【具體實(shí)施方式】
[0014]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
[0015]伴隨著處理器和主存儲(chǔ)器間速度差距的進(jìn)一步增大,片外訪存操作的長(zhǎng)延遲瓶頸,容易導(dǎo)致SMP系統(tǒng)中總線整體有效利用率的下降。本發(fā)明提出了一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,主要解決了在SMP多核多線程的場(chǎng)景下系統(tǒng)總線資源利用率的問題。
[0016]本發(fā)明的目的是這樣實(shí)現(xiàn)的,采用基于進(jìn)程帶寬使用的調(diào)度思路,如果在進(jìn)行進(jìn)程迀移時(shí)能夠考慮到預(yù)先已統(tǒng)計(jì)出的進(jìn)程帶寬使用狀況,就可以在執(zhí)行負(fù)載均衡的同時(shí)優(yōu)化SMP系統(tǒng)總線帶寬的使用。
[0017]一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,通過獲取線程運(yùn)行時(shí)的性能計(jì)數(shù)來評(píng)估其在最近的采樣時(shí)間窗口內(nèi)總線帶寬使用狀況,同時(shí)基于該進(jìn)程帶寬使用的調(diào)度思路,如果在進(jìn)行進(jìn)程迀移時(shí)能夠考慮到預(yù)先已統(tǒng)計(jì)出的進(jìn)程帶寬使用狀況,就可以在執(zhí)行負(fù)載均衡的同時(shí)優(yōu)化SMP系統(tǒng)總線帶寬的使用。通過該線程帶寬訪問情況的采樣機(jī)制,利用處理器內(nèi)建的硬件性能計(jì)數(shù)功能獲取運(yùn)行時(shí)線程的訪問總線速率。
[0018]如附圖1、圖2所示,其具體實(shí)現(xiàn)過程為:
一、首先進(jìn)行訪存類型劃分:按照對(duì)于內(nèi)存或者總線訪問的密集程度,將待調(diào)度線程劃分為訪存延遲敏感型與訪存密集型兩類。
[0019]進(jìn)一步的,該步驟一的詳細(xì)過程為:按照對(duì)于內(nèi)存或者總線訪問的密集程度不同可以將待調(diào)度線程劃分為訪存延遲敏感型與訪存密集型兩類。訪存延遲敏感型線程是指占用CPU時(shí)間較多而訪存請(qǐng)求較少的計(jì)算型任務(wù)。盡管總體訪存請(qǐng)求的數(shù)目較少,訪存延遲敏感型線程的性能受到花費(fèi)額外的指令周期來等待訪存結(jié)果而非CPU計(jì)算操作的延遲影響比較大。執(zhí)行訪存密集型線程時(shí)會(huì)出現(xiàn)頻繁的LLC(Last level Cache)未命中情況,因而大量時(shí)間被用于等待未決的訪存請(qǐng)求與所請(qǐng)求的數(shù)據(jù)。這一類型線程的執(zhí)行性能就很大程度上取決于內(nèi)存系統(tǒng)與總線的吞吐狀況,因?yàn)榧词蛊淝靶騼?nèi)存請(qǐng)求被很快響應(yīng),持續(xù)不斷的后繼訪存請(qǐng)求又將使層級(jí)Cache行失效、打斷指令流的連續(xù)執(zhí)行。對(duì)于任務(wù)進(jìn)行訪存密集型與訪存延遲敏感型的劃分不同于Linux 0(1)調(diào)度器中I/O型與處理器消耗型區(qū)分的處理。前者旨在區(qū)分不同任務(wù)的總線訪問頻度的高低;后者則是通過進(jìn)程平均睡眠時(shí)間的計(jì)算區(qū)分不同任務(wù)CPU執(zhí)行時(shí)間的占用比重高低。
[0020]這里定義內(nèi)存訪問密集度就是線程訪問最末級(jí)Cache未命中產(chǎn)生訪存請(qǐng)求的頻度??梢允褂妹壳l指令cache丟失數(shù)(Misses /Thousand instruct1ns, MPKI)來度量這一參數(shù)。
[0021]二、對(duì)線程帶寬訪問,即通過處理器內(nèi)建的硬件性能計(jì)數(shù)功能獲取運(yùn)行時(shí)線程的訪問總線速率。采用了硬件性能計(jì)數(shù)的在線分析方法(在內(nèi)核空間邊采樣計(jì)數(shù)邊分析)來為任務(wù)調(diào)度提供直接決策依據(jù)。
[0022]三、進(jìn)行負(fù)載均衡優(yōu)化,無論Linux主動(dòng)負(fù)載均衡或者被動(dòng)負(fù)載均衡都會(huì)調(diào)用load_balance函數(shù)來實(shí)現(xiàn)基于調(diào)度域的均衡操作。概括load_balance的作用就是將最忙CPU隊(duì)列的進(jìn)程迀出以降低處理器間負(fù)載的不均衡程度。由于優(yōu)化設(shè)計(jì)沿用了 Linux SMP負(fù)載均衡的框架,在進(jìn)行均衡各CPU間工作負(fù)載的同時(shí)也考慮依照總線訪問負(fù)載做調(diào)度。因此,將考慮總線帶寬使用的調(diào)度決策判斷添加在核心函數(shù)load_balance中就可以達(dá)成這一目標(biāo)。
[0023]四、根據(jù)上述總線帶寬使用情況的SMP任務(wù)調(diào)度優(yōu)化策略,該調(diào)度優(yōu)化策