負載均衡方法及裝置制造方法
【專利摘要】本發(fā)明實施例提供一種負載均衡方法及裝置。該方法包括:源CPU判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則所述源CPU將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。本發(fā)明實施例在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了CPU頻繁訪問遠程內(nèi)存,提高了NUMA系統(tǒng)性能。
【專利說明】負載均衡方法及裝置
【技術領域】
[0001]本發(fā)明實施例涉及通信技術,尤其涉及一種負載均衡方法及裝置。
【背景技術】
[0002]非統(tǒng)一內(nèi)存訪問(NonUniform Memory Access Achitecture,簡稱 NUMA)系統(tǒng)包括多個中央處理器(Central Processing Unit,簡稱CPU),每個CPU可執(zhí)行多個進程,多個CPU在執(zhí)行多個進程的過程中可能出現(xiàn)部分CPU執(zhí)行進程多,部分CPU執(zhí)行進程少,現(xiàn)有技術采用調度域負載均衡技術解決多個CPU執(zhí)行進程不均衡的情況。
[0003]調度域負載均衡技術針對調度域進行處理,調度域的結構如圖1所示,從上到下依次分成NUMA域、物理域、Core域和CPU四個層級,且每個上級域包含若干個下級域。各(PU按不同間隔定時響應操作系統(tǒng)產(chǎn)生的調度中斷并執(zhí)行中斷函數(shù),CPU執(zhí)行中斷函數(shù)具體為遍歷調度域,尋找最繁忙的CPU,從最繁忙的CPU的運行隊列中選出待遷移進程,并將待遷移進程遷移到該CPU的運行隊列中。
[0004]現(xiàn)有技術可能造成源CPU中對本地內(nèi)存訪問頻率較高的進程被遷移到目標CPU,使目標CPU在執(zhí)行該進程的過程中頻繁訪問源CPU中的內(nèi)存,最終導致NUMA系統(tǒng)性能下降。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種負載均衡方法及裝置,以提高NUMA系統(tǒng)性能。
[0006]本發(fā)明實施例的一個方面是提供一種負載均衡方法,包括:
[0007]源CPU判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;其中,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;
[0008]若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則所述源CPU將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。
[0009]本發(fā)明實施例的另一個方面是提供一種負載均衡方法,包括:
[0010]目標CPU接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是所述源CPU判斷獲知所述第一進程對應的遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存時向所述目標CPU聯(lián)合遷移的,其中,所述第一進程是所述源CPU執(zhí)行的運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;
[0011]所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程。
[0012]本發(fā)明實施例的另一個方面是提供一種負載均衡方法,包括:
[0013]源CPU判斷執(zhí)行第一進程是否需要訪問1源,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述1源在目標CPU中;
[0014]若所述源CPU需要訪問所述1源,則所述源CPU將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。
[0015]本發(fā)明實施例的另一個方面是提供一種負載均衡方法,包括:
[0016]目標CPU接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是源CPU判斷獲知執(zhí)行所述第一進程需要訪問1源時向所述目標CPU聯(lián)合遷移的,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述1源在所述目標CPU中;
[0017]所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程。
[0018]本發(fā)明實施例的另一個方面是提供一種源CPU,包括:
[0019]判斷模塊,用于判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;其中,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;
[0020]遷移模塊,用于若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且所述判斷模塊判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。
[0021]本發(fā)明實施例的另一個方面是提供一種目標CPU,包括:
[0022]接收模塊,用于接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是所述源CPU判斷獲知所述第一進程對應的遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存時向所述目標CPU聯(lián)合遷移的,其中,所述第一進程是所述源CPU執(zhí)行的運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;
[0023]執(zhí)行模塊,用于依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程。
[0024]本發(fā)明實施例的另一個方面是提供一種源CPU,包括:
[0025]判斷模塊,用于判斷執(zhí)行第一進程是否需要訪問1源,所述第一進程是所述源(PU中運行狀態(tài)的進程,所述1源在目標CPU中;
[0026]遷移模塊,用于若所述源CPU需要訪問所述1源時,將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。
[0027]本發(fā)明實施例的另一個方面是提供一種目標CPU,包括:
[0028]接收模塊,用于接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是源CPU判斷獲知執(zhí)行所述第一進程需要訪問1源時向所述目標CPU聯(lián)合遷移的,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述1源在所述目標CPU中;
[0029]執(zhí)行模塊,用于依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程。
[0030]本發(fā)明實施例的另一個方面是提供一種負載均衡系統(tǒng),包括多個所述的源CPU和多個所述的目標CPU。
[0031]本發(fā)明實施例提供的負載均衡方法及裝置,在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了 CPU頻繁訪問遠程內(nèi)存,提高了 NUMA系統(tǒng)性能。
【專利附圖】
【附圖說明】
[0032]圖1為現(xiàn)有技術中NUMA系統(tǒng)調度域的結構圖;
[0033]圖2為本發(fā)明實施例提供的負載均衡方法流程圖;
[0034]圖3為本發(fā)明另一實施例提供的負載均衡方法流程圖;
[0035]圖4為本發(fā)明另一實施例提供的負載均衡方法流程圖;
[0036]圖5為本發(fā)明另一實施例提供的負載均衡方法流程圖;
[0037]圖6A為本發(fā)明另一實施例提供的負載均衡方法適用的信令圖;
[0038]圖6B為本發(fā)明另一實施例提供的負載均衡方法適用的信令圖;
[0039]圖7為本發(fā)明實施例提供的負載均衡方法流程圖;
[0040]圖8為本發(fā)明實施例提供的源CPU的結構圖;
[0041]圖9為本發(fā)明另一實施例提供的源CPU的結構圖;
[0042]圖10為本發(fā)明實施例提供的目標CPU的結構圖;
[0043]圖11為本發(fā)明另一實施例提供的目標CPU的結構圖;
[0044]圖12為本發(fā)明另一實施例提供的源CPU的結構圖;
[0045]圖13為本發(fā)明另一實施例提供的目標CPU的結構圖;
[0046]圖14為本發(fā)明另一實施例提供的負載均衡系統(tǒng)的結構圖。
【具體實施方式】
[0047]圖2為本發(fā)明實施例提供的負載均衡方法流程圖。本發(fā)明實施例適用于解決NUMA系統(tǒng)中多個CPU執(zhí)行進程不均衡的問題。具體的負載均衡方法步驟如下:
[0048]步驟S201、源CPU判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;其中,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;
[0049]源CPU在執(zhí)行運行狀態(tài)的第一進程時除了訪問本地與第一進程對應的內(nèi)存外,還可能訪問其他CPU即目標CPU中與所述第一進程對應的內(nèi)存,本發(fā)明實施例用本地內(nèi)存依賴性標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,且第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存;用遠程內(nèi)存依賴性標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,且所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;本地內(nèi)存依賴性或遠程內(nèi)存依賴性具體可以表示為R(P) = f(N),其中,P表示第一進程,N表示源CPU執(zhí)行第一進程時訪問本地內(nèi)存或遠程內(nèi)存的次數(shù),f表示N的一個函數(shù),該函數(shù)使f(N)的值小于N,便于計算,本發(fā)明實施例中本地內(nèi)存依賴性或遠程內(nèi)存依賴性R(p)的計算并不局限于上述一種表達式。
[0050]所述源CPU在執(zhí)行所述第一進程時判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性,即所述源CPU在執(zhí)行所述第一進程時訪問遠程內(nèi)存的頻率是否大于訪問本地內(nèi)存的頻率。
[0051]步驟S202、若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則所述源CPU將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。
[0052]若源CPU判斷獲知所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,即所述源CPU在執(zhí)行所述第一進程時訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率,并且判斷獲知所述第二內(nèi)存即遠程內(nèi)存是非獨占內(nèi)存或者大小大于預設閾值的獨占內(nèi)存,則所述源CPU將所述第一進程與本地中與第一進程對應的內(nèi)存聯(lián)合遷移到目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程;其中,所述預設閾值T是與所述遠程內(nèi)存依賴性R(P)成正比的值,具體為T = F (K,R(P)),其中,K表示常數(shù),F(xiàn)函數(shù)實現(xiàn)T與R(P)的正相關關系,且本發(fā)明實施例中所述預設閾值T的計算并不局限于上述一種表達式。
[0053]本發(fā)明實施例在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了 CPU頻繁訪問遠程內(nèi)存,提高了 NUMA系統(tǒng)性能。
[0054]在上述實施例的基礎上,步驟S202中還包括:若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且判斷獲知所述第二內(nèi)存是小于所述預設閾值的獨占內(nèi)存,則所述源CPU將所述第二內(nèi)存遷移到源CPU本地。
[0055]當所述源CPU執(zhí)行第一進程時,訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率,且遠程內(nèi)存的大小小于上述實施例中的預設閾值T,即遷移遠程內(nèi)存的代價小于聯(lián)合遷移第一進程和本地內(nèi)存的代價,則所述源CPU將遠程內(nèi)存遷移到源CPU本地。
[0056]步驟S202中,所述源CPU將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU包括:所述源CPU若判斷獲知所述目標CPU的負載小于所述源CPU的負載,則將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ;所述源CPU若判斷獲知所述目標CPU的負載大于所述源CPU的負載,則觸發(fā)所述目標CPU執(zhí)行進程遷出,再將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ;其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。[0057]所述源CPU向目標CPU聯(lián)合遷移第一進程和第一內(nèi)存之前,比較目標CPU的負載與源CPU的負載大小,本發(fā)明實施例可以用所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和來衡量目標CPU的負載,用所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和來衡量源CPU的負載。
[0058]當所述目標CPU的負載小于所述源CPU的負載時,所述源CPU將所述第一進程與所述第一內(nèi)存直接聯(lián)合遷移到所述目標CPU ;當所述目標CPU的負載大于所述源CPU的負載時,所述源CPU觸發(fā)所述目標CPU執(zhí)行進程遷出,再將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU。
[0059]所述觸發(fā)所述目標CPU執(zhí)行進程遷出包括:觸發(fā)所述目標CPU選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
[0060]即所述目標CPU的負載大于所述源CPU的負載時,所述目標CPU要釋放部分處理能力及內(nèi)存,以便接收源CPU聯(lián)合遷移過來的第一進程和第一內(nèi)存。
[0061]本發(fā)明實施例通過判斷遠程內(nèi)存的大小決定源CPU進行聯(lián)合遷移或只遷移遠程內(nèi)存,通過對目標CPU、源CPU的負載大小比較,決定目標CPU是否需要釋放進程和對應的內(nèi)存,進一步提高了 NUMA系統(tǒng)的性能。
[0062]在上述實施例的基礎上,步驟S202之后還包括:所述源CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù),則所述源CPU從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
[0063]當源CPU中包括第一進程在內(nèi)的處于運行狀態(tài)的進程消亡或者轉為非運行狀態(tài)時,且整個NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù),即源CPU空出了處理能力,則源CPU從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,即所述第三進程是滿足遷移代價最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存。
[0064]當源CPU中包括第一進程在內(nèi)的處于運行狀態(tài)的進程消亡或者轉為非運行狀態(tài)時,且整個NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)小于CPU總數(shù),即NUMA系統(tǒng)中的各CPU有足夠的處理能力時,源CPU不進行處理,以免同一個進程在多個CPU之間來回切換。其中,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
[0065]本發(fā)明實施例當源CPU中運行狀態(tài)的進程數(shù)量減少時,通過從負載最高的CPU中將遷移代價最小的進程和其對應的內(nèi)存聯(lián)合遷移到源CPU本地,提高了 NUMA系統(tǒng)資源利用率。
[0066]圖3為本發(fā)明另一實施例提供的負載均衡方法流程圖。如圖3所示,本發(fā)明實施例提供的負載均衡方法具體步驟如下:
[0067]步驟S301、目標CPU接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是所述源CPU判斷獲知所述第一進程對應的遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存時向所述目標CPU聯(lián)合遷移的,其中,所述第一進程是所述源CPU執(zhí)行的運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;
[0068]源CPU在執(zhí)行運行狀態(tài)的第一進程時除了訪問本地與第一進程對應的內(nèi)存外,還可能訪問其他CPU即目標CPU中與所述第一進程對應的內(nèi)存,本發(fā)明實施例用本地內(nèi)存依賴性標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,且第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存;用遠程內(nèi)存依賴性標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,且所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存。
[0069]所述源CPU在執(zhí)行所述第一進程時判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性,即所述源CPU在執(zhí)行所述第一進程時訪問遠程內(nèi)存的頻率是否大于訪問本地內(nèi)存的頻率,若源CPU判斷獲知所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,即所述源CPU在執(zhí)行所述第一進程時訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率,并且判斷獲知所述第二內(nèi)存及遠程內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則所述源CPU將所述第一進程與本地中與第一進程對應的內(nèi)存聯(lián)合遷移到目標CPU。
[0070]步驟S302、所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程。
[0071]所述目標CPU依據(jù)接收的所述第一內(nèi)存和本地的所述第二內(nèi)存執(zhí)行源CPU遷移過來的第一進程。
[0072]本發(fā)明實施例在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了 CPU頻繁訪問遠程內(nèi)存,提高了 NUMA系統(tǒng)性能。
[0073]在上述實施例的基礎上,步驟S301中,所述目標CPU接收第一進程與第一內(nèi)存包括:若所述目標CPU的負載小于所述源CPU的負載,所述目標CPU接收所述第一進程與所述第一內(nèi)存;若所述目標CPU的負載大于所述源CPU的負載,所述目標CPU執(zhí)行進程遷出后接收所述第一進程與所述第一內(nèi)存;其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
[0074]所述源CPU向目標CPU聯(lián)合遷移第一進程和第一內(nèi)存之前,比較目標CPU的負載與源CPU的負載大小,本發(fā)明實施例用所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和來衡量目標CPU的負載,用所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和來衡量源CPU的負載。
[0075]當所述目標CPU的負載小于所述源CPU的負載時,所述源CPU將所述第一進程與所述第一內(nèi)存直接聯(lián)合遷移到所述目標CPU ;當所述目標CPU的負載大于所述源CPU的負載時,所述源CPU觸發(fā)所述目標CPU執(zhí)行進程遷出,再將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU。[0076]所述目標CPU執(zhí)行進程遷出包括:所述目標CPU選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
[0077]即所述目標CPU的負載大于所述源CPU的負載時,所述目標CPU要釋放部分處理能力及內(nèi)存,以便接收源CPU聯(lián)合遷移過來的第一進程和第一內(nèi)存。
[0078]本發(fā)明實施例通過對目標CPU、源CPU的負載大小比較,決定目標CPU是否需要釋放進程和對應的內(nèi)存,進一步提高了 NUMA系統(tǒng)的性能。
[0079]在上述實施例的基礎上,步驟S302之后,還包括:所述目標CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù),則所述目標CPU從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
[0080]當目的CPU中包括第一進程在內(nèi)的處于運行狀態(tài)的進程消亡或者轉為非運行狀態(tài)時,且整個NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù),即目的CPU空出了處理能力,則目的CPU從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,即所述第三進程是滿足遷移代價最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存。
[0081]當目的CPU中包括第一進程在內(nèi)的處于運行狀態(tài)的進程消亡或者轉為非運行狀態(tài)時,且整個NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)小于CPU總數(shù),即NUMA系統(tǒng)中的各CPU有足夠的處理能力時,目的CPU不進行處理,以免同一個進程在多個CPU之間來回切換。其中,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
[0082]本發(fā)明實施例當目的CPU中運行狀態(tài)的進程數(shù)量減少時,通過從負載最高的CPU中將遷移代價最小的進程和其對應的內(nèi)存聯(lián)合遷移到目的CPU本地,提高了 NUMA系統(tǒng)資源利用率。
[0083]圖4為本發(fā)明另一實施例提供的負載均衡方法流程圖。本發(fā)明實施例提供的負載均衡方法具體步驟如下:
[0084]步驟S401、源CPU判斷執(zhí)行第一進程是否需要訪問1源,所述第一進程是所述源(PU中運行狀態(tài)的進程,所述1源在目標CPU中;
[0085]源CPU在執(zhí)行運行狀態(tài)的第一進程時除了訪問本地與第一進程對應的內(nèi)存即第一內(nèi)存外,還可能需要訪問其他CPU即目標CPU中的1源,則源CPU判斷是否需要訪問1源。
[0086]步驟S402、若所述源CPU需要訪問所述1源,則所述源CPU將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。
[0087]若源CPU判斷獲知執(zhí)行第一進程需要訪問所述1源,則將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。[0088]本發(fā)明實施例提供的負載均衡方法可用于上述實施例提供的負載均衡方法中,SP若NUMA系統(tǒng)中存在源CPU訪問目標CPU上的1源時,則不執(zhí)行上述實施例提供的負載均衡方法流程,而按照本發(fā)明實施例的具體步驟執(zhí)行。
[0089]本發(fā)明實施例在執(zhí)行進程需要訪問遠程的1源時,將源CPU中的進程和其對應的內(nèi)存聯(lián)合遷移到目標CPU,避免源CPU頻繁訪問遠程的1源,提高了 NUMA系統(tǒng)性能。
[0090]圖5為本發(fā)明另一實施例提供的負載均衡方法流程圖。本發(fā)明實施例提供的負載均衡方法具體步驟如下:
[0091]步驟S501、目標CPU接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是源CPU判斷獲知執(zhí)行所述第一進程需要訪問1源時向所述目標CPU聯(lián)合遷移的,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述1源在所述目標CPU中;
[0092]源CPU在執(zhí)行運行狀態(tài)的第一進程時除了訪問本地與第一進程對應的內(nèi)存即第一內(nèi)存外,還可能需要訪問其他CPU即目標CPU中的1源,則源CPU判斷是否需要訪問1源;若源CPU判斷獲知執(zhí)行第一進程需要訪問所述1源,則將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU。
[0093]步驟S502、所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程。
[0094]所述目標CPU依據(jù)接收的第一內(nèi)存和本地的1源執(zhí)行源CPU遷移過來的第一進程。
[0095]本發(fā)明實施例在執(zhí)行進程需要訪問遠程的1源時,將源CPU中的進程和其對應的內(nèi)存聯(lián)合遷移到目標CPU,避免源CPU頻繁訪問遠程的1源,提高了 NUMA系統(tǒng)性能。
[0096]圖6A為本發(fā)明另一實施例提供的負載均衡方法適用的信令圖。本發(fā)明實施例采用事件觸發(fā)的方式調整多CPU之間負載均衡,具體為確定可能引發(fā)CPU和內(nèi)存訪問負載不均衡的事件,采用相應的策略來消除各個不均衡事件的影響。
[0097]本發(fā)明實施例確定的可能引發(fā)CPU和內(nèi)存訪問負載不均衡的事件包括如下:
[0098]S1、進程創(chuàng)建;
[0099]S2、進程消亡;
[0100]S3、進程的狀態(tài)由運行狀態(tài)轉為非運行狀態(tài);
[0101]S4、進程的狀態(tài)由非運行狀態(tài)轉為運行狀態(tài);
[0102]S5、CPU連續(xù)訪問遠程內(nèi)存;
[0103]S6、進程從一個CPU遷往另一個CPU ;
[0104]S7、QPI負荷超過閾值。
[0105]對于S1-S3采用如圖6A所示的處理方法,具體步驟如下:
[0106]步驟S601、CPUl創(chuàng)建新進程;
[0107]當SI事件發(fā)生時,選擇負載最低的CPU例如CPU1,由CPUl創(chuàng)建并執(zhí)行新進程。
[0108]步驟S602、CPU3判斷進程狀態(tài);
[0109]各CPU均可判斷進程狀態(tài),例如CPU3判斷發(fā)生了事件S2或S3,則執(zhí)行步驟S603。
[0110]步驟S603、CPU3聯(lián)合遷移進程和對應的內(nèi)存。
[0111]CPU3確定負載最高的CPU例如為CPU N,從CPU N中選擇遷移代價最小的進程,并將進程和其在CPU N中對應的內(nèi)存聯(lián)合遷移到CPU3本地,其中遷移代價用進程對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和衡量。
[0112]本發(fā)明實施例并不局限CPUl是負載最低的CPU、CPU N是負載最高的CPU,以及CPU3是檢測到事件S2或S3的CPU。
[0113]圖6B為本發(fā)明另一實施例提供的負載均衡方法適用的信令圖。在本發(fā)明實施例中,對于S4-S7采用如圖6B所示的處理方法,具體步驟如下:
[0114]步驟S701、CPU6判斷進程狀態(tài);
[0115]各CPU均可判斷進程狀態(tài),例如CPU6判斷發(fā)生了事件S4,則選擇負載最低的CPU例如CPU4,執(zhí)行步驟S702。
[0116]步驟S702、CPU6向CPU4遷移進程;
[0117]CPU6將與事件S4對應的進程遷移到負載最低的CPU4。
[0118]步驟S703、CPU4比較遠程內(nèi)存依賴性和本地內(nèi)存依賴性;
[0119]CPU4執(zhí)行進程一段時間后,若發(fā)生事件S5,則比較遠程內(nèi)存依賴性和本地內(nèi)存依賴性,若遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且遠程內(nèi)存是獨占小內(nèi)存,則執(zhí)行步驟S704,若遠程內(nèi)存是非獨占內(nèi)存或者獨占大內(nèi)存,則執(zhí)行步驟S705。
[0120]步驟S704、CPU4從CPU6遷移獨占小內(nèi)存;
[0121]步驟S705、CPU4判斷CPU4和CPU6的負載;
[0122]遠程內(nèi)存是非獨占內(nèi)存或者獨占大內(nèi)存,此時CPU4需要向CPU6聯(lián)合遷移進程和內(nèi)存,即進程從一個CPU遷往另一個CPU,此時發(fā)生事件S6,CPU4首先比較CPU4和CPU6的負載大小,若CPU4的負載大于CPU6的負載,則執(zhí)行步驟S707,若CPU4的負載小于CPU6的負載,則先執(zhí)行步驟S706,后執(zhí)行步驟S707。
[0123]步驟S706、CPU6將進程遷出到CPU M ;
[0124]CPU6選擇出遷移代價最小的進程,并將進程和CPU6中進程對應的內(nèi)存聯(lián)合遷移到負載最小的CPU例如CPU Mo
[0125]步驟S707、CPU4向CPU6聯(lián)合遷移進程和內(nèi)存;
[0126]步驟S708、CPU4向CPU H聯(lián)合遷移進程和內(nèi)存;
[0127]若事件S7發(fā)生,QPI負載增加是由于CPU4執(zhí)行進程時訪問遠端如CPU H的1源造成的,則CPU4將進程和進程對應的內(nèi)存聯(lián)合遷移到CPU H。
[0128]本發(fā)明實施例并不限制CPU4和CPU M是負載最小的CPU,CPU H是1源所在的CPU,CPU6是檢測到事件S4的CPU。
[0129]圖7為本發(fā)明實施例提供的負載均衡方法流程圖。如圖7所示,本發(fā)明實施例提供的負載均衡方法是圖6A、6B相結合的方法,事件S1-S7觸發(fā)NUMA系統(tǒng)產(chǎn)生中斷并調整多(PU之間負載均衡,對不同事件的處理方法不同,具體與圖6A、6B中的方法一致,此處不再贅述。
[0130]本發(fā)明實施例采用事件觸發(fā)的方式調整多CPU之間負載均衡,在一定程度上節(jié)省了系統(tǒng)資源,進一步提高了 NUMA系統(tǒng)的性能。
[0131]圖8為本發(fā)明實施例提供的源CPU的結構圖。本發(fā)明實施例提供的源CPU可以執(zhí)行負載均衡方法實施例提供的處理流程,如圖8所示,源CPU80包括判斷模塊81和遷移模塊82,其中,判斷模塊81用于判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;其中,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;遷移模塊82用于若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且所述判斷模塊81判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。
[0132]本發(fā)明實施例提供的源CPU可以具體用于執(zhí)行上述圖2所提供的方法實施例,具體功能此處不再贅述。
[0133]本發(fā)明實施例在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了 CPU頻繁訪問遠程內(nèi)存,提高了 NUMA系統(tǒng)性能。
[0134]圖9為本發(fā)明另一實施例提供的源CPU的結構圖。本發(fā)明實施例提供的源CPU可以執(zhí)行負載均衡方法實施例提供的處理流程,在上述實施例的基礎上,遷移模塊82還用于若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且所述判斷模塊81判斷獲知所述第二內(nèi)存是小于所述預設閾值的獨占內(nèi)存,則將所述第二內(nèi)存遷移到源CPU本地。
[0135]遷移模塊82具體用于若所述判斷模塊81判斷獲知所述目標CPU的負載小于所述源CPU的負載時,將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ;源CPU80還包括觸發(fā)模塊83,觸發(fā)模塊83用于若所述判斷模塊81判斷獲知所述目標CPU的負載大于所述源CPU的負載時,觸發(fā)所述目標CPU執(zhí)行進程遷出,所述遷移模塊82再將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ;其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
[0136]所述觸發(fā)模塊83具體用于觸發(fā)所述目標CPU選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
[0137]本發(fā)明實施例通過判斷遠程內(nèi)存的大小決定源CPU進行聯(lián)合遷移或只遷移遠程內(nèi)存,通過對目標CPU、源CPU的負載大小比較,決定目標CPU是否需要釋放進程和對應的內(nèi)存,進一步提高了 NUMA系統(tǒng)的性能。
[0138]在上述實施例的基礎上,遷移模塊82還用于所述源CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù)時,從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
[0139]本發(fā)明實施例當源CPU中運行狀態(tài)的進程數(shù)量減少時,通過從負載最高的CPU中將遷移代價最小的進程和其對應的內(nèi)存聯(lián)合遷移到源CPU本地,提高了 NUMA系統(tǒng)資源利用率。[0140]圖10為本發(fā)明實施例提供的目標CPU的結構圖。本發(fā)明實施例提供的目標CPU可以執(zhí)行負載均衡方法實施例提供的處理流程,如圖10所示,目標CPU100包括接收模塊101和執(zhí)行模塊102,其中,接收模塊101用于接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是所述源CPU判斷獲知所述第一進程對應的遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存時向所述目標CPU聯(lián)合遷移的,其中,所述第一進程是所述源CPU執(zhí)行的運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存;執(zhí)行模塊102用于依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程。
[0141]本發(fā)明實施例提供的目標CPU可以具體用于執(zhí)行上述圖3所提供的方法實施例,具體功能此處不再贅述。
[0142]本發(fā)明實施例在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了 CPU頻繁訪問遠程內(nèi)存,提高了 NUMA系統(tǒng)性能。
[0143]在上述實施例的基礎上,接收模塊101具體用于若所述目標CPU的負載小于所述源CPU的負載時,接收所述第一進程與所述第一內(nèi)存;若所述目標CPU的負載大于所述源CPU的負載時,所述執(zhí)行模塊102還用于執(zhí)行進程遷出,所述執(zhí)行模塊102執(zhí)行進程遷出后所述接收模塊101接收所述第一進程與所述第一內(nèi)存;其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
[0144]執(zhí)行模塊102具體用于選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
[0145]本發(fā)明實施例通過對目標CPU、源CPU的負載大小比較,決定目標CPU是否需要釋放進程和對應的內(nèi)存,進一步提高了 NUMA系統(tǒng)的性能。
[0146]圖11為本發(fā)明另一實施例提供的目標CPU的結構圖。本發(fā)明實施例提供的目標(PU可以執(zhí)行負載均衡方法實施例提供的處理流程,如圖11所示,在上述實施例的基礎上,目標CPU100還包括遷移模塊111,遷移模塊111用于所述目標CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù)時,從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最聞的CF1U。
[0147]本發(fā)明實施例當目的CPU中運行狀態(tài)的進程數(shù)量減少時,通過從負載最高的CPU中將遷移代價最小的進程和其對應的內(nèi)存聯(lián)合遷移到目的CPU本地,提高了 NUMA系統(tǒng)資源利用率。
[0148]圖12為本發(fā)明另一實施例提供的源CPU的結構圖。本發(fā)明實施例提供的源CPU可以執(zhí)行負載均衡方法實施例提供的處理流程,如圖12所示,源CPU120包括判斷模塊121和遷移模塊122,其中,判斷模塊121用于判斷執(zhí)行第一進程是否需要訪問1源,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述1源在目標CPU中;遷移模塊122用于若所述源CPU需要訪問所述1源時,將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。
[0149]本發(fā)明實施例提供的源CPU可以具體用于執(zhí)行上述圖4所提供的方法實施例,具體功能此處不再贅述。
[0150]本發(fā)明實施例在執(zhí)行進程需要訪問遠程的1源時,將源CPU中的進程和其對應的內(nèi)存聯(lián)合遷移到目標CPU,避免源CPU頻繁訪問遠程的1源,提高了 NUMA系統(tǒng)性能。
[0151]圖13為本發(fā)明另一實施例提供的目標CPU的結構圖。本發(fā)明實施例提供的目標(PU可以執(zhí)行負載均衡方法實施例提供的處理流程,如圖13所示,目標CPU130包括接收模塊131和執(zhí)行模塊132,其中,接收模塊131用于接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是源CPU判斷獲知執(zhí)行所述第一進程需要訪問1源時向所述目標CPU聯(lián)合遷移的,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述1源在所述目標CPU中;執(zhí)行模塊132用于依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程。
[0152]本發(fā)明實施例提供的目標CPU可以具體用于執(zhí)行上述圖5所提供的方法實施例,具體功能此處不再贅述。
[0153]本發(fā)明實施例在執(zhí)行進程需要訪問遠程的1源時,將源CPU中的進程和其對應的內(nèi)存聯(lián)合遷移到目標CPU,避免源CPU頻繁訪問遠程的1源,提高了 NUMA系統(tǒng)性能。
[0154]圖14為本發(fā)明另一實施例提供的負載均衡系統(tǒng)的結構圖。本發(fā)明實施例提供的負載均衡系統(tǒng)可以執(zhí)行負載均衡方法實施例提供的處理流程,如圖14所示,負載均衡系統(tǒng)140包括上述實施例所述的源CPU80和上述實施例所述的目標CPU100。
[0155]可選的,該負載均衡系統(tǒng)140包括上述實施例所述的源CPU120和上述實施例所述的目標CPU130,鑒于此時該負載均衡系統(tǒng)140和圖14描述的負載均衡系統(tǒng)結構類似,因此,沒有給出此種情況下該負載均衡系統(tǒng)140的結構附圖。
[0156]本發(fā)明實施例提供的負載均衡系統(tǒng)可以執(zhí)行負載均衡方法實施例提供的處理流程。
[0157]綜上所述,本發(fā)明實施例在CPU執(zhí)行進程造成訪問遠程內(nèi)存的頻率大于訪問本地內(nèi)存的頻率時,通過將進程與本地內(nèi)存聯(lián)合遷移到遠程內(nèi)存所在的CPU,避免了 CPU頻繁訪問遠程內(nèi)存,提高了 NUMA系統(tǒng)性能;通過判斷遠程內(nèi)存的大小決定源CPU進行聯(lián)合遷移或只遷移遠程內(nèi)存,通過對目標CPU、源CPU的負載大小比較,決定目標CPU是否需要釋放進程和對應的內(nèi)存,進一步提高了 NUMA系統(tǒng)的性能;當源CPU中運行狀態(tài)的進程數(shù)量減少時,通過從負載最高的CPU中將遷移代價最小的進程和其對應的內(nèi)存聯(lián)合遷移到源CPU本地,提高了 NUMA系統(tǒng)資源利用率;采用事件觸發(fā)的方式調整多CPU之間負載均衡,在一定程度上節(jié)省了系統(tǒng)資源,進一步提高了 NUMA系統(tǒng)的性能。
[0158]在本發(fā)明所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
[0159]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
[0160]另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
[0161]上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存儲介質中。上述軟件功能單元存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(Read-Only Memory, ROM)、隨機存取存儲器(Random Access Memory, RAM)、磁碟或者光盤等各種可以存儲程序代碼的介質。
[0162]本領域技術人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進行舉例說明,實際應用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的裝置的具體工作過程,可以參考前述方法實施例中的對應過程,在此不再贅述。
[0163]最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的范圍。
【權利要求】
1.一種負載均衡方法,其特征在于,包括: 源CPU判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;其中,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存; 若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則所述源CPU將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。
2.根據(jù)權利要求1所述的方法,其特征在于,還包括: 若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且判斷獲知所述第二內(nèi)存是小于所述預設閾值的獨占內(nèi)存,則所述源CPU將所述第二內(nèi)存遷移到源CPU本地。
3.根據(jù)權利要求1所述的方法,其特征在于,所述源CPU將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU包括: 所述源CPU若判斷獲知所述目標CPU的負載小于所述源CPU的負載,則將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ; 所述源CPU若判斷獲知所述目標CPU的負載大于所述源CPU的負載,則觸發(fā)所述目標CPU執(zhí)行進程遷出,再將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ; 其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
4.根據(jù)權利要求3所述的方法,其特征在于,所述觸發(fā)所述目標CPU執(zhí)行進程遷出包括: 觸發(fā)所述目標CPU選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
5.根據(jù)權利要求1-4任一項所述的方法,其特征在于,還包括: 所述源CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù),則所述源CPU從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
6.—種負載均衡方法,其特征在于,包括: 目標CPU接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是所述源CPU判斷獲知所述第一進程對應的遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存時向所述目標CPU聯(lián)合遷移的,其中,所述第一進程是所述源CPU執(zhí)行的運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存; 所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程。
7.根據(jù)權利要求6所述的方法,其特征在于,所述目標CPU接收第一進程與第一內(nèi)存包括: 若所述目標CPU的負載小于所述源CPU的負載,所述目標CPU接收所述第一進程與所述第一內(nèi)存; 若所述目標CPU的負載大于所述源CPU的負載,所述目標CPU執(zhí)行進程遷出后接收所述第一進程與所述第一內(nèi)存; 其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
8.根據(jù)權利要求7所述的方法,其特征在于,所述目標CPU執(zhí)行進程遷出包括: 所述目標CPU選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的 CPU。
9.根據(jù)權利要求6-8任一項所述的方法,其特征在于,還包括: 所述目標CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù),則所述目標CPU從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
10.一種負載均衡方法,其特征在于,包括: 源CPU判斷執(zhí)行第一進程是否需要訪問1源,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述1源在目標CPU中; 若所述源CPU需要訪問所述1源,則所述源CPU將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。
11.一種負載均衡方法,其特征在于,包括: 目標CPU接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是源CPU判斷獲知執(zhí)行所述第一進程需要訪問1源時向所述目標CPU聯(lián)合遷移的,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述1源在所述目標CPU中; 所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程。
12.—種源CPU,其特征在于,包括: 判斷模塊,用于判斷第一進程對應的遠程內(nèi)存依賴性是否大于本地內(nèi)存依賴性;其中,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存; 遷移模塊,用于若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且所述判斷模塊判斷獲知所述第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存,則將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程,所述預設閾值是所述源CPU依據(jù)所述遠程內(nèi)存依賴性設定的值。
13.根據(jù)權利要求12所述的源CPU,其特征在于,所述遷移模塊還用于若所述遠程內(nèi)存依賴性大于所述本地內(nèi)存依賴性,且所述判斷模塊判斷獲知所述第二內(nèi)存是小于所述預設閾值的獨占內(nèi)存,則將所述第二內(nèi)存遷移到源CPU本地。
14.根據(jù)權利要求12所述的源CPU,其特征在于,所述遷移模塊具體用于若所述判斷模塊判斷獲知所述目標CPU的負載小于所述源CPU的負載時,將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU; 所述源CPU還包括觸發(fā)模塊,用于若所述判斷模塊判斷獲知所述目標CPU的負載大于所述源CPU的負載時,觸發(fā)所述目標CPU執(zhí)行進程遷出,所述遷移模塊再將所述第一進程與所述第一內(nèi)存聯(lián)合遷移到所述目標CPU ; 其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
15.根據(jù)權利要求14所述的源CPU,其特征在于,所述觸發(fā)模塊具體用于觸發(fā)所述目標CPU選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
16.根據(jù)權利要求12-15任一項所述的源CPU,其特征在于,所述遷移模塊還用于所述源CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù)時,從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最聞的CPU。
17.一種目標CPU,其特征在于,包括: 接收模塊,用于接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是所述源CPU判斷獲知所述第一進程對應的遠程內(nèi)存依賴性大于本地內(nèi)存依賴性,且第二內(nèi)存是非獨占內(nèi)存或者大于預設閾值的獨占內(nèi)存時向所述目標CPU聯(lián)合遷移的,其中,所述第一進程是所述源CPU執(zhí)行的運行狀態(tài)的進程,所述本地內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第一內(nèi)存的頻率,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述遠程內(nèi)存依賴性用于標識所述源CPU執(zhí)行所述第一進程時訪問第二內(nèi)存的頻率,所述第二內(nèi)存是所述目標CPU中與所述第一進程對應的內(nèi)存; 執(zhí)行模塊,用于依據(jù)所述第一內(nèi)存和所述第二內(nèi)存執(zhí)行所述第一進程。
18.根據(jù)權利要求17所述的目標CPU,其特征在于,所述接收模塊具體用于若所述目標CPU的負載小于所述源CPU的負載時,接收所述第一進程與所述第一內(nèi)存;若所述目標CPU的負載大于所述源CPU的負載時,所述執(zhí)行模塊還用于執(zhí)行進程遷出,所述執(zhí)行模塊執(zhí)行進程遷出后所述接收模塊接收所述第一進程與所述第一內(nèi)存; 其中,所述目標CPU的負載用于標識所述目標CPU中運行狀態(tài)的進程數(shù)量或者所述目標CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和,所述源CPU的負載用于標識所述源CPU中運行狀態(tài)的進程數(shù)量或者所述源CPU中多個進程分別對應的遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和。
19.根據(jù)權利要求18所述的目標CPU,其特征在于,所述執(zhí)行模塊具體用于選出所述目標CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的第二進程,并將所述第二進程和所述目標CPU中與所述第二進程對應的內(nèi)存聯(lián)合遷移到最空閑的CPU。
20.根據(jù)權利要求17-19任一項所述的目標CPU,其特征在于,還包括遷移模塊,用于所述目標CPU中運行狀態(tài)的進程數(shù)量減少,且NUMA系統(tǒng)中運行狀態(tài)的進程總數(shù)大于CPU總數(shù)時,從負載最高的CPU中將第三進程和第三內(nèi)存聯(lián)合遷移到本地,所述第三進程是所述負載最高的CPU中遠程內(nèi)存依賴性和本地內(nèi)存依賴性之和最小的進程,所述第三內(nèi)存是所述負載最高的CPU中與所述第三進程對應的內(nèi)存,所述NUMA系統(tǒng)包括所述源CPU、所述目標CPU、所述最空閑的CPU和所述負載最高的CPU。
21.一種源CPU,其特征在于,包括: 判斷模塊,用于判斷執(zhí)行第一進程是否需要訪問1源,所述第一進程是所述源CPU中運行狀態(tài)的進程,所 述1源在目標CPU中; 遷移模塊,用于若所述源CPU需要訪問所述1源時,將所述第一進程與第一內(nèi)存聯(lián)合遷移到所述目標CPU,以使所述目標CPU依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存。
22.—種目標CPU,其特征在于,包括: 接收模塊,用于接收第一進程與第一內(nèi)存,所述第一進程與所述第一內(nèi)存是源CPU判斷獲知執(zhí)行所述第一進程需要訪問1源時向所述目標CPU聯(lián)合遷移的,所述第一進程是所述源CPU中運行狀態(tài)的進程,所述第一內(nèi)存是所述源CPU中與所述第一進程對應的內(nèi)存,所述1源在所述目標CPU中; 執(zhí)行模塊,用于依據(jù)所述第一內(nèi)存和所述1源執(zhí)行所述第一進程。
23.—種負載均衡系統(tǒng),其特征在于,包括多個如權利要求12-16任一項所述的源CPU,以及多個如權利要求17-20任一項所述的目標CPU。
24.一種負載均衡系統(tǒng),其特征在于,包括多個如權利要求21所述的源CPU,以及多個如權利要求22所述的目標CPU。
【文檔編號】G06F9/50GK104035823SQ201410271251
【公開日】2014年9月10日 申請日期:2014年6月17日 優(yōu)先權日:2014年6月17日
【發(fā)明者】鮑延勝, 張文濤, 趙家偉 申請人:華為技術有限公司