略分為兩大部分:性能技術(shù)采樣模塊與總線訪問負載均衡模塊,其中: 性能計數(shù)采樣模塊以1/T頻率執(zhí)行對線程性能計數(shù)信息的采樣,并且總是維護最近Twindow時間內(nèi)(采樣時間窗口內(nèi))的采樣數(shù)據(jù)。在每間隔Twindow時間進行線程內(nèi)存訪問密集度的計算。
[0024]采樣的時機決定了采樣周期。一方面,最簡單的考慮就是在時鐘中斷程序會調(diào)用的schedule_tick函數(shù)中實現(xiàn)采樣,即每Ims執(zhí)行一次采樣。然而值得思考的是每tick都采樣帶來的開銷是否可以接受。另一方面,CFS調(diào)度器對線程的調(diào)度可以改變線程的運行狀態(tài),因此要想合理設(shè)置線程運行狀態(tài)數(shù)據(jù)的采樣周期必須首先了解CFS的調(diào)度周期(即調(diào)度粒度)的設(shè)置。實際調(diào)度粒度大小需要用其乘以校正因子I+1g2 (nr_cpus),nr_cpus表示現(xiàn)有的CPU數(shù)目。于以上考慮,在時種中斷處理函數(shù)中而不是CFS調(diào)度操作時實現(xiàn)采樣可以較精確的保證采樣周期性要求。設(shè)置采樣周期T為3ms而非Ims以避免過頻繁的采樣造成的開銷。
[0025]采樣時間窗口的設(shè)置是否合適直接關(guān)系到調(diào)度決策的正確性。窗口值過小,則無法評估線程連續(xù)時間內(nèi)帶寬平均使用狀況;窗口值過大,則會因為線程總線訪問負載值不能反映較近時刻的帶寬使用狀況而錯過能夠預(yù)先均衡各CPU總線帶寬使用的時機。通過測試與分析,設(shè)置采樣時間窗口為Twindow=5T=15ms。
[0026]在進程控制塊task_structure中需要添加采樣函數(shù)。采樣函數(shù)需要記錄采樣時間窗口內(nèi)的進程帶寬使用情況、進程總線訪問權(quán)重、采樣計數(shù)、采樣周期內(nèi)L3 Cache未命中數(shù)統(tǒng)計、采樣周期內(nèi)線程執(zhí)行的指令周期數(shù)統(tǒng)計、采樣間隔前的計數(shù)狀態(tài)、采樣間隔后的計數(shù)狀態(tài)。
[0027]采樣流程如附圖1所示。每當內(nèi)核調(diào)用fork函數(shù)以創(chuàng)建新進程時,initSampleContext函數(shù)就將被調(diào)度。initSampleContext用于為新進程初始化性能采樣計數(shù)的設(shè)置,主要包括寫MSR寄存器以設(shè)定需要監(jiān)測的處理器事件類型。sample函數(shù)在時鐘中斷程序的schedulejick函數(shù)中被調(diào)用,以T為周期采樣執(zhí)行進程在被創(chuàng)建時就設(shè)定好的事件監(jiān)測計數(shù)。
[0028]總線訪問負載均衡模塊的工作過程為:
一旦內(nèi)核執(zhí)行CPU負載均衡操作選出了負載最重的CPU進程就緒隊列與輕載的目標隊列并且將要執(zhí)行進程迀移操作時,總線訪問負載均衡模塊就分別計算源隊列與目標隊列中進程總線負載。從源隊列挑選進程做迀移時不僅應(yīng)該滿足CPU親和性與沒有正在運行的要求,也應(yīng)當符合迀移后有利于各CPU總線訪問負載趨于均衡的條件。
[0029]Linux原生的load_balance函數(shù)首先通過find_busiest_group函數(shù)在同一級調(diào)度域中找到一組最繁忙的CPU組,隨后執(zhí)行find_busiest_queue函數(shù)從find_busiest_group找到的最重負載CPU組里選出一個載重負荷最高的CPU ;度量一個CPU負荷的標量是等待在該CPU就緒隊列中不同優(yōu)先級進程占用CPU使用比重值的累加和;最后,挑選被迀移的進程。
[0030]原有Linux負載均衡算法在挑選被迀移進程時只是考慮兩點:
(1)滿足當前沒有運行或剛結(jié)束運行;
(2)考慮其CPU親和性,可以在與當前隊列關(guān)聯(lián)的處理器上執(zhí)行。
[0031]本文中進程迀移判斷流程如附圖2所示,為了均衡總線訪問負載,在load_balance挑選完最重負荷CPU后挑選被迀移進程時附加上是否可使迀移后總線訪問負載均衡的判斷條件與相應(yīng)處理代碼。因此,在不影響CPU負載均衡效果的基礎(chǔ)上,可以進一步提高總線的帶寬利用率。
[0032]本發(fā)明的內(nèi)容以一個計算內(nèi)存訪問密集度的具體實例來描述實現(xiàn)這一調(diào)度優(yōu)化策略的執(zhí)行過程。
[0033]每當執(zhí)行線程訪問LLC(Last Level Cache)的一行數(shù)據(jù)未命中時就會向主存控制器請求從主存中加載一個Cache行的數(shù)據(jù)(Intel架構(gòu)中層級Cache line size為64Bytes),主存控制器通過總線將所請求大小的數(shù)據(jù)更新到未命中的Cache行。
[0034]如果發(fā)生頻繁的LLC未命中,記錄在該線程下訪問總線的帶寬就會激增。因此,通過每千條執(zhí)行指令中的LLC未命中數(shù)就可以衡量線程訪問帶寬的密集度。
[0035]測試機器存在L3 Cache,因此設(shè)計時設(shè)定采樣L3 Cache的未命中數(shù)。使用RDMSR和WRMSR指令可以通過讀寫MSR(Model Specific Register)寄存器可以獲取所設(shè)置計數(shù)的事件信息。
[0036]上述【具體實施方式】僅是本發(fā)明的具體個案,本發(fā)明的專利保護范圍包括但不限于上述【具體實施方式】,任何符合本發(fā)明的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法的權(quán)利要求書的且任何所述技術(shù)領(lǐng)域的普通技術(shù)人員對其所做的適當變化或替換,皆應(yīng)落入本發(fā)明的專利保護范圍。
【主權(quán)項】
1.一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其特征在于,其具體實現(xiàn)過程為: 首先進行訪存類型劃分:按照對于內(nèi)存或者總線訪問的密集程度,將待調(diào)度線程劃分為訪存延遲敏感型與訪存密集型兩類; 對線程帶寬訪問,即通過處理器內(nèi)建的硬件性能計數(shù)功能獲取運行時線程的訪問總線速率; 進行負載均衡優(yōu)化,該負載均衡通過調(diào)用1acLbalance函數(shù)來實現(xiàn)基于調(diào)度域的均衡操作; 根據(jù)上述總線帶寬使用情況的SMP任務(wù)調(diào)度優(yōu)化策略,該調(diào)度優(yōu)化策略分為兩大部分:性能技術(shù)采樣模塊與總線訪問負載均衡模塊,其中性能計數(shù)采樣模塊以1/T頻率執(zhí)行對線程性能計數(shù)信息的采樣,并且總是維護最近Twindow時間內(nèi),即采樣時間窗口內(nèi)的采樣數(shù)據(jù);在每間隔Twindow時間進行線程內(nèi)存訪問密集度的計算;當內(nèi)核執(zhí)行CPU負載均衡操作選出了負載最重的CPU進程就緒隊列與輕載的目標隊列并且將要執(zhí)行進程迀移操作時,總線訪問負載均衡模塊就分別計算源隊列與目標隊列中進程總線負載,并從源隊列挑選進程進行迀移操作。
2.根據(jù)權(quán)利要求1所述的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其特征在于,所述訪存延遲敏感型線程是指占用CPU時間較多而訪存請求較少的計算型任務(wù),用于區(qū)分不同任務(wù)的總線訪問頻度的高低;訪存密集型線程則是通過進程平均睡眠時間的計算區(qū)分不同任務(wù)CPU執(zhí)行時間的占用比重高低,該訪存密集型線程通過內(nèi)存訪問密集度衡量,內(nèi)存訪問密集度為線程訪問最末級Cache未命中產(chǎn)生訪存請求的頻度,其使用每千條指令cache丟失數(shù)來度量。
3.根據(jù)權(quán)利要求1所述的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其特征在于,所述性能技術(shù)采樣模塊采樣過程為:當內(nèi)核調(diào)用fork函數(shù)以創(chuàng)建新進程時,initSampleContext函數(shù)被調(diào)度;該initSampleContext函數(shù)用于為新進程初始化性能采樣計數(shù)的設(shè)置,包括寫MSR寄存器以設(shè)定需要監(jiān)測的處理器事件類型sample函數(shù)在時鐘中斷程序的schedule_tick函數(shù)中被調(diào)用,以T為周期采樣執(zhí)行進程在被創(chuàng)建時就設(shè)定好的事件監(jiān)測計數(shù)。
4.根據(jù)權(quán)利要求3所述的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其特征在于,所述性能技術(shù)采樣模塊中設(shè)置有進程控制塊,該進程控制塊中添加采樣函數(shù),所述采樣函數(shù)記錄采樣時間窗口內(nèi)的進程帶寬使用情況、進程總線訪問權(quán)重、采樣計數(shù)、采樣周期內(nèi)Cache未命中數(shù)統(tǒng)計、采樣周期內(nèi)線程執(zhí)行的指令周期數(shù)統(tǒng)計、采樣間隔前的計數(shù)狀態(tài)、采樣間隔后的計數(shù)狀態(tài)。
5.根據(jù)權(quán)利要求1所述的一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其特征在于,所述總線訪問負載均衡模塊的具體工作過程為:load_balance函數(shù)首先通過find_busiest_group函數(shù)在同一級調(diào)度域中找到一組最繁忙的CPU組,隨后執(zhí)行find_busiest_queue函數(shù)從find_busiest_gr0up找到的最重負載CPU組里選出一個載重負荷最高的CPU ;度量一個CPU負荷的標量是等待在該CPU就緒隊列中不同優(yōu)先級進程占用CPU使用比重值的累加和;最后,挑選被迀移的進程。
【專利摘要】本發(fā)明公開了一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法,其具體實現(xiàn)過程為:首先進行訪存類型劃分:按照對于內(nèi)存或者總線訪問的密集程度,將待調(diào)度線程劃分為訪存延遲敏感型與訪存密集型兩類;對線程帶寬訪問,即通過處理器內(nèi)建的硬件性能計數(shù)功能獲取運行時線程的訪問總線速率;進行負載均衡優(yōu)化,該負載均衡通過調(diào)用函數(shù)來實現(xiàn)基于調(diào)度域的均衡操作;根據(jù)上述總線帶寬使用情況的SMP任務(wù)調(diào)度優(yōu)化策略,該調(diào)度優(yōu)化策略分為兩大部分:性能技術(shù)采樣模塊與總線訪問負載均衡模塊。該一種基于SMP系統(tǒng)的任務(wù)調(diào)度優(yōu)化方法與現(xiàn)有技術(shù)相比,在不影響原有算法CPU負載均衡效果的基礎(chǔ)上優(yōu)化了總線帶寬的使用,提升了總線的有效利用率,實用性強,易于推廣。
【IPC分類】G06F9-50, G06F9-48
【公開號】CN104679593
【申請?zhí)枴緾N201510113178
【發(fā)明人】周恒釗, 劉璧怡
【申請人】浪潮集團有限公司
【公開日】2015年6月3日
【申請日】2015年3月13日