<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 多處理機(jī)系統(tǒng)的負(fù)載平衡模型設(shè)計

          多處理機(jī)系統(tǒng)的負(fù)載平衡模型設(shè)計

          作者: 時間:2008-09-19 來源:網(wǎng)絡(luò) 收藏

          引言
          在嵌入式多處理機(jī)系統(tǒng)中,經(jīng)常出現(xiàn)這種情況:某些處理機(jī)負(fù)載過重而另外一些負(fù)載很輕,甚至空閑。這種情況無疑降低了整體系統(tǒng)的工作效率。為了提高處理機(jī)的利用率和系統(tǒng)并行計算的效率,應(yīng)該把負(fù)載過重的處理機(jī)上的一部分負(fù)載轉(zhuǎn)移到空閑或輕負(fù)載處理機(jī)上,這就出現(xiàn)了負(fù)載分配問題的研究。
          簡單的說,負(fù)載平衡就是要盡量均勻地分配任務(wù),并盡量減少結(jié)點之間的通信。解決負(fù)載平衡問題,通常有靜態(tài)和動態(tài)兩種調(diào)度策略:
          ①靜態(tài)負(fù)載平衡是根據(jù)系統(tǒng)的先驗知識做出決策,運(yùn)行時負(fù)載不能重新分配。
          ②動態(tài)負(fù)載平衡是根據(jù)計算機(jī)過程中數(shù)據(jù)項的變化情況,交換系統(tǒng)的狀態(tài)信息來決定系統(tǒng)負(fù)載的分配。它具有超過靜態(tài)算法的執(zhí)行潛力,能夠適應(yīng)系統(tǒng)負(fù)載變化情況,比靜態(tài)算法更靈活、有效。但是由于必須收集、存儲并分析狀態(tài)信息,因此動態(tài)算法會產(chǎn)生比靜態(tài)算法更多的系統(tǒng)開銷,不過這種開銷和付出常是有所回報的。
          本文描述了一種有效的嵌入式多處理機(jī)系統(tǒng)的負(fù)載平衡模型,通過動態(tài)判斷當(dāng)前系統(tǒng)的負(fù)載情況,自動選擇負(fù)載平衡算法,從而使整個系統(tǒng)以盡可能小的附加代價來達(dá)到全局的負(fù)載平衡。最后,在卡內(nèi)基梅隆大學(xué)的負(fù)載平衡測試框架上,搭建仿真環(huán)境進(jìn)行模擬測試。結(jié)果顯示,該模型能較好地平衡各結(jié)點的負(fù)載。


          1 負(fù)載分配問題的數(shù)學(xué)描述
          負(fù)載(1oad)是對一個處理機(jī)上運(yùn)行的所有任務(wù)占用資源的衡量,負(fù)載指標(biāo)(1oad index)是對負(fù)載進(jìn)行量化的評價標(biāo)準(zhǔn),不同的負(fù)載指標(biāo)定義會得出當(dāng)前時刻處理機(jī)不同的負(fù)載程度。關(guān)于這個問題,許多學(xué)者提出了他們的看法。
          參考文獻(xiàn)的研究表明,一般效果較好的是,將單項指標(biāo)中的資源隊列長度作為負(fù)載指標(biāo)。參考文獻(xiàn)[4]建議使用資源利用率而不是資源隊列長度作為負(fù)載指標(biāo)。近年來,隨著CPU速度的快速增長。CPU和內(nèi)存通信之間的瓶頸較為突出,內(nèi)存空間的不足可能導(dǎo)致頻繁的頁面交換,這使得訪問延遲大大增加。根據(jù)參考文獻(xiàn)的研究,定義這樣一個負(fù)載指標(biāo):
          定義1 假設(shè)系統(tǒng)由N個處理單元構(gòu)成,記為P0,P1,…,Pn-1。處理單元之間用通信線路連接,每個處理單元的負(fù)載記為WORK(i),0≤i≤n-1。


          其中,ε和ω為經(jīng)驗調(diào)整系數(shù),Oε≤10,K1ω+∞,ω為足夠大的數(shù);μ、L和M分別是處理機(jī)i的CPU利用率、運(yùn)行隊列長度和處理機(jī)i中所有任務(wù)請求的內(nèi)存之和;Mem(i)為處理機(jī)i的可用內(nèi)存。
          整個系統(tǒng)的總負(fù)載為:


          系統(tǒng)的平均負(fù)載wavg可以簡單認(rèn)為是:

          Wavg=TotalWork/n
          定義負(fù)載上界為W1=Wavg+ζ,負(fù)載下界為W2=Wavg-ζ。其中,參數(shù)ζ視具體系統(tǒng)之不同而定。
          有了以上的基礎(chǔ),可以再進(jìn)一步對各個結(jié)點的負(fù)載進(jìn)行劃分:某個處理單元的負(fù)載WORK(i)W1,則為輕載結(jié)點;W1WORK(i)W2的為適載結(jié)點;WORK(i)>W2的為重載結(jié)點;WORK(i)=0的是空載結(jié)點,如圖1所示。

          2 嵌入式多處理機(jī)系統(tǒng)的動態(tài)負(fù)載平衡算法
          一般來說,系統(tǒng)中每個結(jié)點上的任務(wù)是動態(tài)產(chǎn)生的,負(fù)載大小也是動態(tài)變化的。在完成任務(wù)的過程中,要周期性地檢查任務(wù)完成的情況,并與其他結(jié)點交互這些情況。在此基礎(chǔ)上,按照一定原則確定是否對任務(wù)進(jìn)行遷移,以及遷移的源、目的結(jié)點和遷移量。
          在動態(tài)負(fù)載平衡策略中,比較有代表性的算法是輕載結(jié)點請求算法和重載結(jié)點請求算法。在嵌入式多處理機(jī)系統(tǒng)中,一般情況下,根據(jù)系統(tǒng)當(dāng)前的負(fù)載情況選用其中之一,可以有效地平衡負(fù)載;但是,當(dāng)系統(tǒng)負(fù)載發(fā)生變化后,可能會由于原先選用的算法不合適而導(dǎo)致附加開銷陡增,并且無法有效地平衡負(fù)載。因此,考慮到嵌入式系統(tǒng)本身的特點(例如資源有限等),輕載結(jié)點請求算法和重載結(jié)點請求算法不加改進(jìn)而直接用于嵌入式多處理機(jī)系統(tǒng)是不合適的。綜合這兩種算法的優(yōu)缺點,就有了雙向請求算法。
          2.1 輕載結(jié)點請求算法
          輕負(fù)載結(jié)點會嘗試向重載結(jié)點請求任務(wù),每個結(jié)點都定義了相關(guān)域,相關(guān)域的定義是把所有與之相鄰的結(jié)點作為相關(guān)域成員。結(jié)點只與其相關(guān)域中的結(jié)點進(jìn)行交互和任務(wù)傳遞。如果請求到任務(wù),則中止請求,否則就繼續(xù)詢問下一個相鄰結(jié)點。
          啟動時,所有結(jié)點幾乎都是輕載結(jié)點。經(jīng)過一段時間以后,結(jié)點開始檢查自身是否仍是輕載結(jié)點,如果仍是,就試圖在相關(guān)域中找出重載結(jié)點,并請求該結(jié)點上的任務(wù)。具體來說,設(shè)該輕載結(jié)點的負(fù)載為WORK(p),相關(guān)域中有k個結(jié)點WORK(a+1)、WORK(a+2)……WORK(a+k),則該部分的平均負(fù)載Wavg′為:


          為達(dá)到任務(wù)的均勻分布,應(yīng)求得相關(guān)域中重載結(jié)點應(yīng)該傳遞給該結(jié)點的負(fù)載量(設(shè)為Mk),但是必須對每個結(jié)點引入閾值H(j),以避免任務(wù)從負(fù)載更輕的輕載結(jié)點遷移過來。若WORK(j)>Wavg′,則H(j)一WORK(j)一Wavg′;否則,H(j)=0。


          然后,該結(jié)點就可以按照計算出的Mk值,向各個相關(guān)結(jié)點發(fā)出接收任務(wù)請求。
          輕載結(jié)點請求算法流程如下:
          ①判斷自己是否為輕載結(jié)點;
          ②如果是,則找出附近的重載結(jié)點,并對它發(fā)出任務(wù)請求;
          ③接收到請求算法的重載結(jié)點向該輕載結(jié)點發(fā)送任務(wù)。
          輕載結(jié)點請求算法的優(yōu)點是:不需要相互交換負(fù)載信息;當(dāng)每個結(jié)點均處于忙狀態(tài)時,不會有結(jié)點啟動輕載結(jié)點請求算法,幾乎不需要額外調(diào)度開銷;處理負(fù)載平衡問題的許多工作是由空閑結(jié)點來完成的,沒有給重載結(jié)點增加太多的額外負(fù)擔(dān)。
          缺點是:在開始和結(jié)束階段時任務(wù)數(shù)相對較少,大量輕載結(jié)點會不斷發(fā)出任務(wù)請求,并且這些請求中的大多數(shù)無法得到滿足,于是許多輕載結(jié)點會繼續(xù)發(fā)出請求。最終,大量的請求增加了系統(tǒng)的額外開銷,影響了系統(tǒng)整體性能,同時大量針對重載結(jié)點的任務(wù)請求會拖延它們本身任務(wù)的執(zhí)行。
          在系統(tǒng)整體負(fù)載較輕時,使用輕載結(jié)點請求算法反而會造成較大的額外開銷,不利于系統(tǒng)的整體性能。因此,輕載結(jié)點請求算法適合在整個系統(tǒng)負(fù)載較重時使用。
          2.2 重載結(jié)點請求算法
          重負(fù)載結(jié)點會嘗試向輕載結(jié)點發(fā)送任務(wù),至于發(fā)送任務(wù)給哪個結(jié)點,則取決于該結(jié)點相關(guān)域中結(jié)點的負(fù)載狀態(tài)。因此,該策略需要交換處理器的負(fù)載信息。一個結(jié)點有多種方法向鄰接結(jié)點通知它的負(fù)載情況,例如定期詢問、當(dāng)任務(wù)數(shù)發(fā)生變化時、接收到執(zhí)行任務(wù)請求時、響應(yīng)請求或者當(dāng)任務(wù)數(shù)超過一定閾值時等。
          啟動一段時間以后,各結(jié)點開始檢查自身是否是重載結(jié)點,如果是,就試圖在相關(guān)域中均勻地分布任務(wù)。與輕載結(jié)點請求算法類似,首先計算域內(nèi)的平均負(fù)載Wavg′,然后計算所要轉(zhuǎn)移的任務(wù)量Mk。
          設(shè)該重載結(jié)點的負(fù)載為WORK(p),相關(guān)域中有k個結(jié)點WORK(a+1)、WORK(a+2)…… WORK(a+k),則該部分的平均負(fù)載Wavg′為:


          對每個結(jié)點引入閾值H(j),以避免任務(wù)從負(fù)載更輕的輕載結(jié)點遷移過來。若WORK(j)>Wavg′,則H(j)=WORK(j)一wavg′;否則,H(j)=0。則Mk的值為:


          然后該結(jié)點就可以按照計算出的Mk值向各個相關(guān)結(jié)點發(fā)送任務(wù)。
          重載結(jié)點請求算法流程如下:
          ①判斷自己是否為重載結(jié)點;
          ②如果是,則找出附近的輕載結(jié)點,并對它發(fā)出任務(wù)轉(zhuǎn)移請求;
          ③得到同意后,重載結(jié)點向該輕載結(jié)點發(fā)送任務(wù)。
          重載結(jié)點請求的優(yōu)點是:如果沒有過重負(fù)載的忙結(jié)點,就不會被空閑鄰接結(jié)點所打擾。這在整個系統(tǒng)負(fù)載較輕時顯得尤為重要。
          缺點是:負(fù)載過重的重載結(jié)點還要額外增加處理負(fù)載平衡調(diào)度的負(fù)擔(dān)。
          系統(tǒng)整體負(fù)載較重時,如果使用重載結(jié)點請求算法,那么重載結(jié)點在自身已經(jīng)高負(fù)荷的情況下,還要負(fù)擔(dān)額外的處理負(fù)載平衡調(diào)度的負(fù)擔(dān),發(fā)出任務(wù)轉(zhuǎn)移請求。由于重載結(jié)點數(shù)目較多,多數(shù)任務(wù)轉(zhuǎn)移請求無法得到滿足,重負(fù)載結(jié)點會在將來繼續(xù)發(fā)出請求,這些請求反而會造成較大的額外開銷。因此,重載結(jié)點請求算法適合在整個系統(tǒng)負(fù)載較輕時采用。
          2.3 雙向請求算法
          綜合上面兩種算法的優(yōu)缺點,就有了雙向請求算法。發(fā)送者和接收者都能轉(zhuǎn)移任務(wù),因此該算法兼有重載結(jié)點請求算法和輕載結(jié)點請求算法的優(yōu)點。在系統(tǒng)負(fù)載較輕時,使用重載結(jié)點請求算法;在系統(tǒng)負(fù)載較重時,使用輕載結(jié)點請求算法。
          一個需要解決的問題是:怎么樣判斷系統(tǒng)負(fù)載的輕與重,即怎樣決定何時使用重載結(jié)點請求算法,何時使用輕載結(jié)點請求算法。這是非常關(guān)鍵的,如果解決得不恰當(dāng),那么雙向請求算法就不是結(jié)合重載結(jié)點請求算法與輕載結(jié)點請求算法的優(yōu)點,而是結(jié)合了二者的缺點。
          2.4 雙向請求算法的改進(jìn)
          改進(jìn)算法采用自適應(yīng)算法,合理地設(shè)置判斷負(fù)載的閾值,并隨著每個結(jié)點的任務(wù)負(fù)荷變化,動態(tài)地改變這個評判標(biāo)準(zhǔn),在系統(tǒng)負(fù)載重時采用輕載結(jié)點請求算法,在系統(tǒng)負(fù)載輕時采用重載結(jié)點請求算法。
          改進(jìn)算法中,每個結(jié)點記錄其相關(guān)域中其他結(jié)點的狀態(tài)信息,它維護(hù)2個集合,分別是輕載集θ和重載集φ。輕載集中保存的是其相關(guān)域中輕載結(jié)點的信息,而重載集中保存的是其相關(guān)域中重載結(jié)點的信息。每當(dāng)結(jié)點狀態(tài)發(fā)生變化時,發(fā)消息給相關(guān)域中的各結(jié)點,各結(jié)點相應(yīng)地改變其輕載集和重載集。
          比較兩個集合的大小來決定采用重載結(jié)點請求算法還是輕載結(jié)點請求算法。當(dāng)系統(tǒng)處于重負(fù)載時,會有大量的重負(fù)載結(jié)點,因而輕載集較小,而重載集較大,那么就采用輕載結(jié)點請求算法,在輕載集中找到接收者,由接收者主動申請結(jié)點的任務(wù);當(dāng)系統(tǒng)處于輕負(fù)載時,會有大量的輕負(fù)載結(jié)點,因而重載集較小,而輕載集較大,那么就采用重載結(jié)點請求算法,在重載集中找到發(fā)送者,由發(fā)送者主動遷移任務(wù)給結(jié)點。
          各結(jié)點的狀態(tài)分為R(輕載,即任務(wù)接收者)和S(重載,即任務(wù)發(fā)送者),閾值記為Mk。系統(tǒng)剛啟動時,各結(jié)點負(fù)載都比較輕(即均為R),因此,重載集合為空,輕載集合則等于結(jié)點全集。當(dāng)產(chǎn)生新任務(wù)時,只要結(jié)點負(fù)載不超過閾值Mk,這個新任務(wù)就在本地運(yùn)行,結(jié)點狀態(tài)仍舊是R。此時的系統(tǒng)處于低負(fù)載,使用重載結(jié)點請求算法。隨著一個個新任務(wù)的到來,結(jié)點負(fù)載增大,當(dāng)超過閾值Mk時,結(jié)點狀態(tài)變?yōu)镾,并通知其他結(jié)點改變它們所維護(hù)的重載集與輕載集。
          然后,比較結(jié)點輕載集和重載集的大小:若重載集小于輕載集,則繼續(xù)采用重載結(jié)點請求算法,按重載結(jié)點請求算法遍歷其輕載集中的結(jié)點,找出最合適執(zhí)行新產(chǎn)生任務(wù)的結(jié)點,并發(fā)送任務(wù);若重載集大于輕載集,則改用輕載結(jié)點請求算法,按輕載結(jié)點請求算法遍歷重載集中的結(jié)點,并發(fā)送請求任務(wù)的信號。
          圖2為改進(jìn)的雙向請求算法流程。

          在嵌入式多處理機(jī)系統(tǒng)中,要實現(xiàn)任務(wù)的再次分配,一般是采取進(jìn)程遷移的方式。但是進(jìn)程遷移開銷較大,而且選擇可遷移進(jìn)程的標(biāo)準(zhǔn)和策略是實現(xiàn)動態(tài)搶先式負(fù)載平衡的關(guān)鍵問題,若選擇了不該遷移的進(jìn)程進(jìn)行遷移,則可能會抵消負(fù)載平衡所帶來的性能的改善。
          定義2 進(jìn)程從開始執(zhí)行到最終結(jié)束所花費的CPU周期數(shù)稱為“進(jìn)程生存周期數(shù)”,進(jìn)程當(dāng)前已經(jīng)耗費掉的CPU周期數(shù)稱為“進(jìn)程已生存周期數(shù)”。
          最簡單的方法是選擇最新生成的任務(wù),導(dǎo)致處理器工作負(fù)載超出門限值,這些任務(wù)相對來說遷移的代價不大。也可以選擇已運(yùn)行的任務(wù),然而,可能的結(jié)果是遷移運(yùn)行任務(wù)的代價抵消了作業(yè)運(yùn)行時間的減少。因此,選擇生存期長、已生存周期數(shù)較少的進(jìn)程更有利,可以使遷移開銷有時間得以補(bǔ)償。在本模型中,選擇前一種遷移策略。
          仿真測試基于卡內(nèi)基梅隆大學(xué)的負(fù)載平衡測試框架,設(shè)置了5個結(jié)點。輸入具有代表性的任務(wù)集之后,分別在系統(tǒng)負(fù)載較輕、較重和正常的情況下進(jìn)行仿真測試。每個結(jié)點的剩余負(fù)載能力不同,分別記為:20,90,30,20,40。不妨假設(shè),在負(fù)載平衡前,負(fù)載是平均分配到5個結(jié)點上的,使用本文中的策略進(jìn)行負(fù)載平衡后,剩余負(fù)載能力較強(qiáng)的結(jié)點將負(fù)擔(dān)更多的負(fù)載。由于篇幅所限,這里只能列出部分測試結(jié)果,分別如圖3~圖5所示。

          結(jié) 語
          負(fù)載平衡調(diào)度是嵌入式多處理機(jī)系統(tǒng)利用處理器資源的一種有效途徑,它能讓多個處理單元比較平衡地共同承擔(dān)一系列繁重的任務(wù),從而大大提高了系統(tǒng)的吞吐率與性能。動態(tài)負(fù)載平衡問題是一個正在蓬勃發(fā)展的研究熱點,還有許多未知的問題有待進(jìn)一步地探索和研究。仿真結(jié)果表明,本文介紹的改進(jìn)算法有效地平衡了各結(jié)點的負(fù)載,提高了整個系統(tǒng)資源的吞吐率與性能。該算法還有待在今后的研究工作中,通過實踐的檢驗,找出該算法所需設(shè)置的參數(shù)(例如閾值Mk和H(j))的合適值。

          電子負(fù)載相關(guān)文章:電子負(fù)載原理


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();