專利名稱::在網(wǎng)絡(luò)中的多個節(jié)點中分配多個任務(wù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明總體上涉及處理器負(fù)栽平衡領(lǐng)域,具體而言,涉及處理器親緣關(guān)系(affinity)負(fù)栽平衡領(lǐng)域。技術(shù)背景在多處理器體系結(jié)構(gòu)中,希望盡可能地在同一處理器上執(zhí)行任務(wù)以便發(fā)揮高速緩存的效用。在非統(tǒng)一存儲器訪問(Non-UniformMemoryAccess,NUMA)體系結(jié)構(gòu)中這是尤其重要的,在該體系結(jié)構(gòu)中高速緩存間的訪問等待時間明顯高于高速緩存內(nèi)部的訪問等待時間。在這種NUMA體系結(jié)構(gòu)中,如果頻繁地把任務(wù)分派給沒有共享硬件高速緩存的多個處理器,那么會出現(xiàn)相當(dāng)大的性能退化。為了盡可能地使任務(wù)在同一處理器(或者一組處理器)上執(zhí)行,定義了被稱為親緣關(guān)系節(jié)點的邏輯概念。親緣關(guān)系節(jié)點是共享硬件高速緩存的一組處理器。利用一個值(稱為其親緣關(guān)系)來標(biāo)記任務(wù),所述值用于將該任務(wù)與親緣關(guān)系節(jié)點相關(guān)聯(lián)。任務(wù)調(diào)度器(TaskDispatcher)通過始終把任務(wù)分派給屬于由任務(wù)的親緣關(guān)系值指定的親緣關(guān)系節(jié)點的處理器來試圖兌現(xiàn)(honor)任務(wù)的親緣關(guān)系。因為總是把任務(wù)分派給它們各自的親緣關(guān)系節(jié)點,所以隨著時間的經(jīng)過,任務(wù)的改變特性和處理需求將在親緣關(guān)系節(jié)點之間產(chǎn)生處理器負(fù)栽不平衡。因此,需要處理器負(fù)栽平衡機制來重新分配任務(wù)的親緣關(guān)系,以便平衡跨越所有親緣關(guān)系節(jié)點的總體系統(tǒng)處理器消耗。另外,親緣關(guān)系節(jié)點可能包含不同數(shù)量的處理器,因此,每個親緣關(guān)系節(jié)點可能具有不同的能力。術(shù)語"平衡",不是經(jīng)常使用的使所有親緣關(guān)系節(jié)點上的處理器消耗相等的含義,而一般是指使所有親緣關(guān)系節(jié)點上的處理器消耗滿足特定標(biāo)準(zhǔn)。平衡系統(tǒng)的常用標(biāo)準(zhǔn)是這樣一種標(biāo)準(zhǔn),其中總體系統(tǒng)處理器消耗跨越所有親緣關(guān)系節(jié)點、與其能力成比例地分布。例如UNIX(以及UNIX變型)的成品操作系統(tǒng)中的現(xiàn)有處理器負(fù)栽平衡方案具有一個共同的特性它們都使用平均任務(wù)運行隊列長度(averagetaskrunqueuelength)作為對處理器負(fù)栽的估計。這是因為任務(wù)運行隊列長度(亦稱運行隊列長度)容易測量,并且現(xiàn)今大部分的成品操作系統(tǒng)不具有嵌入式機制來以每一任務(wù)為基礎(chǔ)進(jìn)行精確的處理器消耗測量。雖然足以滿足大多數(shù)情況的需要,但是平均任務(wù)運行隊列長度并不總是準(zhǔn)確地反映實際處理器負(fù)載。參考圖1,該圖示出了具有兩個節(jié)點的處理器網(wǎng)絡(luò)100的簡單示例,將用此示例來說明此概念。所述系統(tǒng)利用兩個節(jié)點140和160以及邏輯任務(wù)管理器120和130來操作,其中每個節(jié)點包含一個CPU。任務(wù)管理器120把任務(wù)180分派給節(jié)點A140,并且任務(wù)管理器130把任務(wù)分派給節(jié)點B160。因為任務(wù)管理器120和130獨立地操作,所以隨著時間的經(jīng)過,網(wǎng)絡(luò)IOO內(nèi)的處理器負(fù)載可能會因任務(wù)數(shù)目和到達(dá)節(jié)點140和160上的任務(wù)的CPU需求特性有很大不同而變得失衡。因此,需要平衡器150在任務(wù)管理器120和130之間移動任務(wù),以便平衡節(jié)點140和160上的處理器負(fù)載。在已知的處理器網(wǎng)絡(luò)中,平衡器150通過使用節(jié)點的平均運行隊列長度來判斷該節(jié)點上的處理器負(fù)載;隊列長度越長,節(jié)點的負(fù)載越大。然而,正如我們下面舉例說明的那樣,此方法具有缺陷。假定n+l個任務(wù)180進(jìn)入親緣關(guān)系節(jié)點A140;所述節(jié)點在較短的一段時間t內(nèi)使用其全部的處理能力;然后所有任務(wù)180結(jié)束。然后,在另外的n+l個任務(wù)180進(jìn)入節(jié)點A以前,親緣關(guān)系節(jié)點A140中的處理器在較短的一段時間t內(nèi)空閑,并且重復(fù)此循環(huán),直到親緣關(guān)系節(jié)點A的隊列中不再有任務(wù)為止。對于節(jié)點A140來說,處理器負(fù)載的平均值大約為50%(即,一半時間處理器繁忙而一半時間4理器空閑),并且運行隊列長度大約為n/2(—半時間存在n個任務(wù)等待而一半時間沒有任務(wù)在等待)?,F(xiàn)在考慮另一親緣關(guān)系節(jié)點,即節(jié)點B160,其中單個長期運行的處理器綁定任務(wù)使用節(jié)點B的全部處理能力并且沒有別的任務(wù)在等待。對于此節(jié)點來說,處理器負(fù)載的平均值是100%(處理器總是繁忙),然而運行隊列長度是零(沒有任務(wù)在等待)。使用平均運行隊列長度方法,所述平衡器150將把任務(wù)從半負(fù)載的節(jié)點A140移動到全負(fù)栽節(jié)點B160,這往往使工作負(fù)載進(jìn)一步失衡。采用平均任務(wù)運行隊列長度方法的另一個問題在于,當(dāng)移動任務(wù)以便平衡處理器負(fù)載時,沒有對被移動任務(wù)的實際處理器消耗給予任何考慮,這會導(dǎo)致系統(tǒng)進(jìn)一步失衡。另一示例將說明這種情況。再次參照圖1,假設(shè)除周期性地進(jìn)入親緣關(guān)系節(jié)點A的n+l個任務(wù)180以外,該親緣關(guān)系節(jié)點A140現(xiàn)在還具有占據(jù)CPU的長期運行的CPU綁定任務(wù)。對于此節(jié)點來說,處理負(fù)載平均為100%并且運行隊列長度大約為(n+l)/2?,F(xiàn)在考慮具有相同的單個長期運行的CPU綁定任務(wù)的親緣關(guān)系節(jié)點B160。對于節(jié)點B160來說,處理負(fù)栽平均為100%并且運行隊列長度是0。此系統(tǒng)明顯失衡并且需要把任務(wù)從節(jié)點A140移動到節(jié)點B160。平衡器150通常通過首先移動任務(wù)運行隊列結(jié)束處的任務(wù)180來選擇待移動的一個或多個任務(wù),這是因為處于隊列結(jié)束處的任務(wù)具有最長的等待時間。使用此方法而不考慮待移動的任務(wù)180的處理器消耗可能會使系統(tǒng)進(jìn)一步失衡,這是因為在節(jié)點A140上的長期運行的CPU綁定任務(wù)可能正巧是隊列上的最后一個任務(wù)并且可能會被移動到節(jié)點B160。結(jié)果,節(jié)點A140將再次空閑一半時間(正如節(jié)點A140不具有長期運行的CPU綁定任務(wù)的先前示例所示那樣),同時節(jié)點B160將因兩個長期運行的CPU綁定任務(wù)而負(fù)擔(dān)過重,而每個長期運行的CPU綁定任務(wù)只獲得50。/。的處理器能力。圖2示出了具有多個處理器的處理器體系結(jié)構(gòu)200中負(fù)栽平衡的另一代表。該圖示出了典型的NUMA處理器體系結(jié)構(gòu),其具有圖1的兩個親緣關(guān)系節(jié)點,再加上兩個另外的親緣關(guān)系節(jié)點,每個節(jié)點現(xiàn)在具有四個CPU而不是一個。在實際中,親緣關(guān)系節(jié)點的數(shù)目和每個節(jié)點中CPU的數(shù)目可以不同。每個節(jié)點中的四個CPU共享L2高速緩存(2級高速緩存,或者位于微處理器外部的高速緩沖存儲器)。L2高速緩沖存儲器駐留在獨立于微處理器芯片的芯片上,這與駐留在微處理器芯片上的1級高速緩存相反。為了使多個CPU共享高速緩沖存儲器,L2高速緩存是必需的。在此處理器體系結(jié)構(gòu)200中,圖1的任務(wù)管理器120和130現(xiàn)在實際是四個調(diào)度器,每個調(diào)度器負(fù)責(zé)一個節(jié)點。每個調(diào)度器為其特定節(jié)點接收任務(wù)的作業(yè)隊列。調(diào)度器225把任務(wù)從作業(yè)隊列A220分派給節(jié)點A140;調(diào)度器235把任務(wù)從作業(yè)隊列B230分派給節(jié)點B160;調(diào)度器245把任務(wù)從作業(yè)隊列C240分派給節(jié)點C250;并且調(diào)度器255把任務(wù)從作業(yè)隊列D250分派給節(jié)點D260。為了負(fù)栽平衡的目的,每個節(jié)點經(jīng)由網(wǎng)絡(luò)200連接至網(wǎng)絡(luò)中的每一其它節(jié)點。如圖2所示的體系結(jié)構(gòu)200是相當(dāng)簡單的多處理器體系結(jié)構(gòu),然而它可擴展到相當(dāng)大的程度。實際上,隨著現(xiàn)今不斷增加的處理需求,成千的甚至數(shù)以萬計的處理器的網(wǎng)絡(luò)被使用,由此使得CPU負(fù)載平衡勢在必行,然而現(xiàn)在的負(fù)栽平衡算法達(dá)不到最佳平衡,這是因為平均運行隊列長度不總是準(zhǔn)確地反映實際處理器負(fù)栽。因此,需要一種處理器負(fù)載平衡方法來克服現(xiàn)有技術(shù)的缺陷。
發(fā)明內(nèi)容簡單地講,依照本發(fā)明,一種經(jīng)由網(wǎng)絡(luò)中的多個處理節(jié)點分配多個任務(wù)的用計算機實現(xiàn)的方法包括如下步驟計算多個任務(wù)的任務(wù)處理消耗值;計算多個節(jié)點的測量的節(jié)點處理器消耗值;計算多個節(jié)點的目標(biāo)節(jié)點處理器消耗值,所述目標(biāo)節(jié)點處理器消耗值表明最佳節(jié)點處理器消耗;根據(jù)節(jié)點i的測量的節(jié)點處理器消耗值與節(jié)點i的目標(biāo)節(jié)點處理器消耗值之間的差值來計算負(fù)栽指數(shù)(index)值;在節(jié)點當(dāng)中分配任務(wù)以便在節(jié)點當(dāng)中平衡處理器工作負(fù)栽,使得每個節(jié)點的計算的負(fù)載指數(shù)值基本上為零。所述方法還具體實現(xiàn)了一種多維平衡矩陣,矩陣的每一維表示對應(yīng)于不同處理器類型的節(jié)點,并且每個單元表示分配給多個節(jié)點的任務(wù),所述方法實現(xiàn)了如下步驟按照從最高負(fù)栽指數(shù)值到最低負(fù)載指數(shù)值的順序來排序計算的負(fù)栽指數(shù)值;依照已排序的負(fù)載指數(shù)值來利用任務(wù)填充所述矩陣;在單元中重新布置任務(wù)以便表示節(jié)點當(dāng)中處理器工作負(fù)載的平衡;以及依照所述矩陣表示來把任務(wù)分配至處理器。所述方法還具體實現(xiàn)了一種多維平衡矩陣的擴展,其中每一維可以表示不同處理器類型的多個節(jié)點,所述方法包括如下步驟根據(jù)預(yù)定的使用規(guī)則,重新布置單元中的任務(wù),使得處理器工作負(fù)栽可以從一種類型的節(jié)點自由地移動到另一類型的節(jié)點,但反向則不行。圖l是依照現(xiàn)有技術(shù)的負(fù)栽平衡系統(tǒng)的舉例說明。圖2是依照現(xiàn)有技術(shù)的另一負(fù)載平衡系統(tǒng)的舉例說明。圖3是舉例說明依照本發(fā)明實施例的用于貪心(greedy)親緣關(guān)系負(fù)載平衡的方法的流程圖。圖4a、4b、4c是依照本發(fā)明實施例的在負(fù)載平衡系統(tǒng)中進(jìn)行任務(wù)分配的說明。具體實施方式依照本發(fā)明的實施例的一種方法跨越位于處理器網(wǎng)絡(luò)內(nèi)的一組處理器組(稱為親緣關(guān)系節(jié)點)來執(zhí)行總體系統(tǒng)處理器消耗的負(fù)栽平衡。所述方法采用了這樣一種算法,所述算法使用精確測量的親緣關(guān)系節(jié)點CPU消耗和每一任務(wù)的CPU消耗數(shù)據(jù)。這種算法比使用平均任務(wù)運行隊列長度(亦稱為平均運行隊列長度)的已知負(fù)栽平衡算法有所改進(jìn),這是因為它使用實際的每一任務(wù)以及每一節(jié)點CPU消耗數(shù)據(jù)來避免與平均運行隊列長度相關(guān)聯(lián)的缺陷。貪心負(fù)載平衡算法。為了實現(xiàn)負(fù)栽平衡目標(biāo),依照本發(fā)明實施例的算法使用了"貪心,,方案,這種方案用于重復(fù)地把任務(wù)從負(fù)載最重的(最忙的)親緣關(guān)系節(jié)點移動至負(fù)栽最輕的(最空閑的)親緣關(guān)系節(jié)點,直到?jīng)]有任務(wù)可以被移動為止,由此使系統(tǒng)更接近目標(biāo)。貪心算法存在于科學(xué)以及數(shù)學(xué)領(lǐng)域,并且當(dāng)需要逐步問題解決方案時經(jīng)常被使用。貪心算法的命名十分恰當(dāng),這是因為它基于此刻看起來的最佳移動來對是否移動任務(wù)做出判定,當(dāng)同時考慮到所有可能的移動時,其最終也許是、也許不是最佳方案。盡管存在這種缺陷,貪心算法還是經(jīng)常被使用,這是因為同時列舉所有可能的移動并且試圖找到絕對的最佳移動集合來實現(xiàn)平衡目標(biāo)在計算上是不可行的。應(yīng)用于處理器負(fù)栽平衡的貪心算法(貪心親緣關(guān)系負(fù)載平衡算法)采用如下輸入l)親緣關(guān)系節(jié)點、它們的能力以及它們的測量的節(jié)點處理器消耗的列表;以及2)任務(wù)、它們的親緣關(guān)系以及它們的測量的每一任務(wù)處理器消耗的列表。這種算法不同于參照圖l討論的算法之處在于,它考慮了每個節(jié)點以及每個任務(wù)的實際CPU消耗而不是平均運行隊列長度。貪心親緣關(guān)系算法的輸出是任務(wù)親緣關(guān)系值的重新分配,使得總體系統(tǒng)處理器消耗跨越所有親緣關(guān)系節(jié)點與其能力成比例地被分配。所述貪心親緣關(guān)系負(fù)載平衡算法具有如下特征a)效率用于平衡所需的計算非常簡單并且每一任務(wù)最多被移動一次;b)避免顛簸在連續(xù)的平衡運行中,在把任務(wù)不斷地從一個親緣關(guān)系節(jié)點移動到另一個的情況下,避免了CPU顛簸;c)異構(gòu)親緣關(guān)系節(jié)點可以具有不同的類型(即,具有不同類型的CPU),并且每一任務(wù)具有一種以上類型的親緣關(guān)系節(jié)點的CPU消耗;d)不對稱平衡不同類型的親緣關(guān)系節(jié)點之間的平衡可以是不對稱的,即,可以把負(fù)載自由地從一種類型的親緣關(guān)系節(jié)點移動到另一種類型的親緣關(guān)系節(jié)點,但是反向不行;以及e)反饋提供向CPU消耗監(jiān)視機制的反饋以便協(xié)調(diào)負(fù)載平衡和消耗測量精力。《為了量化系統(tǒng)接近其負(fù)栽平衡目標(biāo)的程度,可以進(jìn)行某些簡單的計算,并且將這些計算的結(jié)果報告給負(fù)載平衡器150或在分布式處理器網(wǎng)絡(luò)中的處理器當(dāng)中協(xié)調(diào)負(fù)載平衡的任何機制。第一個計算將為每個親緣關(guān)系節(jié)點i計算負(fù)栽指數(shù)(li)。li是節(jié)點i的測量的親緣關(guān)系節(jié)點CPU消耗(q)與節(jié)點i的目標(biāo)親緣關(guān)系節(jié)點CPU消耗(ti)之間的差值。此計算可以表示為其中ti是在總體系統(tǒng)CPU消耗跨越所有親緣關(guān)系節(jié)點與其能力成比例地被分配的情況下親緣關(guān)系節(jié)點的消耗。對于給定節(jié)點i的ti被如下計算1)對所有節(jié)點的測量的親緣關(guān)系節(jié)點CPU消耗q求和,并且對所有節(jié)點的親緣關(guān)系節(jié)點能力Pi求和;2)用pi的和除Ci的和;3)把該商乘以給定節(jié)點i的親緣關(guān)系節(jié)點能力pi。其算術(shù)表達(dá)式為其中Pi是親緣關(guān)系節(jié)點能力。應(yīng)注意的是,如果所有親緣關(guān)系節(jié)點具有相同的能力,那么目標(biāo)親緣關(guān)系節(jié)點CPU消耗將僅僅是對所有親緣關(guān)系節(jié)點求整個系統(tǒng)CPU消耗的均值。所述li用來度量親緣關(guān)系節(jié)點的"負(fù)載"如何。li越高,親緣關(guān)系節(jié)點的負(fù)載越大。應(yīng)注意的是,li可以是負(fù)的,這意味著親緣關(guān)系節(jié)點利用不足。貪心親緣關(guān)系負(fù)載平衡算法的目標(biāo)因此是使所有親緣關(guān)系節(jié)點的li盡可能接近零。零代表完全平衡。為了度量親緣關(guān)系節(jié)點CPU消耗的"跨度(spread)",即,整個系統(tǒng)與其目標(biāo)狀態(tài)的距離(所述目標(biāo)狀態(tài)是所有親緣關(guān)系節(jié)點的li是零),我們?nèi)缦聛碛嬎阖?fù)栽指數(shù)偏差d:<formula>formulaseeoriginaldocumentpage12</formula>其中n是親緣關(guān)系節(jié)點的數(shù)目。應(yīng)注意的是,當(dāng)所有親緣關(guān)系節(jié)點具有相同的能力時,d是常見的標(biāo)準(zhǔn)偏差。貪心親緣關(guān)系平衡算法的進(jìn)一步目的在于降低d,從而使其盡可能接近零。當(dāng)把任務(wù)從一個親緣關(guān)系節(jié)點移動到另一個時,為了看出d如何改變,我們?nèi)缦聛碛嬎闫渲衯-cP是負(fù)栽指數(shù)方差,而下標(biāo)1和2分別表示任務(wù)被移動前后的值。由于^>0并且(12>0,如果V2-v!〈0,那么d2-di〈0。也就是說,如果移動任務(wù)減小了負(fù)載指數(shù)方差,那么它也減小負(fù)栽指數(shù)偏差。此外,當(dāng)具有CPU消耗w的任務(wù)從親緣關(guān)系節(jié)點i被移動到j(luò)時v產(chǎn)(...+lj2+…+lj2+…)/wV2=(."+(li-W)2++(lj+W)2+…)/W釆用簡單的數(shù)學(xué),我們可以推導(dǎo)出V2—Vi=2*W*(W+/w由于wX)并且nX),如果w+l廠li〈0,那么V2-v!〈0,這又意味著d2-山〈0。因此,為了確定把任務(wù)從親緣關(guān)系節(jié)點i移動到j(luò)是否使系統(tǒng)更接近其平衡目標(biāo),我們僅僅需要檢查不等式w+lj-li<0。當(dāng)不等式成立時,所述移動將使系統(tǒng)更接近其平衡目標(biāo);否則將不會。參考圖3的流程圖,貪心親緣關(guān)系平衡算法的邏輯如下進(jìn)行。在步驟310,平衡器150準(zhǔn)備系統(tǒng)中所有親緣關(guān)系節(jié)點的列表N。在步驟320,必須進(jìn)行判定以便確定是否存在一個以上的親緣關(guān)系節(jié)點。如果只存在一個親緣關(guān)系節(jié)點,那么不需要在節(jié)點當(dāng)中進(jìn)行負(fù)載平衡。然而,如果系統(tǒng)包含一個以上的親緣關(guān)系節(jié)點,那么處理移到步驟330以便找到每個節(jié)點i的li。一旦每個節(jié)點的li被計算,則必須識別具有最高負(fù)載指數(shù)值ls的節(jié)點S。另外,具有最低負(fù)載指數(shù)值lT的節(jié)點T也必須被識別。在此之后,準(zhǔn)備親緣關(guān)系節(jié)點S的所有任務(wù)的列表M。移到步驟340,查詢列表M。如果M等于零(即,沒有具有親緣關(guān)系節(jié)點S的任務(wù)),那么在步驟390把節(jié)點S從所有節(jié)點的列表N處移走,并且處理返回到步驟320。否則,從親緣關(guān)系節(jié)點S的所有任務(wù)的列表M中找到最大CPU消耗任務(wù)W(其CPU消耗是w),然后將其從M中去除(從而使它只被移動一次)。在下一步驟360,計算w+1t-1s的植。如果此值小于零,那么任務(wù)從S移動到T將改進(jìn)系統(tǒng)的平衡。因此,處理在步驟370繼續(xù)以便把W的親緣關(guān)系(從S)重新分配給T。否則,將任務(wù)從S移動到T將不會改進(jìn)并且甚至惡化系統(tǒng)的平衡。因此,我們忽略此任務(wù)并且回到步驟340,以便從列表M中選擇下一個最大CPU消耗任務(wù)。接下來在步驟380,再次查詢M以便確定它是否已經(jīng)減小為零(不再有親緣關(guān)系節(jié)點S的任務(wù))。倘若如此,在步驟390,從親緣關(guān)系節(jié)點的列表N中去除S,并且進(jìn)行到步驟320,以便確定是否還剩下任何節(jié)點待處理。否則,如果M大于零(即,剩下親緣關(guān)系S的至少一個任務(wù)),那么返回到步驟320,而不從列表N中去除S。所述過程將依照此方式繼續(xù),直到親緣關(guān)系節(jié)點的列表減小為一為止。用于處理圖3的偽碼如下LetN=thelistofaffinitynodes;While(Nhasmorethanoneaffinitynode)FindtheaffinitynodeSwiththehighestloadindexvalue/s;FindtheaffinitynodeTwiththelowestloadindexvalue/T;LetM=thelistoftaskswithaffinityS;While(Misnotempty)FindthelargestCPUconsumingtaskWinM;RemoveWfromM;if(w+/T_Zs<0)ReassignW'saffinitytobeT;break;if(Misempty)RemoveSfromN;實質(zhì)上,圖3流程圖中描述的算法只有當(dāng)移動造成負(fù)載指數(shù)偏差減小時,才重復(fù)地把最大CPU消耗任務(wù)w從負(fù)載最重的親緣關(guān)系節(jié)點S移動到負(fù)栽最輕的親緣關(guān)系節(jié)點T。用于確定移動是否將造成負(fù)栽指數(shù)偏差減小的條件,即w+lT-Ls<0,是非常簡單的并且可以很快地計算。另外,每一任務(wù)只被移動一次,以便減少平衡器150本身引起的計算開銷。應(yīng)注意的是,每次移動任務(wù)時,負(fù)栽最重的親緣關(guān)系節(jié)點S和負(fù)載最輕的親緣關(guān)系節(jié)點T可能改變;因此所述算法必須不斷地更新其參數(shù)。當(dāng)已經(jīng)考慮了親緣關(guān)系節(jié)點上的所有任務(wù)時,把親緣關(guān)系節(jié)點從參與負(fù)載平衡的親緣關(guān)系節(jié)點的列表N處移走。當(dāng)列表N中只剩下一個親緣關(guān)系節(jié)點時,所述算法結(jié)束。應(yīng)該理解的是,如圖1所示,平衡器150僅僅是用于執(zhí)行上述步驟的邏輯的一種表示。本領(lǐng)域技術(shù)人員將理解的是,在本發(fā)明的精神和范圍內(nèi),其它表示也是可以的。負(fù)載平衡算法的一個重要特征在于避免CPU顛簸。當(dāng)在連續(xù)的平衡運行中把任務(wù)重復(fù)地從一個親緣關(guān)系節(jié)點移動到另一個時,會出現(xiàn)CPU顛簸。采用基于運行隊列長度的平衡算法,當(dāng)所述算法試圖嚴(yán)格地平衡運行隊列長度(即,使所有單獨的運行隊列長度相等)時,會發(fā)生CPU顛簸。避免CPU顛簸的一種方式是允許單獨的運行隊列長度與平均系統(tǒng)運行隊列長度存在錯誤容許偏差。在貪心親緣關(guān)系負(fù)載平衡算法中,如圖4a、4b和4c的示例所示那樣,也會出現(xiàn)CPU顛簸。假定存在2個親緣關(guān)系節(jié)點S440和T460(為簡單起見,每個節(jié)點具有相等的能力),并且存在3個任務(wù)i410、j420和k430,分別消耗幾乎相同的CPU處理量,例如10%。在分配其中2個任務(wù)之后,例如把i分配給S并且把j分配給T,那么可以把第三個任務(wù)k分配給S或者T。假定把k分配給S,如圖4a中所示那樣?,F(xiàn)在假定下次運行平衡算法時,j的CPU消耗稍微改變,從10%改變?yōu)?%,并且k的CPU消耗也稍微改變,從10%改變?yōu)?1%?,F(xiàn)在,在節(jié)點S上任務(wù)k=11。/。并且i=10%,而在節(jié)點T上任務(wù)』=9%,如圖4b所示。節(jié)點S和T的平均CPU消耗是((11%+10%)+9%)/2=15%。節(jié)點S的負(fù)載指數(shù)是(11%+10%)-15%=6%,而節(jié)點T的負(fù)載指數(shù)是9%-15%=畫6%。如果平衡器150把任務(wù)k從節(jié)點S移動到節(jié)點T,那么11%-6%-6%=-1%<0。因此,移動減少了負(fù)載指數(shù)偏差,并且被允許(由圖4b中的虛線箭頭表示)。因此,目前在節(jié)點S上任務(wù)i=10%,而在節(jié)點T上任務(wù)1^=11%并且〗=9%。假定下次運行平衡算法時,i的CPU消耗稍微改變,從10%改變?yōu)?%,并且j的CPU消耗也稍微改變,從9%改變?yōu)?0%。顯而易見的是,現(xiàn)在的情況與上次運行平衡算法(如圖4b所示那樣)時的正相反?,F(xiàn)在把任務(wù)k從節(jié)點T移回S(由圖4c中的虛線箭頭表示)。這種"乒乓"效應(yīng)(CPU顛簸)會發(fā)生在每一已知的負(fù)載平衡場景中,并且它會不確定地繼續(xù)發(fā)生。很清楚,在貪心親緣關(guān)系負(fù)載平衡算法中,CPU顛簸的原因是因為允許任務(wù)被移動的條件、即w+1T-1S<0,對于任務(wù)的CPU消耗方面的小波動極為敏感,即,每當(dāng)負(fù)載指數(shù)偏差方面存在任何減小量,就會出現(xiàn)任務(wù)重新分配,無論減小量有多么小。為了避免CPU顛簸,需要修改允許任務(wù)被移動的條件。貪心親緣關(guān)系負(fù)載平衡算法通過在計算中添加閾值來修改允許任務(wù)被移動的條件。新的閾值條件是換言之,只有當(dāng)移動使負(fù)載指數(shù)偏差減少了超過某一數(shù)量T(閾值量)時,我們才允許任務(wù)被移動。T可以是平衡算法的參數(shù)并且可以根據(jù)工作負(fù)載特性進(jìn)行調(diào)整。采用修改后的條件,只有當(dāng)任務(wù)CPU消耗中的波動足夠大以便在親緣關(guān)系節(jié)點當(dāng)中引起較大量的負(fù)栽不平衡時,貪心親緣關(guān)系負(fù)載平衡算法才移動任務(wù),從而使移動減少較大量的負(fù)載指數(shù)偏差。除標(biāo)準(zhǔn)的通用CPU以外,系統(tǒng)可以具有專用CPU,其是專用于某些類型的處理的CPU。例如,IBM的z系列應(yīng)用輔助處理器(zAAP)只運行Java應(yīng)用程序。像zAAP那樣的專用CPU的益處在于其計算成本比通用CPU低得多。例如,具有諸如IBM的WebSphere的較大Java工作負(fù)載的客戶通過在zAAP上運行其Java應(yīng)用程序可以節(jié)省相當(dāng)數(shù)額的成本。專用CPU給負(fù)栽平衡算法提出了新的挑戰(zhàn),這是因為目前存在不同類型的親緣關(guān)系節(jié)點,即,包含不同類型CPU的親緣關(guān)系節(jié)點,并且要么每一類型的親緣關(guān)系節(jié)點必須獨立地加以平衡,要么多種類型的親緣關(guān)系節(jié)點必須共同地加以平衡。任務(wù)現(xiàn)在可能具有多個親緣關(guān)系,即,它們可能在不同類型的親緣關(guān)系節(jié)點上執(zhí)行,并且消耗不同類型的CPU資源。移動一個任務(wù)可能改變多個親緣關(guān)系節(jié)點上的負(fù)載。在一個實施例中,所述貪心親緣關(guān)系負(fù)栽平衡算法被增強來支持不同類型的親緣關(guān)系節(jié)點?;舅枷朐谟谑褂闷胶饩仃噥肀硎静煌愋偷挠H緣關(guān)系節(jié)點和具有多個親緣關(guān)系的任務(wù)。所述平衡矩陣可以具有任意維數(shù),每一維表示一種類型的親緣關(guān)系節(jié)點。平衡矩陣中的每一單元表示具有所述單元的相應(yīng)維的親緣關(guān)系的任務(wù)。為簡單起見并且不失一般性,我們使用二維平衡矩陣(即,2種不同類型的親緣關(guān)系節(jié)點)為例來說明所述思想。表l——二維平衡矩陣。ZlZ2Z3Z4Sl911S285S371410表1的平衡矩陣示出了兩個不同類型的親緣關(guān)系節(jié)點,標(biāo)準(zhǔn)CPU類型(S)節(jié)點和zAAPCPU類型(Z)節(jié)點。存在3個標(biāo)準(zhǔn)親緣關(guān)系節(jié)點Sl、S2和S3以及4個zAAP親緣關(guān)系節(jié)點Zl、Z2、Z3和Z4。每一單元中的數(shù)字,例如單元[S1,Z2中的9指的是存在9個在親緣關(guān)系節(jié)點Sl和Z2這二者上都消耗CPU資源因此具有親緣關(guān)系[S1,Z2的任務(wù)。沒有數(shù)字的單元意味著沒有在表示該單元的兩個親緣關(guān)系節(jié)點上都消耗CPU資源的任務(wù)。例如,不存在在兩個親緣關(guān)系節(jié)點Sl和Zl上都消耗CPU資源的任務(wù)。為了使貪心親緣關(guān)系平衡算法適應(yīng)于平衡矩陣,應(yīng)該執(zhí)行如下過程把平衡矩陣的行和列從最高負(fù)載指數(shù)值向最低負(fù)載指數(shù)值排序。例如,假定上述平衡矩陣已經(jīng)被排序;因此我們知道Sl是具有最高負(fù)載指數(shù)的標(biāo)準(zhǔn)親緣關(guān)系節(jié)點,而S3是具有最低負(fù)載指數(shù)的節(jié)點。同樣,Zl是具有最高負(fù)載指數(shù)值的zAAP親緣關(guān)系節(jié)點,而Z4是具有最低負(fù)載指數(shù)值的親緣關(guān)系節(jié)點。為了平衡兩個類型的親緣關(guān)系節(jié)點,首先平衡一個類型,然后平衡另一個類型。例如,當(dāng)平衡標(biāo)準(zhǔn)親緣關(guān)系節(jié)點時,我們在負(fù)栽最重的S1上找到最大的標(biāo)準(zhǔn)CPU消耗任務(wù),所述任務(wù)可能是具有親緣關(guān)系S1,Z2的9個任務(wù)之一,或者可能是具有親緣關(guān)系[S1,Z4的11個任務(wù)之一。如果假定是前者,那么也許此任務(wù)可以被移動到S3,即,被重新分配為[S3,Z2。然而,在這樣做之前,由于此任務(wù)還需要zAAP消耗,那么所述算法必須確定任務(wù)是否可以被重新分配為[S3,Z4。這是更好的重新分配,因為這樣做將同時從S1向S3以及從Z2向Z4平衡負(fù)載。在平衡標(biāo)準(zhǔn)節(jié)點之后,執(zhí)行相同的過程來平衡zAAP親緣關(guān)系節(jié)點。例如,假定在負(fù)載最重的Z1上,最大zAAPCPU消耗任務(wù)是具有親緣關(guān)系[S2,Z1I的8個任務(wù)之一。所述算法確定它是否可以從[S2,Z1被移動到[S3,Z4。如果不是,那么把任務(wù)從S2,Z1移動到S3,Z4。參見表2,其示出了已經(jīng)移動了兩個任務(wù)之后、平衡矩陣中的中間步表2——移動了兩個任務(wù)之后的二維平衡矩陣<table>tableseeoriginaldocumentpage18</column></row><table>當(dāng)親緣關(guān)系節(jié)點上沒有剩余任何任務(wù)時,把表示該親緣關(guān)系節(jié)點的平衡矩陣的行或者列從矩陣移去。例如,如果不再剩下具有親緣關(guān)系S1Z的任務(wù),那么移去平衡矩陣中的Sl行并且把平衡矩陣減小至2行乘4列。同樣,如果不再剩下具有親緣關(guān)系[*,Zl的任務(wù),那么移去平衡矩陣中的Z1列,并且把平衡矩陣減小至2行乘3列。當(dāng)平衡矩陣減小至l個單元時,算法結(jié)束。如已經(jīng)示出的那樣,可以進(jìn)行不同類型的親緣關(guān)系節(jié)點之間的平衡,但是會存在平衡不對稱的情況,即,工作負(fù)載可以自由地從一個類型的親緣關(guān)系節(jié)點z移動到另一個節(jié)點s,但從相反方向不行。這是因為標(biāo)準(zhǔn)處理器s可以運行任何類型的代碼,而處理器z是專門的處理器并且只能運行某些類型的代碼,例如Java。因此,專用處理器上的工作負(fù)載可以被移到標(biāo)準(zhǔn)處理器,但是標(biāo)準(zhǔn)處理器上的工作負(fù)載并不總是可以被移到專用處理器。在一個實施例中,所述貪心親緣關(guān)系負(fù)栽平衡算法被進(jìn)一步增強以便支持這種不對稱的平衡。這是通過擴展平衡矩陣使其每一維可以表示一個以上類型的親緣關(guān)系節(jié)點來執(zhí)行的。表3中示出了新的平衡矩陣的示例。表3—具有不對稱平衡支持的二維平衡矩陣<table>tableseeoriginaldocumentpage19</column></row><table>在上面新的平衡矩陣中,我們看到,表示zAAP親緣關(guān)系節(jié)點Zl-Z4的列已經(jīng)被擴展,附加列表示標(biāo)準(zhǔn)親緣關(guān)系節(jié)點Sl-S3。這意味著當(dāng)我們平衡zAAP親緣關(guān)系節(jié)點時,我們對待標(biāo)準(zhǔn)親緣關(guān)系節(jié)點就好像它們是zAAP親緣關(guān)系節(jié)點一樣。因此,我們可以把負(fù)載從zAAP親緣關(guān)系節(jié)點移動到標(biāo)準(zhǔn)親緣關(guān)系節(jié)點。例如,如果我們在具有親緣關(guān)系[S2,Z1的8個任務(wù)之一中發(fā)現(xiàn)最大zAAPCPU消耗任務(wù),那么除早先看到的可能的移動以外,我們目前具有兩個另外的可能的移動從S2,Z1到S2,S2(虛線),其有效地把任務(wù)的zAAPCPU消耗從Z1移動至S2;或者如果這是不可能的(即,S2上沒有足夠的空間),那么我們可以嘗試從[S2,Z1移動到[S3,S3(虛線),其有效地把任務(wù)的標(biāo)準(zhǔn)CPU和zAAPCPU消耗這兩者都移動到標(biāo)準(zhǔn)親緣關(guān)系節(jié)點S3。應(yīng)注意的是,我們選擇S3作為接收zAAPCPU消耗的目標(biāo),這是由于其是負(fù)載最輕的標(biāo)準(zhǔn)親緣關(guān)系節(jié)點。當(dāng)我們平衡標(biāo)準(zhǔn)親緣關(guān)系節(jié)點時,我們?nèi)灾皇褂脕碜杂诒?的原始未擴展平衡矩陣行S1:S3,這是由于標(biāo)準(zhǔn)CPU消耗無法自由地移動到zAAP親緣關(guān)系節(jié)點。如上面的示例那樣使用精確測量的CPU消耗數(shù)據(jù)的負(fù)栽平衡算法的有效性顯然取決于CPU消耗數(shù)據(jù)的質(zhì)量。對負(fù)載平衡算法具有重要影響的CPU消耗數(shù)據(jù)的質(zhì)量的一個方面是數(shù)據(jù)粒度,這是可以獲得CPU消耗數(shù)據(jù)的詳細(xì)程度。例如,在由所謂的地址空間表示的z/OS應(yīng)用程序中,其是包含應(yīng)用程序代碼和數(shù)據(jù)的連續(xù)虛擬存儲器區(qū)域。在地址空間內(nèi),可以存在一個或多個被稱為任務(wù)控制塊(TCB)的執(zhí)行單元。對于例如UNIX的其它操作系統(tǒng)來說,地址空間和TCB分別處于類似于UNIX進(jìn)程和線程的較高水平。當(dāng)z/OS具有用于測量單個TCB的CPU消耗的嵌入式機制時,默認(rèn)地,因監(jiān)控單個TCB的較高開銷,它將只測量地址空間的總計CPU消耗。只使用地址空間的更加粗糙的合計的CPU消耗,所述負(fù)載平衡算法不那么有效。因此,平衡器150和CPU消耗測量機制需要彼此協(xié)調(diào)來實現(xiàn)良好的負(fù)載平衡和低測量開銷之間的最佳折衷。使用負(fù)載指數(shù)偏差,所述貪心親緣關(guān)系負(fù)載平衡算法可以容易地測定系統(tǒng)被平衡得有"多么好"。平衡器150把閾值用于負(fù)載指數(shù)偏差,低于該閾值,其認(rèn)為系統(tǒng)將令人滿意地被平衡。同時,所述平衡器150還跟蹤在平衡運行期間未被移動的幾個消耗CPU最多的地址空間。此信息對后續(xù)運行十分有用。假設(shè)所述貪心親緣關(guān)系負(fù)載平衡算法未能使負(fù)載指數(shù)偏差低于閾值,那么它將通知測量機構(gòu)開始監(jiān)視其跟蹤的"有問題的,,地址空間(這些通常是更高CPU消耗的地址空間)內(nèi)的單獨TCB的CPU消耗。因此,只有當(dāng)必要時,所述貪心親緣關(guān)系負(fù)載平衡算法才引起額外的CPU消耗測量開銷。當(dāng)所迷算法已經(jīng)成功地平衡了系統(tǒng)時,它將通知CPU消耗測量機構(gòu)停止監(jiān)視TCB并且把TCB聚集回到它們各自的地址空間。因此,雖然已經(jīng)描述了目前被認(rèn)為是優(yōu)選實施例的內(nèi)容,但是本領(lǐng)域技術(shù)人員將理解的是,在本發(fā)明的精神范圍內(nèi)可以做出其他的修改。權(quán)利要求1.一種用計算機實現(xiàn)的方法,用于在處理器網(wǎng)絡(luò)中的多個處理節(jié)點中分配多個任務(wù),所述方法包括如下步驟計算多個任務(wù)的任務(wù)處理器消耗值;計算多個節(jié)點的測量的節(jié)點處理器消耗值;計算多個節(jié)點的目標(biāo)節(jié)點處理器消耗值,所述目標(biāo)節(jié)點處理器消耗值表明最佳節(jié)點處理器消耗;根據(jù)節(jié)點i的測量的節(jié)點處理器消耗值與節(jié)點i的目標(biāo)節(jié)點處理器消耗值之間的差來計算負(fù)載指數(shù)值;以及根據(jù)每個節(jié)點的計算的負(fù)載指數(shù)值在節(jié)點中分配任務(wù)以便在節(jié)點中平衡處理器工作負(fù)載,使得每個節(jié)點的計算的負(fù)載指數(shù)值基本上為零。2.如權(quán)利要求1所述的方法,還包括如下步驟根據(jù)實際處理器工作負(fù)載分配與目標(biāo)處理器工作負(fù)載分配的差來計算負(fù)載指數(shù)標(biāo)準(zhǔn)偏差值,使得負(fù)栽指數(shù)標(biāo)準(zhǔn)偏差被減小到基本上為零,在所述目標(biāo)處理器工作負(fù)栽分配的情況下,所有親緣關(guān)系節(jié)點的負(fù)栽指數(shù)值基本上為零。3.如權(quán)利要求1所述的方法,其中多個任務(wù)中的每一個只被分配一次。4.如權(quán)利要求1所述的方法,還包括如下步驟如果存在多于一種處理器類型,那么為每個節(jié)點確定處理器類型,其中所述處理器類型確定如何分配任務(wù),使得為一種類型的處理器指定的任務(wù)被專門分配給該類型的處理器。5.如權(quán)利要求4所述的方法,還包括如下步驟創(chuàng)建多維平衡矩陣,所述矩陣的每一維表示對應(yīng)于特定處理器類型的節(jié)點,并且每個單元表示任務(wù);按照從最高負(fù)載指數(shù)值到最低負(fù)載指數(shù)值的順序來排序計算的負(fù)載指數(shù)值;以及根據(jù)已排序的負(fù)栽指數(shù)值來用任務(wù)填充所述矩陣;在單元中重新布置任務(wù)以便表示處理器工作負(fù)栽在節(jié)點中的平衡;如果其對應(yīng)節(jié)點的任務(wù)列表為空,則去除矩陣的每一維;以及根據(jù)所述矩陣表示來把任務(wù)分配給處理器。6.如權(quán)利要求5所述的方法,還包括如下步驟擴展多維平衡,使得每一維可以表示對應(yīng)于多個處理器類型的節(jié)點;以及根據(jù)預(yù)定的使用規(guī)則來重新布置單元中的任務(wù),使得任務(wù)的重新布置是非對稱的。7.如權(quán)利要求1所述的方法,還包括如下步驟計算一個閾值,低于所述閾值,認(rèn)為系統(tǒng)令人滿意地被平衡,從而所述閾值表示負(fù)載指數(shù)偏差減少一個較大的量。8.如權(quán)利要求7所述的方法,其中只有當(dāng)重新分配使得負(fù)載指數(shù)偏差減少了超過閾值的值時才重新分配任務(wù)。9.如權(quán)利要求8所述的方法,其中所述閾值根據(jù)處理器工作負(fù)載而改變。10.如權(quán)利要求1所述的方法,還包括如下步驟在每一平衡器運行期間,跟蹤具有高處理器消耗的多個任務(wù)。11.如權(quán)利要求10所述的方法,其中當(dāng)負(fù)載指數(shù)偏差未能達(dá)到閾值以下時,多個最大處理器消耗任務(wù)被更加密切地監(jiān)視以便更好地獲得處理器消耗的細(xì)節(jié)。12.—種用于在網(wǎng)絡(luò)中的多個節(jié)點中分配多個任務(wù)的系統(tǒng),所述系統(tǒng)包括用于執(zhí)行任務(wù)的多個處理器;包括處理器的多個節(jié)點;任務(wù)調(diào)度器,用于接收多個任務(wù);計算多個任務(wù)的任務(wù)處理器消耗值;計算多個節(jié)點的節(jié)點處理器消耗值;計算多個節(jié)點的目標(biāo)節(jié)點處理器消耗值,所述目標(biāo)節(jié)點處理器消耗值表明最佳節(jié)點處理器消耗;以及根據(jù)節(jié)點i的計算的節(jié)點處理器消耗值與節(jié)點i的目標(biāo)節(jié)點處理器消耗值之間的差來計算負(fù)載指數(shù)值;以及平衡器,用于根據(jù)每個節(jié)點的計算的負(fù)載指數(shù)值在節(jié)點中分配任務(wù),以便在節(jié)點中平衡處理器工作負(fù)載,使得每個節(jié)點的計算的負(fù)載指數(shù)值基本上為零。13.如權(quán)利要求12所述的系統(tǒng),其中所述任務(wù)調(diào)度器和平衡器是駐留在計算機系統(tǒng)中的軟件。14.如權(quán)利要求13所述的系統(tǒng),其中所述任務(wù)調(diào)度器還包括邏輯,用于如果存在多于一種處理器類型,那么為每個節(jié)點確定處理器類型,其中所述處理器類型確定如何分配任務(wù)。15.如權(quán)利要求14所述的系統(tǒng),其中所述任務(wù)調(diào)度器還包括邏輯,用于創(chuàng)建多維平衡矩陣,所述矩陣的每一維表示對應(yīng)于特定處理器類型的節(jié)點,并且每個單元表示任務(wù);按照從最高負(fù)載指數(shù)值到最低負(fù)載指數(shù)值的順序來排序計算的負(fù)載指數(shù)值;以及根據(jù)已排序的負(fù)載指數(shù)值來用任務(wù)填充所述矩陣;在單元中重新分配任務(wù)以便在節(jié)點中平衡處理器工作負(fù)載;如果其對應(yīng)節(jié)點任務(wù)列表為空,那么去除矩陣的每一維;以及根據(jù)平衡矩陣表示把任務(wù)分配給處理器。16.如權(quán)利要求12所述的系統(tǒng),其中所述任務(wù)調(diào)度器還計算一個閾值,使得所述閾值表示負(fù)載指數(shù)偏差減少一個較大的量;并且只有當(dāng)重新分配使負(fù)載指數(shù)偏差減少了超過所述閾值的值時才重新分配任務(wù)。17.如權(quán)利要求16所述的系統(tǒng),其中所述閾值根據(jù)處理器工作負(fù)載而改變。18.如權(quán)利要求12所述的系統(tǒng),其中所述平衡器按照實際處理器工作負(fù)栽值與目標(biāo)處理器工作負(fù)栽值的差來計算負(fù)栽指數(shù)標(biāo)準(zhǔn)偏差值,使得負(fù)栽指數(shù)標(biāo)準(zhǔn)偏差被減小到基本上為零,在所述目標(biāo)處理器工作負(fù)栽值的情況下,所有親緣關(guān)系節(jié)點的負(fù)栽指數(shù)值基本上為零。19.如權(quán)利要求18所述的系統(tǒng),其中如果平衡器未能使負(fù)載指數(shù)偏差低于閾值,那么所述平衡器將通知測量機構(gòu)開始監(jiān)視幾個最大處理器消耗的任務(wù),以便更好地獲得每一任務(wù)內(nèi)的處理器消耗細(xì)節(jié)。全文摘要一種在處理器網(wǎng)絡(luò)中多個處理節(jié)點中分配多個任務(wù)的計算機實現(xiàn)方法,包括如下步驟計算多個任務(wù)的任務(wù)處理消耗值;計算多個節(jié)點的測量的節(jié)點處理器消耗值;計算多個節(jié)點的目標(biāo)節(jié)點處理器消耗值,所述目標(biāo)節(jié)點處理器消耗值表明最佳節(jié)點處理器消耗;根據(jù)節(jié)點i的計算的節(jié)點處理器消耗值與節(jié)點i的目標(biāo)節(jié)點處理器消耗值之間的差值來計算負(fù)載指數(shù)值;并且依照計算的負(fù)載指數(shù)值在節(jié)點當(dāng)中分配任務(wù)以便在節(jié)點當(dāng)中平衡處理器的工作負(fù)載,使得每個節(jié)點的計算的負(fù)載指數(shù)值基本上是零。所述方法還具體實現(xiàn)了一種多維平衡矩陣,矩陣的每一維表示對應(yīng)于不同處理器類型的節(jié)點,并且每個單元表示分配給多個節(jié)點的任務(wù)。文檔編號G06F9/50GK101126992SQ20071012913公開日2008年2月20日申請日期2007年7月13日優(yōu)先權(quán)日2006年8月15日發(fā)明者伯納德·R.·皮爾斯,唐娜·N.·第蘭博格,唐納德·W.·施密特,斯蒂芬·J.·海斯格,格雷格·A.·狄克,工蘇申請人:國際商業(yè)機器公司