專利名稱:用于指定本地節(jié)點(diǎn)給新創(chuàng)建線程的機(jī)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及多節(jié)點(diǎn)計(jì)算環(huán)境中的工作分配。
背景技術(shù):
計(jì)算機(jī)系統(tǒng)廣泛地用于存儲(chǔ)和處理數(shù)據(jù)。數(shù)據(jù)在計(jì)算機(jī)系統(tǒng)存儲(chǔ)器中存儲(chǔ),并由計(jì)算機(jī)系統(tǒng)的處理器上執(zhí)行的計(jì)算機(jī)系統(tǒng)程序處理。如公知的,處理器經(jīng)常被認(rèn)為是計(jì)算機(jī)系統(tǒng)的“大腦”,因?yàn)樗怯?jì)算機(jī)系統(tǒng)內(nèi)執(zhí)行計(jì)算機(jī)系統(tǒng)的程序的部件,允許計(jì)算機(jī)系統(tǒng)做真正的工作。當(dāng)計(jì)算機(jī)程序正在執(zhí)行時(shí),存儲(chǔ)器用于保存它們,并且當(dāng)數(shù)據(jù)正在由執(zhí)行計(jì)算機(jī)程序的處理器訪問時(shí),存儲(chǔ)器用于保存數(shù)據(jù)。
為有競(jìng)爭(zhēng)力,計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)者正不斷努力,使計(jì)算機(jī)系統(tǒng)更強(qiáng)大,同時(shí)保持或減小計(jì)算機(jī)系統(tǒng)的尺寸。常見的方法是通過增加使用的處理器的數(shù)目,增強(qiáng)計(jì)算機(jī)系統(tǒng)的總的處理能力。為了制造效率,處理器和存儲(chǔ)器通經(jīng)常封裝在一起,構(gòu)成所謂的節(jié)點(diǎn),并且計(jì)算機(jī)系統(tǒng)包含一個(gè)或更多這樣的節(jié)點(diǎn)。在這些多節(jié)點(diǎn)計(jì)算機(jī)系統(tǒng)內(nèi),任何處理器可以訪問任何節(jié)點(diǎn)上的存儲(chǔ)器,但是,處理器一般可以比訪問其它節(jié)點(diǎn)上的存儲(chǔ)器(遠(yuǎn)程訪問)更有效率地訪問它自己節(jié)點(diǎn)上的存儲(chǔ)器(本地訪問)。
計(jì)算機(jī)程序包含一系列指令,它們由計(jì)算機(jī)系統(tǒng)的一個(gè)或更多處理器執(zhí)行。通過執(zhí)行這些指令,就說處理器執(zhí)行計(jì)算機(jī)程序。操作系統(tǒng)(為其它程序的利益,主要負(fù)責(zé)操作計(jì)算機(jī)系統(tǒng)的程序)通過使用任務(wù)(job)(有時(shí)稱為任務(wù)(task)或進(jìn)程)控制這些程序的執(zhí)行。多數(shù)處理器一次只能執(zhí)行一個(gè)指令流,但是因?yàn)樗鼈冞\(yùn)行如此之快,它們顯得同時(shí)運(yùn)行很多任務(wù)和為很多用戶服務(wù)。計(jì)算機(jī)操作系統(tǒng)在運(yùn)行中給予每個(gè)任務(wù)“機(jī)會(huì)(turn)”,然后當(dāng)另一個(gè)任務(wù)得到機(jī)會(huì)時(shí),要求該任務(wù)等待。在任務(wù)繼續(xù)之前需要等待某事發(fā)生(例如訪問次級(jí)存儲(chǔ)),或多個(gè)處理器可用的情況下,任務(wù)可以創(chuàng)建線程(有時(shí)稱為子進(jìn)程或子任務(wù)),以異步地繼續(xù)或加速處理。未創(chuàng)建任何線程的任務(wù)自己可以被認(rèn)為具有單一的線程。因此,可以認(rèn)為任務(wù)由一個(gè)或更多線程組成。
從節(jié)點(diǎn)的觀點(diǎn)來看,操作系統(tǒng)可以指定線程以任何多種方式執(zhí)行。例如,可以選擇一個(gè)任務(wù)的線程用于在給定的節(jié)點(diǎn)上執(zhí)行,同時(shí)可以選擇另一個(gè)任務(wù)的線程用于在不同的節(jié)點(diǎn)上執(zhí)行。類似地,來自相同任務(wù)的線程可以在不同的節(jié)點(diǎn)上執(zhí)行,而被選擇在給定節(jié)點(diǎn)上執(zhí)行的線程也可以在結(jié)束之前被選擇在一個(gè)或更多其它節(jié)點(diǎn)上執(zhí)行。雖然這種靈活性在某些方面是有益的,但從數(shù)據(jù)訪問的觀點(diǎn)來看,它是有問題的。如上所述,節(jié)點(diǎn)由處理器和存儲(chǔ)器組成,并且與在別的節(jié)點(diǎn)上的存儲(chǔ)器相比,處理器可以更高效地訪問它自己節(jié)點(diǎn)上的存儲(chǔ)器。因此,為了高效地執(zhí)行,操作系統(tǒng)必須保證每個(gè)線程訪問在同一節(jié)點(diǎn)上的存儲(chǔ)器中的它的數(shù)據(jù),在該節(jié)點(diǎn)上該線程正在執(zhí)行。
操作系統(tǒng)已經(jīng)解決這個(gè)問題的一種方法是通過使每個(gè)線程與它執(zhí)行和訪問數(shù)據(jù)都優(yōu)先選擇的節(jié)點(diǎn)相關(guān)聯(lián)。然后,當(dāng)執(zhí)行給定線程的時(shí)間到來時(shí),只要可能,操作系統(tǒng)在它優(yōu)先選擇的節(jié)點(diǎn)上選擇處理器。類似地,當(dāng)需要為了線程將數(shù)據(jù)放入存儲(chǔ)器時(shí),只要可能,選擇它的優(yōu)選節(jié)點(diǎn)上的存儲(chǔ)器。這種方法一般在最小化遠(yuǎn)程存儲(chǔ)器訪問時(shí)有幫助,只要通過執(zhí)行線程所做的工作是在計(jì)算機(jī)系統(tǒng)的節(jié)點(diǎn)之間平衡的。
具有一個(gè)或更多節(jié)點(diǎn)的計(jì)算機(jī)系統(tǒng)也可以分區(qū)為兩個(gè)或更多邏輯上分離的系統(tǒng)。可以給邏輯分區(qū)指定處理器和存儲(chǔ)器,而不考慮它們所屬的節(jié)點(diǎn)。此外,由于配置改變或容量升級(jí)或降級(jí),處理器和/或存儲(chǔ)器可以動(dòng)態(tài)地添加到分區(qū)和/或計(jì)算機(jī)系統(tǒng),或者從分區(qū)和/或計(jì)算機(jī)系統(tǒng)移除。計(jì)算機(jī)系統(tǒng)內(nèi)關(guān)于本地相對(duì)遠(yuǎn)程存儲(chǔ)器訪問的效率問題在每個(gè)邏輯分區(qū)內(nèi)也適用。貫穿本說明書,術(shù)語“系統(tǒng)”用來指整個(gè)未分區(qū)的計(jì)算機(jī)系統(tǒng)或計(jì)算機(jī)系統(tǒng)的邏輯分區(qū)。
在跨越節(jié)點(diǎn)平衡工作負(fù)載的環(huán)境中,先前技術(shù)方法是保持跟蹤與每個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的線程數(shù),意圖按照和每個(gè)節(jié)點(diǎn)的處理工作的能力相同的比例保持那些數(shù)。通常這意味著與每個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的線程的比例應(yīng)該反映每個(gè)節(jié)點(diǎn)上系統(tǒng)可用的處理器和/或存儲(chǔ)器資源的比例。當(dāng)操作系統(tǒng)將正在創(chuàng)建的新線程與優(yōu)選節(jié)點(diǎn)相關(guān)聯(lián)時(shí),它選擇這樣的節(jié)點(diǎn),該節(jié)點(diǎn)那時(shí)的線程計(jì)數(shù)與它的計(jì)數(shù)根據(jù)線程總數(shù)和節(jié)點(diǎn)資源的比例應(yīng)該具有的值相比缺少得最多。
這種方法基于假定每個(gè)線程做相同數(shù)量的工作,或者在足夠數(shù)量下集合將跨節(jié)點(diǎn)平衡工作負(fù)載。顯然所有線程并不是做相同數(shù)量的工作,并且因?yàn)椴僮飨到y(tǒng)不能提早告訴給定線程將做多少工作,實(shí)際上,試圖簡(jiǎn)單地通過平衡每個(gè)節(jié)點(diǎn)上的線程數(shù)來平衡工作是沒有希望的。
當(dāng)將新創(chuàng)建任務(wù)和優(yōu)選節(jié)點(diǎn)相關(guān)聯(lián)時(shí),沒有解決在節(jié)點(diǎn)基礎(chǔ)上實(shí)際正在做的工作量的一些手段,今天的多節(jié)點(diǎn)計(jì)算機(jī)系統(tǒng)將不會(huì)實(shí)現(xiàn)本地存儲(chǔ)器訪問的效率,因?yàn)楫a(chǎn)生的工作負(fù)載中的不平衡在過量使用的節(jié)點(diǎn)資源上將變?yōu)槠款i,或者將使用另一個(gè)節(jié)點(diǎn)上的資源代替它們,導(dǎo)致遠(yuǎn)程存儲(chǔ)器訪問。
發(fā)明內(nèi)容
本發(fā)明涉及一種裝置、方法和程序產(chǎn)品,用于將新的工作(線程)和多節(jié)點(diǎn)計(jì)算機(jī)系統(tǒng)的處理節(jié)點(diǎn)相關(guān)聯(lián)。通過考慮每個(gè)節(jié)點(diǎn)的相對(duì)工作能力和分配給每個(gè)節(jié)點(diǎn)的正在進(jìn)行的工作的相對(duì)數(shù)量來完成分配。
優(yōu)選實(shí)施例涉及用于每個(gè)節(jié)點(diǎn)的初始權(quán)重的計(jì)算和使用。當(dāng)創(chuàng)建新線程時(shí),從應(yīng)該選擇哪個(gè)節(jié)點(diǎn)的觀點(diǎn)看,初始權(quán)重反映分配給每個(gè)節(jié)點(diǎn)的線程的希望的比例。
圖1A是顯示能夠支持本發(fā)明的優(yōu)選實(shí)施例的計(jì)算環(huán)境的方塊圖。
圖1B是顯示能夠支持本發(fā)明的優(yōu)選實(shí)施例的替代計(jì)算環(huán)境的方塊圖。
圖2是是顯示本發(fā)明的優(yōu)選實(shí)施例的內(nèi)核服務(wù)的擴(kuò)展視圖的方塊圖。
圖3A-1到3B-2是顯示用于執(zhí)行優(yōu)選實(shí)施例的線程創(chuàng)建機(jī)制的突出處理的步驟的流程圖。
圖4是顯示優(yōu)選實(shí)施例的線程創(chuàng)建機(jī)制內(nèi)突出步驟的流程圖,這些步驟從親合組(affinity)分離線程。
圖5是顯示優(yōu)選實(shí)施例的線程創(chuàng)建機(jī)制內(nèi)突出步驟的流程圖,這些步驟使存儲(chǔ)器親合組信息對(duì)其它系統(tǒng)部件可用。
圖6是顯示初始化程序裝載(IPL)序列內(nèi)突出步驟的流程圖,這些步驟初始化優(yōu)選實(shí)施例中使用的各種權(quán)重,以實(shí)現(xiàn)內(nèi)核部件平衡通知(KCBN)。
圖7-11、14和15是顯示優(yōu)選實(shí)施例內(nèi)使用的突出步驟的流程圖,這些步驟調(diào)整各種KCBN權(quán)重,以響應(yīng)系統(tǒng)內(nèi)的配置改變。
圖11-14和16A-25是顯示優(yōu)選實(shí)施例的監(jiān)控器處理器(Watch DogHandler)和節(jié)點(diǎn)平衡器中使用的突出步驟的流程圖,這些步驟執(zhí)行工作重新分配。
圖26-28C是顯示涉及優(yōu)選實(shí)施例的線程創(chuàng)建機(jī)制如何執(zhí)行本地節(jié)點(diǎn)指定的突出步驟的流程圖。
圖29A到31顯示本發(fā)明的優(yōu)選實(shí)施例中使用的數(shù)據(jù)結(jié)構(gòu)。
具體實(shí)施例方式
現(xiàn)在轉(zhuǎn)向附圖,圖1A顯示本發(fā)明的優(yōu)選實(shí)施例的計(jì)算裝置中使用的一些操作部件。計(jì)算機(jī)裝置100是增強(qiáng)的IBM i系列計(jì)算機(jī)系統(tǒng),雖然可以使用其它計(jì)算機(jī)。描述的部件包括處理節(jié)點(diǎn)130、網(wǎng)絡(luò)接口125、用戶接口150和大容量存儲(chǔ)器155。優(yōu)選實(shí)施例的計(jì)算機(jī)裝置100包括4個(gè)處理節(jié)點(diǎn),雖然可以使用更多或更少的節(jié)點(diǎn)。網(wǎng)絡(luò)接口125用于和其它計(jì)算機(jī)系統(tǒng)通信。用戶接口150用于接受命令并傳達(dá)信息給計(jì)算機(jī)系統(tǒng)100的一個(gè)或更多用戶。
也顯示了節(jié)點(diǎn)130之一的展開視圖(即節(jié)點(diǎn)131)。節(jié)點(diǎn)131包含處理器132和存儲(chǔ)器134。在優(yōu)選實(shí)施例中,每個(gè)節(jié)點(diǎn)可以包括最多8個(gè)處理器132,雖然可能有包括更多或更少處理器的其它配置。處理器132用于執(zhí)行存儲(chǔ)于存儲(chǔ)器134中的線程,雖然應(yīng)該理解在某些時(shí)候這些線程可能部分或全部位于大容量存儲(chǔ)器155。處理器可以訪問任何節(jié)點(diǎn)上的存儲(chǔ)器,雖然它可以更高效地訪問它自己節(jié)點(diǎn)上的存儲(chǔ)器。
圖1B顯示優(yōu)選實(shí)施例的計(jì)算環(huán)境的更詳細(xì)的視圖。如所示,優(yōu)選實(shí)施例能夠在邏輯分區(qū)的計(jì)算機(jī)系統(tǒng)上操作。在這種情況下,配置內(nèi)核服務(wù)137的實(shí)例位于每個(gè)分區(qū)中(如在圖1B顯示的系統(tǒng)1-3)。優(yōu)選實(shí)施例的機(jī)制將每個(gè)分區(qū)視為完整的系統(tǒng)。因此,術(shù)語系統(tǒng),當(dāng)在這里由其自身使用時(shí),應(yīng)該解釋為指未分區(qū)的計(jì)算機(jī)裝置,或指計(jì)算機(jī)裝置內(nèi)單個(gè)的邏輯分區(qū)。系統(tǒng)可以使用少于整個(gè)計(jì)算機(jī)裝置的所有節(jié)點(diǎn),如系統(tǒng)1和2的情況。一個(gè)節(jié)點(diǎn)也可能支持多于一個(gè)系統(tǒng),這是節(jié)點(diǎn)1和2的情況。優(yōu)選實(shí)施例的很多機(jī)制涉及指定和調(diào)整工作(線程)如何在系統(tǒng)的節(jié)點(diǎn)中分配。因此,當(dāng)系統(tǒng)的配置改變時(shí),優(yōu)選實(shí)施例的機(jī)制確定是否需要工作分配調(diào)整,并且如果是這樣,就執(zhí)行那些調(diào)整。
每個(gè)系統(tǒng)被顯示包括線程135和操作系統(tǒng)136。內(nèi)核服務(wù)137集成到操作系統(tǒng)136中。內(nèi)核服務(wù)提供操作系統(tǒng)級(jí)服務(wù)給其它操作系統(tǒng)實(shí)體和其它程序??墒?,應(yīng)該注意,雖然優(yōu)選實(shí)施例提供重新平衡需要的內(nèi)核服務(wù)通知,但本發(fā)明不限于內(nèi)核或操作系統(tǒng)級(jí)服務(wù),而是可應(yīng)用于能夠利用重新平衡通知的所有服務(wù)。
作為最后的初步內(nèi)容,應(yīng)該理解,雖然這里在計(jì)算機(jī)裝置環(huán)境中描述本發(fā)明的實(shí)施例,但某些程序機(jī)制,如內(nèi)核服務(wù)137,能夠以程序產(chǎn)品的形式分發(fā)。自然,程序產(chǎn)品可以使用各種類型的信號(hào)承載媒體分發(fā),包括但不限于可記錄類型媒體如軟盤和CD ROM;以及傳輸類型媒體如數(shù)字或模擬通信鏈路。
圖2是優(yōu)選實(shí)施例的內(nèi)核服務(wù)137的某些方面的展開視圖。如所示,內(nèi)核服務(wù)137包括線程管理器200、節(jié)點(diǎn)管理器220和配置管理器240。進(jìn)而顯示線程管理器200包括線程創(chuàng)建機(jī)制(TCM)205、線程分派機(jī)制(TDM)215和線程存儲(chǔ)器管理器(TMM)217。在優(yōu)選實(shí)施例中使用TCM 205創(chuàng)建可執(zhí)行線程和必要的線程控制結(jié)構(gòu)。作為創(chuàng)建過程的一部分,還由TCM 205指定本地節(jié)點(diǎn)(home node)給這些可執(zhí)行線程。本地節(jié)點(diǎn)指定很重要,因?yàn)榭赡軙r(shí)TDM 215偏愛執(zhí)行指定給它們的本地節(jié)點(diǎn)上的線程,并且可能時(shí)TMM偏愛從指定給它們的本地節(jié)點(diǎn)分配存儲(chǔ)器。這種偏愛的含義屬于整個(gè)系統(tǒng)利用和資源分配。在圖26-28的伴隨的文字中描述TCM 205的本地節(jié)點(diǎn)指定方面。
已經(jīng)由TCM 205創(chuàng)建線程并分配給本地節(jié)點(diǎn)之后,由TDM 215分派線程用于執(zhí)行。一般來說,可以在系統(tǒng)的不同節(jié)點(diǎn)上的若干處理器的任何一個(gè)上執(zhí)行線程。TCM 205是優(yōu)選實(shí)施例內(nèi)負(fù)責(zé)對(duì)線程分組的實(shí)體,以便最好地使用可用的處理器和存儲(chǔ)器資源。關(guān)于TCM 205的功能和內(nèi)部工作的另外詳情在即將到來的圖3A到5的討論中提供。
節(jié)點(diǎn)管理器220也在圖2上顯示。節(jié)點(diǎn)管理器220在優(yōu)選實(shí)施例中使用,以確定系統(tǒng)中不同節(jié)點(diǎn)的相對(duì)工作負(fù)載,該節(jié)點(diǎn)管理器本身由3個(gè)分立的實(shí)體組成。另外在優(yōu)選實(shí)施例中使用的節(jié)點(diǎn)管理器220,識(shí)別和修正系統(tǒng)內(nèi)工作負(fù)載不平衡,并通知其它內(nèi)核服務(wù)節(jié)點(diǎn)工作負(fù)載的變化,使得這些服務(wù)自己可以相應(yīng)地調(diào)整。不平衡識(shí)別和處理在本專利的工作重新分配部分描述(圖11-14和16-25),而內(nèi)核部件平衡通知在伴隨圖7-11、14和15的文字中描述。
在節(jié)點(diǎn)管理器220內(nèi)顯示分派處理器230、監(jiān)控器處理器(WDH)225和節(jié)點(diǎn)平衡器235。這3個(gè)實(shí)體在優(yōu)選實(shí)施例的系統(tǒng)內(nèi)作為異步線程操作。本領(lǐng)域技術(shù)人員知道這些線程的異步特性意味著需要原子數(shù)據(jù)訪問。因此,當(dāng)在這里偶爾引用原子問題時(shí),本專利不包含底層原子機(jī)制的廣泛處理,如提到的,它們對(duì)本領(lǐng)域技術(shù)人員是公知的。如其名稱提示,分派處理器230負(fù)責(zé)處理來自TDM 215的分派請(qǐng)求。因?yàn)榫€程連續(xù)不斷地被分派,分派處理器230非常頻繁地運(yùn)行。在這種環(huán)境下,它的責(zé)任之一是在本地節(jié)點(diǎn)的基礎(chǔ)上積累處理器執(zhí)行周期計(jì)數(shù)。(分派處理器230獲得這個(gè)周期信息使用的準(zhǔn)確的裝置對(duì)優(yōu)選實(shí)施例的理解并不重要,因此在這里不描述它。)預(yù)定每秒執(zhí)行的WDH 225每7秒獲得這些積累的周期。這個(gè)7秒鐘間隔在這里稱為當(dāng)前權(quán)重間隔。獲得信息后,WDH 225對(duì)信息進(jìn)行各種計(jì)算,該信息最終變?yōu)楫?dāng)前權(quán)重。(優(yōu)選實(shí)施例內(nèi)當(dāng)前權(quán)重的使用在即將到來的段落中描述。)在某些時(shí)候,每當(dāng)當(dāng)前權(quán)重間隔期滿時(shí),WDH 225也負(fù)責(zé)通知節(jié)點(diǎn)平衡器235。節(jié)點(diǎn)平衡器235利用這個(gè)通知確定是否需要內(nèi)核部件平衡通知。
配置管理器240也在圖2上顯示。在優(yōu)選實(shí)施例中,配置管理器240是發(fā)信號(hào)通知配置變化給節(jié)點(diǎn)平衡器235的實(shí)體。節(jié)點(diǎn)平衡器235然后考慮配置變化,并且采取與工作分配和內(nèi)核部件平衡通知有關(guān)的適當(dāng)行動(dòng)。配置變化的例子包括增加或減少系統(tǒng)上處理器或者存儲(chǔ)器的數(shù)目。
基于存儲(chǔ)器親合對(duì)線程分組為了允許對(duì)多于一個(gè)線程的共享數(shù)據(jù)的本地訪問,本發(fā)明提供分組兩個(gè)或更多線程到存儲(chǔ)器親合組(MAG)的優(yōu)勢(shì)。通過允許具有互相依賴的數(shù)據(jù)訪問需要的線程在相同的節(jié)點(diǎn)上執(zhí)行,從而實(shí)現(xiàn)可歸于本地存儲(chǔ)器訪問的性能增益。在優(yōu)選實(shí)施例中,線程單獨(dú)或在任務(wù)的基礎(chǔ)上放入MAG。如果在任務(wù)的基礎(chǔ)上放入MAG,給定任務(wù)的所有線程全部放入相同的MAG。但是,本領(lǐng)域技術(shù)人員會(huì)知道存在替代選擇。例如,可能會(huì)在兩個(gè)級(jí)別上都指定MAG參與,一個(gè)指定優(yōu)先于另一個(gè)。
在這里圖3A到5用于描述本發(fā)明的存儲(chǔ)器親合分組方面。在優(yōu)選實(shí)施例中,當(dāng)正在執(zhí)行的線程請(qǐng)求創(chuàng)建另一個(gè)線程時(shí),發(fā)生MAG確定和邏輯節(jié)點(diǎn)分配。在這里圖3A用于描述負(fù)責(zé)與請(qǐng)求線程直接相互作用的TCM 205的那部分。這個(gè)相互作用的結(jié)果最終導(dǎo)致線程創(chuàng)建,這在與圖3B相關(guān)聯(lián)的文字中描述。首先轉(zhuǎn)向圖3A,塊300顯示收到創(chuàng)建線程的請(qǐng)求。接下來,在塊302,TCM 205確定是否線程創(chuàng)建請(qǐng)求指定是否希望參加MAG。在優(yōu)選實(shí)施例中,對(duì)參加MAG的期望在TCM 205可以訪問的持久線程創(chuàng)建屬性(TCA)中指定。如果對(duì)這個(gè)線程希望參加MAG,那么TCM 205接下來確定是否TCA指定特定的MAG[塊304]。在優(yōu)選實(shí)施例中,通過使用MAG標(biāo)識(shí)符(即,組ID)進(jìn)行這個(gè)指定。如果在TCA內(nèi)指定了組ID,TCM 205將滿足這個(gè)請(qǐng)求,并且使用指定的組ID簡(jiǎn)單地創(chuàng)建線程[塊308]。如果TCA還未使組ID被指定,將分配下一個(gè)可用的組ID給它(并且其后就是由TCA將使用的組)[塊306]。
如果在塊302,TCM 205確定沒有請(qǐng)求參加MAG,那么TCM 205接下來將確定是否在TCA中已經(jīng)指定“邏輯節(jié)點(diǎn)”的使用[塊310]。在優(yōu)選實(shí)施例中,不同于物理節(jié)點(diǎn)的邏輯節(jié)點(diǎn)用于允許請(qǐng)求線程指定給創(chuàng)建的線程指定相同或不同的本地節(jié)點(diǎn)。作為線程的實(shí)際本地節(jié)點(diǎn)的物理節(jié)點(diǎn),對(duì)請(qǐng)求線程是隱藏的。這種方法具有這樣的優(yōu)勢(shì)允許為請(qǐng)求者指定邏輯節(jié)點(diǎn),同時(shí)保持滿足使用具有不同標(biāo)識(shí)符的物理節(jié)點(diǎn)的請(qǐng)求的靈活性。因此,邏輯節(jié)點(diǎn)的指定具有為線程指定本地節(jié)點(diǎn)的作用。
如果在塊310已經(jīng)指定使用邏輯節(jié)點(diǎn),TCM 205確定是否TCA包括特定邏輯節(jié)點(diǎn)的指定[塊312]。如果沒有,TCM 205指定下一個(gè)可用的邏輯節(jié)點(diǎn)ID并將它存儲(chǔ)在TCA中[塊314]。最后,使用TCA中指定的邏輯節(jié)點(diǎn)ID或新指定的邏輯節(jié)點(diǎn)ID,TCM 205進(jìn)行創(chuàng)建線程[塊316]。現(xiàn)在返回到塊310,如果TCM 205從TCA的檢查確定未指定使用邏輯節(jié)點(diǎn),那么TCM 205將在塊318確定是否TCA包括參考線程的識(shí)別。參考線程是這樣的線程其中,相對(duì)要?jiǎng)?chuàng)建的線程期望存儲(chǔ)器親合。在優(yōu)選實(shí)施例中,通過在TCA中包括線程ID實(shí)現(xiàn)參考線程的指定。如果未指定參考線程ID,那么TCM 205創(chuàng)建沒有邏輯節(jié)點(diǎn)或MAG ID的線程[塊320]。這將具有允許TCM 205為被請(qǐng)求的線程選擇本地節(jié)點(diǎn)的作用。
如果已經(jīng)指定參考線程,那么接下來TCM 205將確定是否指定的參考線程已經(jīng)與MAG相關(guān)聯(lián)[塊322]。如果是這樣,TCM 205將提取參考線程的MAG ID[塊324],并使用指定的MAG ID進(jìn)行創(chuàng)建線程[塊326]。如果在塊322,TCM 205確定參考線程還未與MAG相關(guān)聯(lián),那么TCM 205確定是否參考線程具有指定給它的邏輯節(jié)點(diǎn)。如果是這樣,TCM 205提取參考線程的邏輯節(jié)點(diǎn)[塊330],并使用指定的邏輯節(jié)點(diǎn)創(chuàng)建線程[塊332]。如果在塊328,TCM 205確定事實(shí)上邏輯節(jié)點(diǎn)還未指定給參考線程,那么TCM 205將指定下一個(gè)可用的MAG ID[塊334],并從參考線程提取本地節(jié)點(diǎn)[塊336]。一旦這個(gè)實(shí)現(xiàn),新的MAG被創(chuàng)建并被添加到MAG列表,參考線程也被添加到MAG[塊338]。然后TCM 205使用指定的MAG ID創(chuàng)建線程[塊340]。
圖3B顯示優(yōu)選實(shí)施例的TCM 205中使用的實(shí)際執(zhí)行線程創(chuàng)建的步驟。存在3個(gè)到圖3B的邏輯的入口點(diǎn)??梢允褂肕AG ID作為輸入[塊354]、使用邏輯節(jié)點(diǎn)ID作為輸入[塊352]或者不指定MAG ID或邏輯節(jié)點(diǎn)ID創(chuàng)建線程[塊350]。
如果TCM 205通過塊350進(jìn)入圖3B的邏輯,TCM 205將進(jìn)行為線程確定本地節(jié)點(diǎn)[塊356]。如早先提到的,線程的本地節(jié)點(diǎn)是這樣的節(jié)點(diǎn)只要可能,將在該節(jié)點(diǎn)上分派線程,并且在可能的地方為線程分配該節(jié)點(diǎn)的存儲(chǔ)器。在進(jìn)行本地節(jié)點(diǎn)確定中,系統(tǒng)考慮幾個(gè)因素,包括當(dāng)前的和期望的工作負(fù)載。在與圖26-28相關(guān)聯(lián)的文字中提供關(guān)于本地節(jié)點(diǎn)確定的具體細(xì)節(jié)。然后TCM205進(jìn)行為線程創(chuàng)建內(nèi)核線程結(jié)構(gòu)[塊372]。在優(yōu)選實(shí)施例中,使用內(nèi)核線程結(jié)構(gòu)表示線程。因此,創(chuàng)建內(nèi)核線程結(jié)構(gòu)與創(chuàng)建線程同義。TCM 205接下來確定是否最近創(chuàng)建的線程是MAG的成員。在這部分說明中可用的假定是線程創(chuàng)建請(qǐng)求不包括MAG或邏輯節(jié)點(diǎn)ID的指定(見上面塊350的討論)。因此,判決塊380和384的處理導(dǎo)致否,這使TCM 205結(jié)束塊388中的處理。在這點(diǎn),被請(qǐng)求的線程已經(jīng)創(chuàng)建并被指定給本地節(jié)點(diǎn)。
如果TCM 205通過塊352進(jìn)入圖3B的邏輯,那么TCM 205進(jìn)行轉(zhuǎn)換指定的邏輯節(jié)點(diǎn)為物理節(jié)點(diǎn),那么它是線程的本地節(jié)點(diǎn)。在優(yōu)選實(shí)施例中,使用確定性算法保持給定邏輯節(jié)點(diǎn)和給定物理節(jié)點(diǎn)間的一致相關(guān)性,并且映射可以是多對(duì)一的。但是,應(yīng)該注意,可用使用其它映射方法。塊372和380的處理與上面已經(jīng)描述的相同。可是,在這種情況下,已經(jīng)指定邏輯節(jié)點(diǎn)ID,這使TCM 205將線程標(biāo)記為不可移動(dòng)[塊386],意味著它的本地節(jié)點(diǎn)不能改變(見下面的工作重新分配部分)。這樣做可滿足特定邏輯節(jié)點(diǎn)的請(qǐng)求線程的指定。
如果TCM 205通過塊354進(jìn)入圖3B的邏輯,那么TCM 205將首先試圖找到與組ID相關(guān)聯(lián)的MAG[塊360]。在優(yōu)選實(shí)施例中,由組對(duì)象表示每個(gè)MAG,并且每個(gè)組對(duì)象包含組ID、MAG的本地節(jié)點(diǎn)和成員線程列表。將對(duì)象串到一起形成MAG列表。通過遍歷(traverse)MAG列表,TCM 205確定是否發(fā)現(xiàn)組ID匹配[塊362]。如果發(fā)現(xiàn)匹配[塊362],那么在塊372中創(chuàng)建內(nèi)核線程結(jié)構(gòu)之前,TCM 205為MAG從組對(duì)象提取本地節(jié)點(diǎn)[塊364]。
現(xiàn)在返回到處理塊362,如果在MAG列表中未發(fā)現(xiàn)匹配,那么TCM 205需要為要?jiǎng)?chuàng)建的線程和MAG確定本地節(jié)點(diǎn)。TCM 205在塊370中進(jìn)行為這個(gè)線程確定本地節(jié)點(diǎn)。(如上面提到的,在與圖26-28相關(guān)聯(lián)的文字中更詳細(xì)地解釋本地節(jié)點(diǎn)確定)。一旦確定了本地節(jié)點(diǎn),TCM 205就創(chuàng)建新的MAG(即,組對(duì)象)并且在MAG中存儲(chǔ)本地節(jié)點(diǎn)和組ID[塊378],并且添加組對(duì)象到列表[塊374]。然后使用添加到列表的新MAG,創(chuàng)建線程(即,內(nèi)核線程結(jié)構(gòu))[塊372]。
如上所述,一旦已經(jīng)創(chuàng)建內(nèi)核線程結(jié)構(gòu),TCM 205就確定是否剛創(chuàng)建的線程是MAG成員。這里,在這部分解釋中,線程是MAG的成員。因此,TCM 205在塊382中進(jìn)行添加線程到MAG。在優(yōu)選實(shí)施例中,這通過添加線程到用于MAG的線程列表實(shí)現(xiàn)。
圖4顯示優(yōu)選實(shí)施例中使用的突出步驟,這些步驟在線程結(jié)束時(shí)處理MAG管理。當(dāng)在優(yōu)選實(shí)施例中線程結(jié)束時(shí),如果它是MAG成員,它有責(zé)任從MAG去除它自己。因此,如果在塊405,結(jié)束線程確定它不是MAG的一部分,那么正常的線程結(jié)束處理簡(jiǎn)單地繼續(xù)[塊417]。如果在塊405,線程確定它是MAG成員,那么線程進(jìn)行從MAG的線程列表去除它自己[塊410]。如果結(jié)束線程不是MAG中的最后線程[塊419],結(jié)束處理僅僅再次繼續(xù)。但是,結(jié)束線程是MAG中的最后線程[塊419],在塊421中從MAG列表去除MAG。然后在正常結(jié)束處理在塊417繼續(xù)之前,MAG自己在塊423消滅。
MAG管理的另一方面是在MAG的存在相當(dāng)短暫的環(huán)境中(即,MAG來和去的環(huán)境),顯露(surface)關(guān)于MAG的信息。圖5顯示優(yōu)選實(shí)施例中使用的完成這個(gè)任務(wù)的步驟。當(dāng)接收到信息請(qǐng)求時(shí)[塊500],首先試圖定位為其搜索信息的MAG[塊505]。如果在MAG列表中未發(fā)現(xiàn)相關(guān)聯(lián)的MAG,在塊535通知請(qǐng)求者,然后在塊530繼續(xù)正常的處理。如果發(fā)現(xiàn)MAG,那么在塊520提供被請(qǐng)求的信息。然后處理繼續(xù)[塊530]。
內(nèi)核部件平衡通知本專利的這部分屬于內(nèi)核部件平衡通知。如上所述,優(yōu)選實(shí)施例的機(jī)制操作于最好地平衡系統(tǒng)上的整個(gè)工作負(fù)載。與這個(gè)平衡相關(guān)聯(lián)的是這樣的需要通知其它內(nèi)核部件(即,服務(wù))對(duì)工作分配的改變,使得那些部件可以采取適當(dāng)?shù)牟襟E。為接收通知,部件必須使用節(jié)點(diǎn)平衡器235登記。節(jié)點(diǎn)平衡器235可以訪問在圖31中顯示的部件登記處(registry)。優(yōu)選實(shí)施例中使用的登記處邏輯上表現(xiàn)為鏈接的列表,每個(gè)元素包含部件名稱、部件方法和到登記處中下一個(gè)元素的指針。建立部件方法,以在通知時(shí)由節(jié)點(diǎn)平衡器235調(diào)用。還應(yīng)該注意,雖然優(yōu)選實(shí)施例按照計(jì)入操作系統(tǒng)服務(wù)的內(nèi)核服務(wù)操作,但本發(fā)明的應(yīng)用不限于內(nèi)核或操作系統(tǒng)服務(wù),而是可應(yīng)用于任何類型的部件或服務(wù),它們可以從系統(tǒng)內(nèi)工作分配改變的通知受益。
系統(tǒng)IPL開始,應(yīng)該注意,雖然在系統(tǒng)IPL部分這里引入幾個(gè)優(yōu)選實(shí)施例概念,但很多這些概念的完整解釋(即當(dāng)前權(quán)重、轉(zhuǎn)換權(quán)重、權(quán)重差分閾值和初始權(quán)重)直到討論了整個(gè)環(huán)境才提供。當(dāng)前權(quán)重、轉(zhuǎn)換權(quán)重、權(quán)重差分概念在與圖7-9相關(guān)聯(lián)的文字中討論,而初始權(quán)重概念和圖26-28的論述一起討論。采用這種方法,是因?yàn)橥ㄟ^即將到來的段落中提供的環(huán)境,可以得到越來越好的理解。
現(xiàn)在參考圖6,每次引導(dǎo)系統(tǒng)時(shí)調(diào)用節(jié)點(diǎn)平衡器235,這可以在任何時(shí)間發(fā)生。節(jié)點(diǎn)平衡器235設(shè)置節(jié)點(diǎn)管理器狀態(tài)(見圖29A的2902)到“當(dāng)前權(quán)重”[塊605],并且初始化所有存儲(chǔ)區(qū)域?yàn)榱?見圖29A-31的2904-3100)[塊608]。節(jié)點(diǎn)平衡器235進(jìn)行創(chuàng)建一組權(quán)重。這些在本地節(jié)點(diǎn)基礎(chǔ)上創(chuàng)建的權(quán)重在優(yōu)選實(shí)施例中用于管理系統(tǒng)上工作的分配。第一個(gè)創(chuàng)建的權(quán)重是所謂的目標(biāo)權(quán)重。用于每個(gè)節(jié)點(diǎn)的目標(biāo)權(quán)重表示對(duì)那個(gè)給定節(jié)點(diǎn)希望的工作份額。優(yōu)選實(shí)施例的機(jī)制的目的是在整個(gè)系統(tǒng)內(nèi)與不同目標(biāo)權(quán)重成比例地分配工作。圖6的塊610參考描述目標(biāo)權(quán)重計(jì)算的圖10A。圖10A在本專利的配置改變部分詳細(xì)解釋。
從圖10A的邏輯返回之后,設(shè)置初始和當(dāng)前權(quán)重2930和2906到目標(biāo)權(quán)重[塊625]。對(duì)每個(gè)節(jié)點(diǎn),在當(dāng)前KCBN組中,設(shè)置它的當(dāng)前和轉(zhuǎn)換權(quán)重等于目標(biāo)權(quán)重(見圖30的3015)[塊635]。轉(zhuǎn)換權(quán)重、當(dāng)前權(quán)重和目標(biāo)權(quán)重的相互影響在與圖7-9相關(guān)聯(lián)的文字中詳細(xì)解釋。初始權(quán)重屬于本地節(jié)點(diǎn)指定,它在伴隨圖26-28的文字中描述。所有上面的處理必須在其余IPL處理之前發(fā)生[塊640],它將包括由操作系統(tǒng)136分派線程和使本地節(jié)點(diǎn)能夠移動(dòng)。另外,它可以包括基于目標(biāo)權(quán)重的操作系統(tǒng)/內(nèi)核資源的節(jié)點(diǎn)分配。IPL處理在塊645結(jié)束。
配置改變?nèi)鐚⒃陔S后的段落中更詳細(xì)描述的,由對(duì)系統(tǒng)可用的處理器和存儲(chǔ)器在節(jié)點(diǎn)基礎(chǔ)上驅(qū)動(dòng)目標(biāo)權(quán)重。在那個(gè)特定系統(tǒng)提出(bring-up)期間,為每個(gè)系統(tǒng)建立目標(biāo)權(quán)重。它們不改變除非/直到系統(tǒng)內(nèi)發(fā)生配置改變。然后,這里請(qǐng)讀者假定已經(jīng)發(fā)生配置改變。這個(gè)改變由圖7的塊700表示。改變的細(xì)節(jié)對(duì)優(yōu)選實(shí)施例的解釋并不重要,但是這樣的改變的例子可以是利用節(jié)點(diǎn)的兩個(gè)處理器而不是三個(gè)重新配置系統(tǒng)。當(dāng)節(jié)點(diǎn)平衡器235接收到配置改變的通知[塊700]時(shí),節(jié)點(diǎn)平衡器235進(jìn)行得到當(dāng)前權(quán)重的拷貝[塊710]。
當(dāng)前權(quán)重表示系統(tǒng)內(nèi)工作的實(shí)際分配。圖10C和10D上顯示優(yōu)選實(shí)施例中使用的獲得當(dāng)前權(quán)重的機(jī)制。圖10C中采取的第一個(gè)步驟是當(dāng)前權(quán)重標(biāo)識(shí)符(CWID)的提取[塊1048],接下來是當(dāng)前權(quán)重間隔號(hào)(CWIN)的提取[塊1049]。當(dāng)前權(quán)重只對(duì)一個(gè)間隔有效,并且那之后它們期滿,并且必須根據(jù)最近的間隔重新計(jì)算。CWID 2911包含當(dāng)前權(quán)重對(duì)其有效的間隔號(hào)。如果CWID2911等于CWIN 2908,那么當(dāng)前權(quán)重有效;如果否,那么當(dāng)前權(quán)重已經(jīng)期滿并且必須重新計(jì)算。簡(jiǎn)要參考圖29A,說明關(guān)于當(dāng)前權(quán)重處理的信息。連同CWID 2911和CWIN 2908一起,說明當(dāng)前權(quán)重調(diào)用計(jì)數(shù)(CWIC)2910和SET0和SET1。每組包括分派器約定百分比積累器(DCPA)和最近執(zhí)行周期計(jì)數(shù)(RECC)。CWIC 2910用于確定何時(shí)CWI已經(jīng)期滿。DCPA信息屬于優(yōu)選實(shí)施例的工作重新分配和本地節(jié)點(diǎn)指定方面,因此與那個(gè)討論一起描述。圖29A上也顯示當(dāng)前權(quán)重2906和DCP 2907。當(dāng)前權(quán)重2906用于優(yōu)選實(shí)施例的這個(gè)方面-現(xiàn)在正在描述的KCBN邏輯,而DCP 2907用于優(yōu)選實(shí)施例的工作重新分配和本地節(jié)點(diǎn)指定方面。
現(xiàn)在返回圖10C,在塊1049中提取CWIN 2908之后,節(jié)點(diǎn)平衡器235首先確定是否CWID 2911等于CWIN 2908。如果它們相等,那么節(jié)點(diǎn)平衡器235前進(jìn)到圖10D的塊1061(這個(gè)處理隨后在接下來的段落中描述)。如果它們不相等,那么節(jié)點(diǎn)平衡器235測(cè)試CWIN 2908,確定它是奇還是偶[塊1050]。如果是奇,就從SET1提取RECC[塊1051]和DCPA[塊1054](見圖29A),但是如果CWIN 2908是偶,就從SET0提取RECC[塊1052]和DCPA[塊1056]。如提到的,分派處理器230非常頻繁地運(yùn)行,并且在本地節(jié)點(diǎn)的基礎(chǔ)上積累處理器執(zhí)行周期作為它的部分功能。然后在每CWI的末尾,這些周期計(jì)數(shù)和DCP由監(jiān)控器處理器225獲得,并且在節(jié)點(diǎn)基礎(chǔ)上存儲(chǔ)在RECC和DCPA。監(jiān)控器處理器225還增大CWIN,它在活躍與不活躍之間翻轉(zhuǎn)組,并且反之亦然(這個(gè)在圖11和14的討論中詳細(xì)描述)。然后節(jié)點(diǎn)平衡器235再次提取CWIN 2908[塊1058],并且確定從上一次提取以來它是否已經(jīng)改變[塊1062]。因?yàn)檎谔崛‘?dāng)前RECC和DCPA時(shí),CWI可能已期滿,原子性是個(gè)問題。因此,這些步驟對(duì)確保從活躍組提取RECC和DCPA信息是必要的。如果CWIN 2908已經(jīng)改變,那么重復(fù)上述過程(見圖10D的塊1062和1063),直到節(jié)點(diǎn)平衡器235確定CWIN 2908未改變。
現(xiàn)在移到圖10D,當(dāng)節(jié)點(diǎn)平衡器235確定CWIN 2908未從上一次提取改變[塊1062]時(shí),通過用于每個(gè)節(jié)點(diǎn)的RECC除以總的RECC,節(jié)點(diǎn)平衡器235為每個(gè)節(jié)點(diǎn)計(jì)算當(dāng)前權(quán)重[塊1064]。這產(chǎn)生由每個(gè)節(jié)點(diǎn)實(shí)際正在執(zhí)行的當(dāng)前工作的比例,因此它們表示每個(gè)本地節(jié)點(diǎn)承載的總的工作負(fù)載的實(shí)際份額。然后當(dāng)前權(quán)重存儲(chǔ)在圖29的當(dāng)前權(quán)重組2906,而DCP存儲(chǔ)在圖29的DCP組2907。一旦計(jì)算和存儲(chǔ)了當(dāng)前權(quán)重,就設(shè)置CWID 2911等于提取的CWIN。然后從當(dāng)前權(quán)重組2906提取當(dāng)前權(quán)重,以返回到圖10C和10D的邏輯的調(diào)用者[塊1066]。再次為了返回DCP到圖10C和10D的邏輯的調(diào)用者,在塊1070也從DCP 2907提取DCP。最后,在塊1072中再次提取CWIN 2908,并且在塊1074對(duì)上一次提取的版本進(jìn)行測(cè)試。如果兩個(gè)值不同,通過在圖10C的塊1057中繼續(xù),重復(fù)處理。
現(xiàn)在返回到圖7,節(jié)點(diǎn)平衡器235接下來將確定新的目標(biāo)權(quán)重[塊715]。這里,自然假定由于配置改變,目標(biāo)權(quán)重已經(jīng)改變。在圖10A的第一步[塊10021,為每個(gè)節(jié)點(diǎn)確定系統(tǒng)內(nèi)處理器的數(shù)目和存儲(chǔ)器的數(shù)量。在優(yōu)選實(shí)施例中,在系統(tǒng)提出期間,這個(gè)信息存儲(chǔ)在基于節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中(見圖30的3015和3020)。請(qǐng)讀者回憶優(yōu)選實(shí)施例的節(jié)點(diǎn)可以具有零個(gè)或更多處理器。然后在塊1004中確定整個(gè)系統(tǒng)的處理器的總數(shù)目和存儲(chǔ)器的總數(shù)量。一旦確定節(jié)點(diǎn)的總數(shù),將識(shí)別出目標(biāo)權(quán)重的非活躍組(即,如果TWMN 2920是奇,就是SET0;如果TWMN 2920是偶,就是SET1)。非活躍組將用于計(jì)算一組新的目標(biāo)權(quán)重(即,當(dāng)它們改變時(shí))。然后,當(dāng)TWMN 2920增大時(shí),它具有改變哪組活躍的作用。
一旦已經(jīng)識(shí)別出目標(biāo)權(quán)重的非活躍組,節(jié)點(diǎn)平衡器235接下來確定用專用還是共享處理器配置系統(tǒng)。如果系統(tǒng)是未分區(qū)的計(jì)算機(jī)裝置,那么由定義它的處理器是專用的,因?yàn)闆]有可能與其共享的其它系統(tǒng)(如圖1A中)。但是,邏輯分區(qū)的系統(tǒng)可以使用共享或者專用處理器。簡(jiǎn)要參考圖1B,節(jié)點(diǎn)跨越多個(gè)分區(qū)的事實(shí)并不必然意味著各分區(qū)正共享節(jié)點(diǎn)上的存儲(chǔ)器。給定節(jié)點(diǎn)上的處理器可以在多于一個(gè)分區(qū)間共享,或者各分區(qū)可以由一個(gè)或更多的專用處理器支持。具有專用處理器的分區(qū)單獨(dú)使用那些處理器,直到如通知它配置改變的時(shí)候。具有共享處理器的分區(qū)可以動(dòng)態(tài)地使用計(jì)算機(jī)裝置上任何可用的處理器,而沒有任何這樣的通知。由配置管理器240使系統(tǒng)處理器的性質(zhì)對(duì)節(jié)點(diǎn)平衡器235可用。如果系統(tǒng)使用共亭處理器,就使非活躍組中用于每個(gè)節(jié)點(diǎn)的目標(biāo)權(quán)重等于那個(gè)節(jié)點(diǎn)上系統(tǒng)可用存儲(chǔ)器占跨越所有節(jié)點(diǎn)的系統(tǒng)可用存儲(chǔ)器總量的比例[塊1006]。然后在塊1020中增大TWMN 2920,這具有改變非活躍目標(biāo)權(quán)重組為活躍目標(biāo)權(quán)重組的作用。
如果系統(tǒng)不使用共享處理器,[塊1008],節(jié)點(diǎn)平衡器235就確定系統(tǒng)是否具有任何處理器和存儲(chǔ)器兩個(gè)都包含的節(jié)點(diǎn)[塊1012]。確定沒有(即,沒有處理器和存儲(chǔ)器兩個(gè)都包含的節(jié)點(diǎn))不是典型的,但是可能的。例如,可能配置優(yōu)選實(shí)施例的計(jì)算機(jī)系統(tǒng)100的分區(qū),以具有包含若干處理器且沒有存儲(chǔ)器的節(jié)點(diǎn),以及包含存儲(chǔ)器且沒有處理器的其它節(jié)點(diǎn)。如果確實(shí)是這種情況,節(jié)點(diǎn)平衡器235設(shè)置用于非活躍目標(biāo)權(quán)重組中每個(gè)節(jié)點(diǎn)的目標(biāo)權(quán)重等于那個(gè)節(jié)點(diǎn)上的處理器占跨越所有節(jié)點(diǎn)的系統(tǒng)可用的處理器總數(shù)的比例,使得沒有處理器的節(jié)點(diǎn)將零作為它們的目標(biāo)權(quán)重[塊1016]。然后在塊1020增大TWMN 2920,這(再次)具有改變非活躍目標(biāo)權(quán)重組為活躍目標(biāo)權(quán)重組的作用[塊1020]。
如果在塊1012,節(jié)點(diǎn)平衡器235確定至少一個(gè)節(jié)點(diǎn)具有結(jié)合一些存儲(chǔ)器的至少一個(gè)處理器,那么節(jié)點(diǎn)平衡器235接下來將確定位于節(jié)點(diǎn)上的處理器總數(shù),該節(jié)點(diǎn)具有至少一個(gè)處理器和若干存儲(chǔ)器[塊1014]。然后更新目標(biāo)權(quán)重的非活躍組,使得用于具有至少一個(gè)處理器和若干存儲(chǔ)器的節(jié)點(diǎn)的目標(biāo)權(quán)重被設(shè)置為它們各自的處理器占前述處理器總數(shù)的比例[塊1018]。非活躍組內(nèi)用于沒有處理器或存儲(chǔ)器的節(jié)點(diǎn)的目標(biāo)權(quán)重設(shè)置為零[塊1022]。然后在塊1020增大TWMN 2920,這(再次)具有改變非活躍目標(biāo)權(quán)重組為活躍目標(biāo)權(quán)重組的作用[塊1020]。
不管通過圖10A的流程圖采取的路徑,節(jié)點(diǎn)平衡器235將最終復(fù)制目標(biāo)權(quán)重、處理器數(shù)目和存儲(chǔ)器數(shù)量到用于每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)錨(anchor)結(jié)構(gòu)中[塊1024]。如將在隨后的段落中描述的,這樣做使能有意義的內(nèi)核部件平衡通知。圖30顯示優(yōu)選實(shí)施例中使用的節(jié)點(diǎn)錨結(jié)構(gòu)。每個(gè)節(jié)點(diǎn)錨結(jié)構(gòu)包括標(biāo)識(shí)符 、當(dāng)前權(quán)重、處理器和存儲(chǔ)器 ,以及先前的權(quán)重、處理器和存儲(chǔ)器 。在節(jié)點(diǎn)錨結(jié)構(gòu)3000中也顯示一系列資源錨。這些錨由登記的部件使用,以存儲(chǔ)資源或到資源的指針,該資源或到資源的指針由登記的部件根據(jù)整個(gè)系統(tǒng)的工作分配在節(jié)點(diǎn)的基礎(chǔ)上分配。此后面的概念將在隨后的段落中將更詳細(xì)地解釋。
現(xiàn)在返回到圖7,節(jié)點(diǎn)平衡器235然后計(jì)算當(dāng)前權(quán)重和目標(biāo)權(quán)重之間的權(quán)重差分[塊730]。差分是用于每個(gè)節(jié)點(diǎn)的差別的絕對(duì)值的和。節(jié)點(diǎn)平衡器235處理在圖8的塊800繼續(xù)。權(quán)重差分閾值(WDT)設(shè)置為剛計(jì)算的差分的3/4。圖29B顯示W(wǎng)DT 2924。WDT在適當(dāng)?shù)奈恢米R(shí)別事實(shí)實(shí)際的工作分配可能與新的希望的工作分配顯著不同。在系統(tǒng)將行動(dòng)以調(diào)整當(dāng)前工作分配(如由當(dāng)前權(quán)重表示的)以接近目標(biāo)權(quán)重時(shí),這樣做可能花費(fèi)相當(dāng)多時(shí)間。因此,對(duì)登記的內(nèi)核部件,根據(jù)新的目標(biāo)權(quán)重,簡(jiǎn)單地重新調(diào)整它們的資源可能是不恰當(dāng)?shù)?。因此,WDT與所謂的轉(zhuǎn)換權(quán)重一起使用,以提供登記的部件而有更逐步調(diào)整它們的資源的機(jī)會(huì)。如將討論的,在當(dāng)前權(quán)重和目標(biāo)權(quán)重間設(shè)置轉(zhuǎn)換權(quán)重,以為登記的部件提供中間平衡點(diǎn)。在優(yōu)選實(shí)施例中使用WDT,以確定何時(shí)當(dāng)前和目標(biāo)權(quán)重間的差別足夠大到準(zhǔn)許使用轉(zhuǎn)換權(quán)重。如將在接下來的討論中所見,優(yōu)選實(shí)施例的WDT可以是與權(quán)重差分的3/4同樣大到與值1/64(.015625)同樣小。
設(shè)置WDT 2924到差分的3/4后,節(jié)點(diǎn)平衡器235確定是否差分小于1/32[塊805]。如果否,節(jié)點(diǎn)平衡器235從差分減去1/32,并且確定是否結(jié)果小于WDT 2924。如果結(jié)果小于WDT 2924,WDT 2924復(fù)位到比差分小1/32。不管塊805中測(cè)試的結(jié)果,節(jié)點(diǎn)平衡器235最終確定是否WDT 2924是1/64或更小[塊820]。如果WDT 2924是1/64或更小,不準(zhǔn)許使用轉(zhuǎn)換權(quán)重,這樣設(shè)置WDT 2924到零,并且使當(dāng)前組中的KCBN轉(zhuǎn)換權(quán)重(3015)等于目標(biāo)權(quán)重。如果節(jié)點(diǎn)平衡器235在塊820確定WDT 2924大于或等于1/64,節(jié)點(diǎn)平衡器235設(shè)置KCBN轉(zhuǎn)換權(quán)重的當(dāng)前組(3015)到當(dāng)前權(quán)重和(新的)目標(biāo)權(quán)重間的值。在優(yōu)選實(shí)施例中,這根據(jù)下面的公式完成。
轉(zhuǎn)換=目標(biāo)+(當(dāng)前-目標(biāo))*WDT/權(quán)重差分然后,節(jié)點(diǎn)平衡器235的處理在圖9的塊900繼續(xù)進(jìn)行。在那里設(shè)置KCBN當(dāng)前權(quán)重的當(dāng)前組(3015)到當(dāng)前權(quán)重。然后調(diào)用為每個(gè)登記部件指定的內(nèi)核部件方法(見圖31)(3105)[塊905]。
被調(diào)用后(見圖9的塊905),內(nèi)核部件方法可以訪問存儲(chǔ)在每個(gè)節(jié)點(diǎn)上的KCBN信息。當(dāng)前、轉(zhuǎn)換和目標(biāo)權(quán)重以及那些權(quán)重的先前值的拷貝對(duì)被調(diào)用的方法可用。當(dāng)前和先前處理器的數(shù)目和存儲(chǔ)器的數(shù)量也對(duì)被調(diào)用的方法可用。所有這些信息在適當(dāng)?shù)奈恢茫试S被調(diào)用的方法確定如何最好地利用它的資源。可以利用上述通知服務(wù)的內(nèi)核部件的例子是集成文件系統(tǒng)(IFS)。文件系統(tǒng)通常將利用預(yù)創(chuàng)建線程組處理不同的功能。例如,IFS可以具有一組執(zhí)行硬盤驅(qū)動(dòng)器(HDD)讀的線程,以及另一組執(zhí)行HDD寫的線程。為最好地利用這些線程,IFS將使用優(yōu)選實(shí)施例,以與工作分配一致的方式最好地分配線程。如果調(diào)用時(shí),與通過考慮起作用的KCBN權(quán)重確定的IFS相關(guān)聯(lián)的內(nèi)核部件方法正從第一個(gè)節(jié)點(diǎn)移動(dòng)到第二個(gè),該方法將消滅第一個(gè)節(jié)點(diǎn)上它的一些或全部預(yù)創(chuàng)建線程,并且在第二個(gè)上創(chuàng)建一些。然后KCBN信息的當(dāng)前組已經(jīng)復(fù)制到KCBN信息的先前組之后,對(duì)內(nèi)核部件平衡通知的配置改變方面的處理結(jié)束。
轉(zhuǎn)換權(quán)重重新計(jì)算本專利的先前部分是關(guān)于配置改變發(fā)生時(shí),優(yōu)選實(shí)施例中如何計(jì)算和設(shè)置轉(zhuǎn)換權(quán)重。通過所描述的,本專利的這部分是關(guān)于如何周期性地重新計(jì)算轉(zhuǎn)換權(quán)重,以通過周期性的通知提供逐步的重新平衡。圖11-14顯示優(yōu)選實(shí)施例的監(jiān)控器處理器225中使用的步驟。如上面提到的,優(yōu)選實(shí)施例的監(jiān)控器處理器225每秒執(zhí)行一次,并且它具有屬于優(yōu)選實(shí)施例的不同方面的功能。但是,為了這個(gè)特定的討論(即轉(zhuǎn)換權(quán)重重新計(jì)算),只有這些方面的某些是令人感興趣的。因此,只研究某些圖和處理塊而跳過其它,以利于隨后段落中的處理。圖11上,處理塊1105-1114屬于優(yōu)選實(shí)施例的其它方面。在圖11的塊1116中,監(jiān)控器處理器225增大當(dāng)前權(quán)重調(diào)用計(jì)數(shù)(CWIC),并且因?yàn)楸O(jiān)控器處理器225每秒執(zhí)行,CWIC每秒增大。(CWIC 2910在圖29A上顯示。)接下來監(jiān)控器處理器225確定對(duì)于該間隔是否已經(jīng)達(dá)到最大調(diào)用計(jì)數(shù)[塊1120]。在優(yōu)選實(shí)施例中,最大調(diào)用計(jì)數(shù)是7。計(jì)數(shù)7發(fā)信號(hào)通知當(dāng)前權(quán)重間隔的結(jié)束。
在圖14上顯示完成的當(dāng)前權(quán)重間隔的監(jiān)控器處理器225處理。在步驟1405,歸一化非活躍組中的DCP積累(見圖29A的DCPA組2912和2916)。(上面通過檢查CWIN 2908,確定哪個(gè)DCPA組是活躍的確定,奇CWIN 2908是SET0,而偶CWIN 2908是SET1。)在優(yōu)選實(shí)施例中,通過積累除以間隔中的調(diào)用數(shù)(即7)處理這個(gè)歸一化。這里應(yīng)該注意,圖14上顯示的某些步驟(即塊1405和1435)不屬于內(nèi)核部件平衡通知。但是,這里討論這個(gè)材料是因?yàn)楫?dāng)前權(quán)重間隔結(jié)束時(shí)執(zhí)行這些步驟。
監(jiān)控器處理器225接下來提取由分派處理器230收集的當(dāng)前權(quán)重周期計(jì)數(shù)[塊1410]。在優(yōu)選實(shí)施例中,這些計(jì)數(shù)在本地節(jié)點(diǎn)基礎(chǔ)上存儲(chǔ)于基于處理器的數(shù)據(jù)結(jié)構(gòu)中(未顯示)。然后,監(jiān)控器處理器225從剛剛得到的周期計(jì)數(shù)減去先前存儲(chǔ)的非活躍組中的周期計(jì)數(shù)(見圖29A的RECC),達(dá)到期滿CWI期間用于每個(gè)本地節(jié)點(diǎn)的執(zhí)行的周期數(shù)。然后,這個(gè)結(jié)果存儲(chǔ)回非活躍組中,代替先前的值[塊1415]。在塊1420中,從活躍組提取RECC,除以2,然后添加到非活躍組中的值(在節(jié)點(diǎn)基礎(chǔ)上)。這產(chǎn)生在優(yōu)選實(shí)施例中被視為最近執(zhí)行的周期計(jì)數(shù)的值。
然后,在塊1425中增大CWIN 2908,將非活躍組(即具有最近計(jì)數(shù)的組)轉(zhuǎn)換為活躍組。然后,在塊1430中設(shè)置CWIC 2910到零,作為到新的CWI的開始。然后,監(jiān)控器處理器225存儲(chǔ)在塊1410中收集的計(jì)數(shù)到新轉(zhuǎn)換的非活躍組,為這些相同計(jì)算構(gòu)成基礎(chǔ)(即,在下一個(gè)CWI的結(jié)束時(shí))[塊1440]。然后,在塊1450相對(duì)零測(cè)試WDT 2924。非零WDT和當(dāng)前權(quán)重間隔的結(jié)束的結(jié)合發(fā)信號(hào)通知這樣的需要確定是否需要重新計(jì)算轉(zhuǎn)換權(quán)重。圖15和8概述優(yōu)選實(shí)施例中使用的轉(zhuǎn)換權(quán)重重新計(jì)算步驟。首先參考圖15,在塊1500中得到目標(biāo)權(quán)重。
在優(yōu)選實(shí)施例中,用于獲得目標(biāo)權(quán)重的機(jī)制由圖10B表示。在圖10B的塊1030中,提取目標(biāo)權(quán)重修改數(shù)(TWMN)?,F(xiàn)在參考圖29A,顯示目標(biāo)權(quán)重組2922和目標(biāo)權(quán)重修改數(shù)(TWMN)2920。如所示,優(yōu)選實(shí)施例中使用兩組目標(biāo)權(quán)重(SET0和SET1)。TWMN 2920用于確定哪個(gè)組是活躍組和哪個(gè)組是非活躍組。如果TWMN 2920是奇數(shù),SET1是活躍組而SET0是非活躍組。如果TWMN 2920是偶數(shù),SET0是活躍組而SET1是非活躍組。然后,節(jié)點(diǎn)平衡器235測(cè)試TWMN 2920,確定它是奇還是偶[塊1032]。如果TWMN2920是偶,從SET0提取用于每個(gè)節(jié)點(diǎn)的目標(biāo)權(quán)重[塊1034],但是如果TWMN2920是奇,從SET1提取用于每個(gè)節(jié)點(diǎn)的目標(biāo)權(quán)重[塊1036]。然后,在塊1038中再次提取TWMN 2920,并且在塊1040測(cè)試變化。如果TWMN 2920未改變,先前提取的目標(biāo)權(quán)重組在塊1042被返回。如果TWMN 2920已經(jīng)改變,重復(fù)測(cè)試奇/偶、組提取和變化測(cè)試的步驟,直到發(fā)現(xiàn)TWMN 2920未改變。發(fā)現(xiàn)TWMN 2920處于未改變狀態(tài)的要求是為了原子性目的。本專利的重新平衡工作和本地節(jié)點(diǎn)指定部分概括這樣的實(shí)例節(jié)點(diǎn)平衡器235正在檢索目標(biāo)權(quán)重值,同時(shí)TWMN 2920可能正在增大。
現(xiàn)在返回到圖15,在塊1505得到當(dāng)前權(quán)重。對(duì)于有關(guān)優(yōu)選實(shí)施例中得到當(dāng)前權(quán)重使用的步驟的細(xì)節(jié),請(qǐng)參考前面圖10C的討論。然后,計(jì)算當(dāng)前權(quán)重和目標(biāo)權(quán)重間的權(quán)重差分。如前面所述,差分是用于每個(gè)節(jié)點(diǎn)的權(quán)重差別的絕對(duì)值的和。然后,相對(duì)WDT 2924測(cè)試此差分。如果差分大于WDT2924,不需要重新計(jì)算轉(zhuǎn)換權(quán)重。但是,如果差分小于或等于WDT 2924,使用與圖8和9相關(guān)聯(lián)的上述處理重新計(jì)算轉(zhuǎn)換權(quán)重。對(duì)于更多信息,請(qǐng)參考那些圖的描述。本地節(jié)點(diǎn)指定簡(jiǎn)要地返回圖2,優(yōu)選實(shí)施例中使用TCM 205創(chuàng)建可執(zhí)行線程,以及必要的線程控制結(jié)構(gòu)。創(chuàng)建過程的一部分是指定本地節(jié)點(diǎn)給這些可執(zhí)行線程。本地節(jié)點(diǎn)指定重要,是因?yàn)榭赡軙r(shí)TDM 215偏愛執(zhí)行它們的指定本地節(jié)點(diǎn)上的線程,并且可能時(shí)TMM 217偏愛在它們的指定本地節(jié)點(diǎn)上為線程分配存儲(chǔ)器。這種偏愛意味屬于整個(gè)系統(tǒng)利用和資源分配。在優(yōu)選實(shí)施例中,指定本地節(jié)點(diǎn)給線程意味著系統(tǒng)將優(yōu)先執(zhí)行它的本地節(jié)點(diǎn)上的線程并分配它的本地節(jié)點(diǎn)上的存儲(chǔ)器。在這里這稱為節(jié)點(diǎn)親合。自然,如果只用一個(gè)處理器配置特定節(jié)點(diǎn),這個(gè)親合變?yōu)樘幚砥饔H合。另外,本領(lǐng)域技術(shù)人員將知道本發(fā)明不限于由優(yōu)選實(shí)施例提供的特定類型的親合。例如,實(shí)際上要求總在它的本地節(jié)點(diǎn)上執(zhí)行線程的緊密親合也將屬于本發(fā)明的精神和范圍。
如上面討論的,優(yōu)選實(shí)施例中使用目標(biāo)權(quán)重特征化整個(gè)系統(tǒng)希望的工作分配。當(dāng)前權(quán)重用于特征化整個(gè)系統(tǒng)當(dāng)前的工作分配。如果每個(gè)線程做相同數(shù)量的工作,為新線程確定本地節(jié)點(diǎn)將是很直接的。即,根據(jù)保持分配給每個(gè)節(jié)點(diǎn)的現(xiàn)存線程數(shù)目與目標(biāo)權(quán)重成相同比例,將簡(jiǎn)單地指定本地節(jié)點(diǎn)。雖然事實(shí)是不同線程做不同數(shù)量的工作,并且不可能提早知道線程將做多少工作。因此,優(yōu)選實(shí)施例根據(jù)目標(biāo)權(quán)重和當(dāng)前權(quán)重創(chuàng)建初始權(quán)重并指定本地節(jié)點(diǎn),以便保持分配給每個(gè)的線程數(shù)目與初始權(quán)重成相同比例。當(dāng)前權(quán)重超過目標(biāo)權(quán)重的節(jié)點(diǎn)使它的初始權(quán)重設(shè)置得比它的目標(biāo)權(quán)重略小(即,因?yàn)樗呀?jīng)具有多于它的工作負(fù)載份額),以及當(dāng)前權(quán)重低于其目標(biāo)權(quán)重的節(jié)點(diǎn)使它的初始權(quán)重設(shè)置得比它的目標(biāo)權(quán)重略大(即,因?yàn)樗F(xiàn)在具有少于它的工作負(fù)載份額)。當(dāng)為每個(gè)節(jié)點(diǎn)計(jì)算初始權(quán)重時(shí),系統(tǒng)越忙,當(dāng)前權(quán)重被給予越大的影響。
圖26顯示本地節(jié)點(diǎn)指定的高級(jí)步驟。TCM 205在處理塊2605中為每個(gè)節(jié)點(diǎn)獲得初始權(quán)重。圖27和28概括在優(yōu)選實(shí)施例中這個(gè)過程如何工作。現(xiàn)在參考圖27,TCM 205首先在塊2705中提取初始權(quán)重標(biāo)識(shí)符(IWID)。圖29B顯示IWID 2928和初始權(quán)重2930。然后,TCM 205在塊2715確定是否IWID匹配CWIN之前,在塊2710中提取CWIN 2908。如果IWID不匹配CWIN,TCM 205前進(jìn)到圖28的塊2800,計(jì)算新的初始權(quán)重,因?yàn)楝F(xiàn)存的初始權(quán)重過期了。
當(dāng)前權(quán)重和CWID以及DCP在塊2805中一起獲得。請(qǐng)參考上面圖10C的用于解釋這些步驟的描述。然后,將在塊2710中提取的CWIN的值設(shè)置為塊2810中的CWID,使得它表示與當(dāng)前權(quán)重相關(guān)聯(lián)的間隔號(hào)。然后在塊2815中得到目標(biāo)權(quán)重。請(qǐng)參考上面圖10B的用于解釋這些步驟的描述。
以塊2820中的第一個(gè)節(jié)點(diǎn)開始,TCM 205現(xiàn)在開始結(jié)合目標(biāo)和當(dāng)前權(quán)重,為每個(gè)節(jié)點(diǎn)產(chǎn)生初始權(quán)重。在目標(biāo)和當(dāng)前權(quán)重的結(jié)合中,對(duì)給定節(jié)點(diǎn),DCP越高,在為那個(gè)節(jié)點(diǎn)產(chǎn)生的初始權(quán)重中當(dāng)前權(quán)重將具有越大的影響。
結(jié)合權(quán)重的第一部分是計(jì)算將控制當(dāng)前權(quán)重的影響的乘數(shù)。如果DCP是75%或更小[塊2825],通過在塊2850中設(shè)置乘數(shù)等于DCP的立方除以75%的平方,當(dāng)前權(quán)重的影響將被抑制。否則如果DCP小于100%[塊2835],通過在塊2855中設(shè)置乘數(shù)等于100%減去((100%減去DCP的立方)除以(25%的平方)),當(dāng)前權(quán)重的影響將被擴(kuò)大。否則,如果DCP是100%或更大[塊2835],通過在塊2840中設(shè)置乘數(shù)等于100%,當(dāng)前權(quán)重的影響將被最大化。不管采取的路徑,乘數(shù)將在0到100%的范圍內(nèi),并在下面的第二部分使用。
結(jié)合權(quán)重的第二部分是根據(jù)允許當(dāng)前權(quán)重具有的影響大小計(jì)算除數(shù),當(dāng)前權(quán)重比目標(biāo)權(quán)重小時(shí),該除數(shù)將允許初始權(quán)重比目標(biāo)權(quán)重大,而當(dāng)前權(quán)重比目標(biāo)權(quán)重大時(shí),該除數(shù)將允許初始權(quán)重比目標(biāo)權(quán)重小。TCM 205在塊2860中計(jì)算除數(shù)為目標(biāo)權(quán)重加上((當(dāng)前權(quán)重減去目標(biāo)權(quán)重)乘以乘數(shù))。然后,產(chǎn)生的除數(shù)將依賴于乘數(shù),在目標(biāo)權(quán)重和當(dāng)前權(quán)重之間的范圍變化,并且在下面的第三部分使用。
第三部分是通過目標(biāo)權(quán)重的平方除以除數(shù),計(jì)算未歸一化的初始權(quán)重[塊2875]。這將具有這樣的作用當(dāng)前權(quán)重更小時(shí),使初始權(quán)重更大,并且反之亦然。為了避免潛在的被零除,TCM 205檢查除數(shù)為零[塊2870],并且如果它是零,它就在塊2865簡(jiǎn)單地設(shè)置初始權(quán)重等于目標(biāo)權(quán)重。然后,TCM 205檢查是否有更多的節(jié)點(diǎn)要處理[塊2890],并且如果是這樣,它對(duì)每個(gè)剩余的節(jié)點(diǎn)重復(fù)上面的處理。當(dāng)TCM 205確定已經(jīng)考慮了所有節(jié)點(diǎn)時(shí),它前進(jìn)到圖27的塊2750。通過連接塊2750返回到圖27的邏輯之后,TCM 205歸一化未歸一化的初始權(quán)重,并且在初始權(quán)重2930中存儲(chǔ)它們[塊2745]。在優(yōu)選實(shí)施例中,通過對(duì)所有節(jié)點(diǎn)每個(gè)權(quán)重除以所有初始權(quán)重的和,歸一化初始權(quán)重。然后,在塊2735中設(shè)置IWID到CWID,以指定其間初始權(quán)重有效的當(dāng)前權(quán)重間隔。
當(dāng)前描述的執(zhí)行路徑和來自塊2715的是分支(見上面的描述)在塊2725會(huì)聚。在那里,TCM提取初始權(quán)重,然后再次進(jìn)行提取CWIN。如果新提取的CWIN不同于先前提取的CWIN,那么初始權(quán)重過期,并且先前描述的初始權(quán)重計(jì)算步驟隨圖28的塊2805重新開始。如果新提取的CWIN與先前提取的CWIN相同,提取的初始權(quán)重是最新的,并返回到圖26的邏輯。
現(xiàn)在返回到圖26的塊2610,TCM 205為每個(gè)節(jié)點(diǎn)確定當(dāng)前存在的線程數(shù)。在優(yōu)選實(shí)施例中,通過創(chuàng)建線程時(shí)增大計(jì)數(shù)器,消滅線程時(shí)減小它,內(nèi)核服務(wù)137在節(jié)點(diǎn)基礎(chǔ)上跟蹤現(xiàn)存線程。然后,通過對(duì)計(jì)數(shù)器求和確定線程的總數(shù)[塊2615]。然后在塊2620,在節(jié)點(diǎn)基礎(chǔ)上確定線程的目標(biāo)數(shù)。在優(yōu)選實(shí)施例中,這通過線程總數(shù)乘以每個(gè)節(jié)點(diǎn)的初始權(quán)重完成。具有實(shí)際線程和目標(biāo)線程間最大短缺(short fall)的節(jié)點(diǎn)是為剛創(chuàng)建的線程選擇作為本地的節(jié)點(diǎn)[塊2622]。
工作重新分配概覽上面我們討論了本發(fā)明的優(yōu)選實(shí)施例如何能夠檢測(cè)系統(tǒng)內(nèi)的工作不平衡并進(jìn)行適當(dāng)?shù)恼{(diào)整。在優(yōu)選實(shí)施例中,這通過監(jiān)控器處理器225、分派處理器230和節(jié)點(diǎn)平衡器235之間的一系列狀態(tài)驅(qū)動(dòng)的相互作用而實(shí)現(xiàn)。為了工作重新分配而在優(yōu)選實(shí)施例中使用的狀態(tài)稱為觀察平衡、記錄周期和移動(dòng)線程。由系統(tǒng)管理員設(shè)置觀察平衡狀態(tài),它是起點(diǎn)。因此,系統(tǒng)管理員使系統(tǒng)能夠確定是否存在工作平衡問題。當(dāng)狀態(tài)設(shè)置為觀察平衡時(shí),監(jiān)控器處理器225跟蹤在這里稱為觀察平衡間隔(OBI)的53(53)秒時(shí)段。一定數(shù)目的間隔已經(jīng)過去之后,在優(yōu)選實(shí)施例的情況下是6個(gè),監(jiān)控器處理器225通知節(jié)點(diǎn)平衡器235。
當(dāng)節(jié)點(diǎn)平衡器235醒來時(shí),它注意到狀態(tài)被設(shè)置為觀察平衡。通過對(duì)系統(tǒng)是否不平衡進(jìn)行高級(jí)分析,節(jié)點(diǎn)平衡器235進(jìn)行響應(yīng)。雖然在隨后的段落中更詳細(xì)地解釋這個(gè)確定,這里應(yīng)該注意,運(yùn)行非常頻繁的分派處理器230正在跟蹤在本地節(jié)點(diǎn)基礎(chǔ)上執(zhí)行的周期數(shù)。這個(gè)原始周期數(shù)由節(jié)點(diǎn)平衡器235使用,作出它的高級(jí)平衡確定。當(dāng)節(jié)點(diǎn)平衡器235確定系統(tǒng)的工作負(fù)載可能不平衡時(shí),它設(shè)置狀態(tài)到記錄周期,并因此通知監(jiān)控器處理器225。
然后,監(jiān)控器處理器225認(rèn)識(shí)到狀態(tài)已經(jīng)變到記錄周期,并且經(jīng)過單個(gè)記錄周期間隔的跟蹤之后,設(shè)置狀態(tài)到移動(dòng)線程并通知節(jié)點(diǎn)平衡器235。同時(shí)分派處理器230認(rèn)識(shí)到狀態(tài)已經(jīng)由節(jié)點(diǎn)平衡器235設(shè)置為記錄周期。通過在線程基礎(chǔ)上和本地節(jié)點(diǎn)基礎(chǔ)上收集周期數(shù)據(jù),分派處理器230進(jìn)行響應(yīng)。當(dāng)它隨后確定狀態(tài)已經(jīng)變到不同于記錄周期的某狀態(tài)時(shí),分派處理器230在線程基礎(chǔ)上停止收集周期數(shù)據(jù)。
當(dāng)節(jié)點(diǎn)平衡器235從監(jiān)控器處理器225接收到前述的通知時(shí),它進(jìn)行對(duì)由分派處理器230收集的基于線程的數(shù)據(jù)進(jìn)行較低級(jí)分析。節(jié)點(diǎn)平衡器235然后雙重檢查系統(tǒng)的平衡/不平衡狀態(tài),并且在未恰當(dāng)?shù)仄胶庀到y(tǒng)的工作負(fù)載的情況下,使用基于線程的數(shù)據(jù)確定移動(dòng)哪些線程。如果節(jié)點(diǎn)平衡器235確定系統(tǒng)的工作負(fù)載未平衡,它進(jìn)行在節(jié)點(diǎn)間移動(dòng)線程,以更恰當(dāng)?shù)仄胶庀到y(tǒng)的工作負(fù)載。最后,節(jié)點(diǎn)平衡器235將狀態(tài)設(shè)置回觀察平衡,以重新開始處理。
觀察平衡狀態(tài)中的分派處理器230剛提到的事實(shí)是當(dāng)處于觀察平衡狀態(tài)時(shí),分派處理器230保存在本地節(jié)點(diǎn)基礎(chǔ)上執(zhí)行的周期數(shù)的原始計(jì)數(shù)。在圖16A上顯示這個(gè)邏輯。在圖16A上顯示分派處理器230內(nèi)與本發(fā)明的優(yōu)選實(shí)施例有關(guān)的步驟。本領(lǐng)域技術(shù)人員知道存在其它無關(guān)線程分派處理。在塊1600中,分派處理器230獲得用于將要被分派的線程的本地節(jié)點(diǎn)ID。然后,在塊1605中獲得上次執(zhí)行這個(gè)特定線程消耗的周期。然后,在本地節(jié)點(diǎn)基礎(chǔ)上添加消耗的周期計(jì)數(shù)到當(dāng)前權(quán)重周期計(jì)數(shù)累加器。這個(gè)由分派處理器230保存的計(jì)數(shù)存儲(chǔ)在基于處理器的數(shù)據(jù)結(jié)構(gòu)中(未顯示)。然后,分派器230確定它是處于觀察平衡狀態(tài)還是超出(beyond)。如果是這樣,添加上述消耗的周期到觀察平衡周期計(jì)數(shù)累加器,它是另一個(gè)由分派處理器230維護(hù)的基于處理器的數(shù)據(jù)存儲(chǔ)(未顯示)。然后分派處理器230確定是否它處于記錄周期狀態(tài)[塊1645]。因?yàn)檫@里我們處于觀察平衡狀態(tài),分派處理器230簡(jiǎn)單地在塊1640返回,在塊1640發(fā)生剩余的線程分派處理。下面關(guān)于記錄周期狀態(tài)描述圖16B的邏輯。
觀察平衡狀態(tài)中的監(jiān)控器處理器225關(guān)于內(nèi)核部件平衡通知,先前討論了圖11。在那個(gè)討論期間,提到這些處理塊的(即,監(jiān)控器處理器225的)某些屬于工作重新分配?,F(xiàn)在將描述這些塊。在塊1105中,獲得當(dāng)前分派器約定百分比。在優(yōu)選實(shí)施例中,這些通過對(duì)本發(fā)明的好處和優(yōu)勢(shì)不重要的系統(tǒng)接口獲得,因此在這里不進(jìn)一步描述。百分比表示在節(jié)點(diǎn)基礎(chǔ)上系統(tǒng)活動(dòng)性水平的指示。象RECC,通過檢查CWIN 2908識(shí)別非活躍組(見圖29A的DCPA組2912和2916)[塊1110]。如果CWIN 2908是奇,添加DCP到SET0中的DCPA;如果CWIN 2908是偶,添加DCP到SET1中的DCPA。監(jiān)控器處理器225然后確定是否CWIC 2910已經(jīng)達(dá)到它的最大值[塊1120]。如果已經(jīng)達(dá)到最大值,監(jiān)控器處理器225進(jìn)行處理完成的當(dāng)前權(quán)重間隔。這個(gè)處理前面參考圖14已經(jīng)描述(見上面)。這里請(qǐng)讀者假定完成的當(dāng)前權(quán)重間隔處理沒有爭(zhēng)議。因此,監(jiān)控器處理器225將確定當(dāng)前狀態(tài)是觀察平衡還是超出[塊1122]。
這里當(dāng)前狀態(tài)是觀察平衡,所以監(jiān)控器處理器225移動(dòng)到圖12的塊1205。在那里,監(jiān)控器處理器225計(jì)算到最舊的保存區(qū)域的索引(見圖29B,保存區(qū)域SA0-SAN,2932-2936)。在優(yōu)選實(shí)施例中,這個(gè)計(jì)算包括圖29B的提取觀察間隔號(hào)(OIN)2950和將OIN 2950除以保存區(qū)域數(shù)(即N+1),然后使用產(chǎn)生的余數(shù)作為索引。然后,監(jiān)控器處理器225在節(jié)點(diǎn)基礎(chǔ)上添加DCP到最舊的保存區(qū)域的DCPA[塊1210]。然后,增大最舊的保存區(qū)域的調(diào)用計(jì)數(shù)(IC)[塊1215]。然后,監(jiān)控器處理器225確定是否已經(jīng)達(dá)到最大調(diào)用計(jì)數(shù)[塊1220]。如果是這樣,那么觀察間隔已經(jīng)完成,這要求處理。在圖17中顯示這個(gè)處理。如果觀察間隔未完成,在圖13處理繼續(xù)。
首先轉(zhuǎn)向圖17,監(jiān)控器處理器225首先從分派處理器230獲得觀察平衡周期計(jì)數(shù),并且在節(jié)點(diǎn)基礎(chǔ)上存儲(chǔ)它們到第二舊的保存區(qū)域[塊1700]。(再次見圖29B,保存區(qū)域SA0-SAN,2932-2936。)這些值最后將變?yōu)榛A(chǔ),用于下一個(gè)觀察間隔中執(zhí)行的周期數(shù)。然后,在塊1705中,監(jiān)控器處理器225將在剛完成的觀察間隔中計(jì)算執(zhí)行的周期。在優(yōu)選實(shí)施例中,這是通過從塊1700中獲得的計(jì)數(shù)減去最舊的保存區(qū)域中的周期計(jì)數(shù)而完成的,這是用于剛完成的觀察間隔的基礎(chǔ)。然后,這個(gè)計(jì)算的結(jié)果存儲(chǔ)回最舊的保存區(qū)域中。在塊1710中,監(jiān)控器處理器225設(shè)置第二舊的保存區(qū)域的DCPA到零。這是為準(zhǔn)備用于下一個(gè)觀察間隔的積累而進(jìn)行的。然后,監(jiān)控器處理器225設(shè)置用于第二舊的保存區(qū)域的調(diào)用計(jì)數(shù)到零,再次準(zhǔn)備下一個(gè)間隔的積累[塊1715]。然后增大OIN 2950,它具有原子地改變最舊的保存區(qū)域?yàn)樽钚碌囊约暗诙f的為最舊的作用[塊1720]。
在塊1725中,監(jiān)控器處理器225確定是否OIN 2950已經(jīng)達(dá)到觀察平衡閾值。在優(yōu)選實(shí)施例中使用這個(gè)值確定何時(shí)節(jié)點(diǎn)平衡器235應(yīng)該從工作負(fù)載的觀點(diǎn)檢查系統(tǒng)的節(jié)點(diǎn)是否平衡。在優(yōu)選實(shí)施例中,這個(gè)值是6(6)。如果未達(dá)到觀察平衡閾值,監(jiān)控器處理器225返回到塊1740中圖12的邏輯。如果已經(jīng)達(dá)到觀察平衡閾值,監(jiān)控器處理器225確定是否當(dāng)前狀態(tài)是觀察平衡(見圖29A的節(jié)點(diǎn)管理器狀態(tài)2902)。如果當(dāng)前狀態(tài)不是觀察平衡,監(jiān)控器處理器225返回到塊1740中圖12的邏輯。這里狀態(tài)是觀察平衡,所以返回到圖12的邏輯之前,監(jiān)控器處理器225通知節(jié)點(diǎn)平衡器235對(duì)正在由系統(tǒng)執(zhí)行的工作是否在系統(tǒng)的節(jié)點(diǎn)間適當(dāng)?shù)仄胶膺M(jìn)行高級(jí)確定[塊1740]。這個(gè)邏輯連同圖18一起描述。
觀察平衡狀態(tài)中的節(jié)點(diǎn)平衡器235現(xiàn)在轉(zhuǎn)向圖18,節(jié)點(diǎn)平衡器235進(jìn)行對(duì)6個(gè)最近的保存區(qū)域的調(diào)用計(jì)數(shù)求和[塊1800]。然后,節(jié)點(diǎn)平衡器235為每個(gè)節(jié)點(diǎn)計(jì)算平均DCP[塊1805]。在優(yōu)選實(shí)施例中,這通過首先在節(jié)點(diǎn)基礎(chǔ)上對(duì)來自最近的6個(gè)保存區(qū)域的DCPA求和完成。然后,用于每個(gè)節(jié)點(diǎn)的總和除以調(diào)用計(jì)數(shù)的和(即,塊1800中確定的值)。結(jié)果是用于每個(gè)節(jié)點(diǎn)的平均DCP。然后,對(duì)6個(gè)最近的保存區(qū)域,節(jié)點(diǎn)平衡器235在節(jié)點(diǎn)基礎(chǔ)上對(duì)觀察平衡周期計(jì)數(shù)求和[塊1810]。(見圖29B,周期計(jì)數(shù)和保存區(qū)域SA0-SAN,2932-2936。)然后,在塊1815中確定系統(tǒng)總數(shù)。在圖19上,用于做平衡/不平衡判決的步驟繼續(xù)。圖19的邏輯由節(jié)點(diǎn)平衡器235為每個(gè)節(jié)點(diǎn)使用一次。每次使用圖19的邏輯時(shí),考慮下面的輸入1)用于系統(tǒng)的總的周期計(jì)數(shù),2)用于被考慮節(jié)點(diǎn)的DCP,3)節(jié)點(diǎn)的目標(biāo)權(quán)重(見圖10B和相關(guān)聯(lián)的用于解釋如何計(jì)算目標(biāo)權(quán)重的文字),和4)用于特定節(jié)點(diǎn)的周期計(jì)數(shù)。
現(xiàn)在移到圖19,節(jié)點(diǎn)平衡器235在塊1900中進(jìn)行計(jì)算目標(biāo)周期計(jì)數(shù)。在優(yōu)選實(shí)施例中,這通過跨越所有節(jié)點(diǎn)執(zhí)行的總的周期乘以特定節(jié)點(diǎn)的目標(biāo)權(quán)重而完成。結(jié)果是用于待裁決節(jié)點(diǎn)的目標(biāo)周期計(jì)數(shù)。然后,從節(jié)點(diǎn)的周期計(jì)數(shù)減去目標(biāo)周期計(jì)數(shù)[塊1910]。
在優(yōu)選實(shí)施例中,使用目標(biāo)周期計(jì)數(shù)的1/32作為容差,使得如果實(shí)際周期計(jì)數(shù)在目標(biāo)周期計(jì)數(shù)的1/32內(nèi),可以說節(jié)點(diǎn)平衡,即使它可能略微不平衡??梢栽谔幚韷K對(duì)1905/1920和1915/1925的邏輯中看到這個(gè)容差的應(yīng)用。如果實(shí)際周期計(jì)數(shù)只略微比目標(biāo)周期計(jì)數(shù)小[塊1905和1920],就返回結(jié)果零[塊1935]。結(jié)果零指示對(duì)特定節(jié)點(diǎn)未看到不平衡。類似地,如果實(shí)際周期計(jì)數(shù)只略微比目標(biāo)周期計(jì)數(shù)大[塊1915和1925],就返回結(jié)果零[塊1935]。自然,如果塊1910的計(jì)算結(jié)果為零,就在塊1935返回零。如果實(shí)際周期計(jì)數(shù)和目標(biāo)周期間的差別比略低大,那么圖19的邏輯將返回實(shí)際和目標(biāo)周期計(jì)數(shù)間的差別為負(fù)數(shù)[塊1930],這指示特定節(jié)點(diǎn)能夠承擔(dān)而不超過它的合理的比例的額外工作的量。如果實(shí)際周期計(jì)數(shù)和目標(biāo)周期間的差別比略高大,那么圖19的邏輯將測(cè)試是否用于特定節(jié)點(diǎn)的DCP大于75%。周期計(jì)數(shù)的超額和大于75%的DCP指示節(jié)點(diǎn)具有大于它的合理的工作份額,并且事實(shí)上受到超額的困擾。當(dāng)發(fā)現(xiàn)是這個(gè)情況時(shí),圖19的邏輯將返回實(shí)際周期和目標(biāo)周期計(jì)數(shù)間的差別為正數(shù)[塊1945],這指示應(yīng)該從待裁決的節(jié)點(diǎn)去除的工作量。如果在塊1940中,圖19的邏輯確定盡管周期計(jì)數(shù)超額,但特定節(jié)點(diǎn)的DCP不超過75%,那么不將節(jié)點(diǎn)處理為過度工作[塊1935]。
回想圖19的邏輯用于每個(gè)節(jié)點(diǎn),并且現(xiàn)在返回到圖18,假定已經(jīng)考慮所有節(jié)點(diǎn),如果圖19的邏輯的結(jié)果顯示沒有工作的不平衡(即,工作在整個(gè)系統(tǒng)被適當(dāng)?shù)胤峙?,那么節(jié)點(diǎn)平衡器235簡(jiǎn)單地在塊1840中結(jié)束執(zhí)行。但是,如果邏輯顯示不平衡(即,至少一個(gè)節(jié)點(diǎn)有太多的工作,并且至少一個(gè)節(jié)點(diǎn)有太少的工作),那么節(jié)點(diǎn)平衡器235前進(jìn)到塊1830,在那里初始化記錄狀態(tài)值。如下初始化1)增大圖29C的記錄周期Id 2940,2)在本地節(jié)點(diǎn)基礎(chǔ)上設(shè)置周期計(jì)數(shù)2948到零,3)設(shè)置記錄周期調(diào)用計(jì)數(shù)2942到零,4)設(shè)置用于每個(gè)節(jié)點(diǎn)的DCPA 2948到零。然后,節(jié)點(diǎn)平衡器235在塊1840中結(jié)束執(zhí)行之前,設(shè)置節(jié)點(diǎn)管理器狀態(tài)2902到記錄周期[塊1825]。
記錄周期狀態(tài)中的分派處理器狀態(tài)現(xiàn)在已經(jīng)由節(jié)點(diǎn)平衡器235設(shè)置為記錄周期(見上面),這樣,下一次線程被分派時(shí),分派處理器230的處理塊1645將評(píng)估為是。因此,接下來分派處理器230將確定是否線程的本地節(jié)點(diǎn)是可移動(dòng)的[圖16B的塊1609]。如果否,返回到圖16A的邏輯之前,在塊1660中,分派處理器230簡(jiǎn)單地增大記錄周期周期累加器。如果是這樣,分派處理器230確定是否記錄周期ID匹配[塊1610]。通過比較保存在線程控制結(jié)構(gòu)(未顯示)中的記錄周期ID和圖29C的記錄周期ID 2940,作出這個(gè)判決。如果ID匹配,分派處理器230添加計(jì)數(shù)的原始周期到已經(jīng)存儲(chǔ)在線程結(jié)構(gòu)(未顯示)中的現(xiàn)存總數(shù)[塊1655]。當(dāng)ID不匹配時(shí),用于當(dāng)前周期的原始周期計(jì)數(shù)還未被存儲(chǔ)這個(gè)特定線程的控制結(jié)構(gòu),所以設(shè)置線程控制結(jié)構(gòu)中的記錄周期ID到存儲(chǔ)于記錄周期ID 2940中的值[塊1650],并且設(shè)置周期計(jì)數(shù)等于最近執(zhí)行的周期[塊1665]。這是在塊1605中確定的值。不管處理塊1610如何評(píng)估,記錄的周期的本地節(jié)點(diǎn)總數(shù)也在塊1660中增大。
記錄周期狀態(tài)中的監(jiān)控器處理器225現(xiàn)在返回到圖13繼續(xù),下一次監(jiān)控器處理器225執(zhí)行處理塊1305將評(píng)估為是,因?yàn)闋顟B(tài)2902現(xiàn)在由節(jié)點(diǎn)平衡器235設(shè)置為記錄周期。監(jiān)控器處理器225添加DCP到記錄狀態(tài)DCPA(見圖29C的2948的DCPA)[塊1310]。然后,在塊1315中增大記錄周期IC 2942。然后,監(jiān)控器處理器225測(cè)試記錄周期IC 2942,以確定是否已經(jīng)達(dá)到最大值。在優(yōu)選實(shí)施例中最大值是53。如果未達(dá)到最大值,監(jiān)控器處理器225簡(jiǎn)單地在塊1340退出。如果在塊1320中,監(jiān)控器處理器225確定已經(jīng)達(dá)到最大值,它進(jìn)行從分派處理器230得到記錄的周期計(jì)數(shù),并且在周期計(jì)數(shù)存儲(chǔ)區(qū)域2948中存儲(chǔ)它們。然后,監(jiān)控器處理器225在塊1335中設(shè)置狀態(tài)來移動(dòng)線程,并且它在塊1340中退出前,在塊1330中通知節(jié)點(diǎn)平衡器235移動(dòng)線程。
移動(dòng)線程狀態(tài)中的節(jié)點(diǎn)平衡器235在這里使用圖20描述優(yōu)選實(shí)施例內(nèi)的線程移動(dòng)。節(jié)點(diǎn)平衡器235首先計(jì)算每個(gè)節(jié)點(diǎn)的平均DCP[塊2000]。在優(yōu)選實(shí)施例中,這通過2948的DCPA中保存的值除以周期(即,記錄周期IC 2942)中間隔的總數(shù)完成。然后,節(jié)點(diǎn)平衡器235對(duì)2948的累積周期計(jì)數(shù)求和,它在記錄周期期間產(chǎn)生用于系統(tǒng)的總數(shù)[塊2005]。
接下來,節(jié)點(diǎn)平衡器235確定在記錄周期上工作是否在整個(gè)系統(tǒng)公平地分配。在優(yōu)選實(shí)施例中,這通過圖19上顯示的邏輯完成。如讀者可以回想起的,上面描述了圖19,并且這里將不重復(fù)細(xì)節(jié)。但是,回想圖19的邏輯用于每個(gè)節(jié)點(diǎn),并且現(xiàn)在返回到圖20,假定已經(jīng)考慮所有節(jié)點(diǎn),如果圖19的邏輯的結(jié)果顯示沒有工作的不平衡(即,工作在整個(gè)系統(tǒng)被適當(dāng)?shù)胤峙?,節(jié)點(diǎn)平衡器235在塊2035中簡(jiǎn)單地設(shè)置狀態(tài)到觀察平衡,并且在塊2040中結(jié)束執(zhí)行。但是,如果圖19的邏輯顯示不平衡(即,至少一個(gè)節(jié)點(diǎn)有太多的工作,并且至少一個(gè)節(jié)點(diǎn)有太少的工作,以及在觀察平衡狀態(tài)中觀察到相同的節(jié)點(diǎn)分別有太多的工作和太少的工作),節(jié)點(diǎn)平衡器235前進(jìn)到塊2020,在那里確定要移動(dòng)的周期數(shù)。請(qǐng)讀者首先回想在塊2010中識(shí)別周期上短缺的節(jié)點(diǎn)和具有過多周期的節(jié)點(diǎn)。然后,由節(jié)點(diǎn)平衡器235設(shè)置要移動(dòng)的周期數(shù)到最大的超額和最大的短缺中較小值的1/2。然后,節(jié)點(diǎn)平衡器235在這個(gè)基礎(chǔ)上移動(dòng)線程。
圖21A到23顯示優(yōu)選實(shí)施例中執(zhí)行這個(gè)任務(wù)使用的節(jié)點(diǎn)平衡器235邏輯。最初,在塊2100中,創(chuàng)建空的列表。這個(gè)列表最后將保存線程,該線程是要移動(dòng)的候選者。然后,在塊2105中,節(jié)點(diǎn)平衡器235從由系統(tǒng)維護(hù)的線程列表中選擇第一個(gè)(或下一個(gè))線程。然后,節(jié)點(diǎn)平衡器235確定是否線程具有與它相關(guān)聯(lián)的當(dāng)前記錄周期ID[塊2110]。如果否,節(jié)點(diǎn)平衡器235確定是否有更多的線程要考慮[塊2111],并且如果是這樣,就前進(jìn)到選擇的下一個(gè)線程[塊2105],并且再次確定是否當(dāng)前記錄周期ID與它相關(guān)聯(lián)[塊2110]。圖21B顯示用于處理具有當(dāng)前記錄周期ID的線程的邏輯。節(jié)點(diǎn)平衡器235首先在塊2120中確定是否用于待裁決的線程的本地節(jié)點(diǎn)是先前已經(jīng)確定具有超額周期的節(jié)點(diǎn)。如果否,處理在圖21A的塊2111中繼續(xù),如已經(jīng)描述的。如果待裁決的線程的本地節(jié)點(diǎn)確實(shí)是具有超額周期的節(jié)點(diǎn),節(jié)點(diǎn)平衡器235確定是否特定線程是MAG的成員,其中要求組的所有線程具有相同的本地節(jié)點(diǎn)[塊2125]。如果否,節(jié)點(diǎn)平衡器235提取由這個(gè)線程記錄的周期[塊2130]。然后,節(jié)點(diǎn)平衡器235添加這個(gè)線程到候選者列表,根據(jù)它的記錄周期的數(shù)目給它排位(最多的位于第一)。然后,節(jié)點(diǎn)平衡器235在圖21A的塊2111中繼續(xù)處理。
如果在圖21B的塊2125中,節(jié)點(diǎn)平衡器235確定待裁決的線程確實(shí)是組的一部分,節(jié)點(diǎn)平衡器235確定是否該組是在這個(gè)記錄周期期間以前已經(jīng)遇到過的組[塊2140]。如果是這樣,處理在圖21A的塊2111中繼續(xù)。如果否,節(jié)點(diǎn)平衡器235為組計(jì)算總的周期計(jì)數(shù)(即,組的線程的記錄的周期的和)[塊2145],然后,根據(jù)用于組的總的周期計(jì)數(shù),添加組到移動(dòng)候選者列表[塊2150]。一旦這完成,處理就在圖21A的塊2111中繼續(xù)。
當(dāng)已經(jīng)考慮了所有線程時(shí),處理塊2111評(píng)估為否,并且節(jié)點(diǎn)平衡器235進(jìn)行實(shí)際移動(dòng)線程,以重新平衡系統(tǒng)。圖22上顯示優(yōu)選實(shí)施例中完成這個(gè)任務(wù)使用的邏輯。在塊2200中,節(jié)點(diǎn)平衡器235在候選者列表中選擇第一個(gè)(下一個(gè))線程或MAG。假定還未到達(dá)列表的結(jié)尾[塊2205],節(jié)點(diǎn)平衡器235確定是否待裁決的線程或MAG具有比有必要移動(dòng)的更多或更少的周期(見處理塊2020和相關(guān)聯(lián)的文字)[塊2215]。如果線程或MAG消耗比要求的更多的周期,節(jié)點(diǎn)平衡器235簡(jiǎn)單地在塊2200中繼續(xù)處理。如果否,節(jié)點(diǎn)平衡器235確定正在考慮的是線程還是組[塊2225]。如果它是線程,節(jié)點(diǎn)平衡器235前進(jìn)到圖23的邏輯。如果它是組,為組中的每個(gè)線程進(jìn)行利用圖23的邏輯之前,在塊2230中改變用于組的本地節(jié)點(diǎn)。
現(xiàn)在轉(zhuǎn)向圖23,節(jié)點(diǎn)平衡器235改變用于待裁決的線程的本地節(jié)點(diǎn)[塊2300]。只要特定線程保持這個(gè)特定本地節(jié)點(diǎn),TDM 215將試圖并分派它以在它的新的本地節(jié)點(diǎn)上執(zhí)行,并且TMM 217將在它的新的本地節(jié)點(diǎn)上為它試圖獲得存儲(chǔ)器。最后,在塊2305中,節(jié)點(diǎn)平衡器235將重新構(gòu)成與線程相關(guān)聯(lián)的重要的存儲(chǔ)器頁。在優(yōu)選實(shí)施例中,其完成是通過使舊的本地節(jié)點(diǎn)上的頁暫時(shí)不可用,復(fù)制那些頁到新的本地節(jié)點(diǎn)上,并使那些頁在新的本地節(jié)點(diǎn)上可用。現(xiàn)在返回到圖22,每次移動(dòng)線程或線程的組到新的本地節(jié)點(diǎn)時(shí),由移動(dòng)的周期減少要移動(dòng)的周期[塊2240]。然后,處理在塊2200中繼續(xù),直到已經(jīng)考慮所有線程。當(dāng)已經(jīng)考慮了所有線程時(shí),處理塊2205評(píng)估為是,使節(jié)點(diǎn)平衡器235重新初始化OIN。通過提取節(jié)點(diǎn)的周期計(jì)數(shù)并將它們存儲(chǔ)在最舊的保存區(qū)域中,節(jié)點(diǎn)平衡器235也為下一個(gè)觀察間隔創(chuàng)建基礎(chǔ)[塊2210]。這些初始化具有這樣的作用使下一個(gè)觀察間隔完全重新開始,使得考慮進(jìn)一步的平衡前,觀察至少6個(gè)間隔。
執(zhí)行初始化之后,節(jié)點(diǎn)平衡器235返回到圖20的塊2035,在那里,在塊2040中結(jié)束處理之前,它設(shè)置狀態(tài)到觀察平衡。
在本專利文件的工作重新分配部分的開始,我們指出狀態(tài)開始由系統(tǒng)管理員設(shè)置為觀察平衡。這是必要的,因?yàn)槿缡褂谜呖梢曰叵肫鸬?,?jié)點(diǎn)管理器狀態(tài)2902在IPL期間設(shè)置為當(dāng)前權(quán)重(見圖6的塊605)。圖24和25分別顯示系統(tǒng)和系統(tǒng)管理員間的交互,以使本地節(jié)點(diǎn)能夠移動(dòng)(即,重新平衡)和禁止本地節(jié)點(diǎn)移動(dòng)。在優(yōu)選實(shí)施例中,系統(tǒng)管理員通過用戶接口150和計(jì)算機(jī)系統(tǒng)100交互。在那里系統(tǒng)管理員能夠輸入命令,該命令指示節(jié)點(diǎn)管理器220設(shè)置它自己到觀察平衡狀態(tài),從而使本地節(jié)點(diǎn)能夠移動(dòng)。在圖24的塊2400中,節(jié)點(diǎn)管理器220確定是否它已經(jīng)處于觀察平衡或超出狀態(tài)。如果是這樣,節(jié)點(diǎn)管理器220簡(jiǎn)單地通知系統(tǒng)管理員(通過用戶接口150)已經(jīng)使本地節(jié)點(diǎn)能夠移動(dòng)[塊2045]。如果節(jié)點(diǎn)管理器220不處于觀察平衡狀態(tài),節(jié)點(diǎn)管理器220就初始化OIN,如在與圖22的塊2210相關(guān)聯(lián)的文字中描述的。那么在返回前,在塊2415中節(jié)點(diǎn)管理器220設(shè)置它的狀態(tài)到觀察平衡。
系統(tǒng)管理員也能夠輸入命令,該命令指示節(jié)點(diǎn)管理器220設(shè)置它自己到當(dāng)前權(quán)重狀態(tài),從而禁止本地節(jié)點(diǎn)移動(dòng)。在圖25的塊2500中,節(jié)點(diǎn)管理器220確定是否它已經(jīng)處于當(dāng)前權(quán)重狀態(tài)。如果是這樣,節(jié)點(diǎn)管理器220簡(jiǎn)單地通知系統(tǒng)管理員(通過用戶接口150)已經(jīng)禁止本地節(jié)點(diǎn)移動(dòng)[塊2505]。如果節(jié)點(diǎn)管理器220不處于當(dāng)前權(quán)重狀態(tài),那么在返回前,在塊2510中節(jié)點(diǎn)管理器220設(shè)置它的狀態(tài)到當(dāng)前權(quán)重。
在這里介紹提出的實(shí)施例和例子,是為了最好地解釋本發(fā)明和它的實(shí)際應(yīng)用,從而使本領(lǐng)域技術(shù)人員能夠?qū)嵤┖褪褂冒l(fā)明。但是,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,介紹前面的描述和例子只是為了說明和示例。如提出的描述并不意味是詳盡的,或者限制本發(fā)明為公開的精確形式。根據(jù)上面的教導(dǎo),在不背離權(quán)利要求的精神和范圍時(shí),很多修改和變化是可能的。
權(quán)利要求
1.一種計(jì)算機(jī)裝置,所述計(jì)算機(jī)裝置包含第一處理器,具有與其相關(guān)聯(lián)的第一存儲(chǔ)器;第二處理器和與其相關(guān)聯(lián)的第二存儲(chǔ)器;線程,所述線程能夠分別在所述第一處理器上和所述第二處理器上執(zhí)行;工作負(fù)載管理機(jī)制,它確定由所述第一處理器和由所述第二處理器經(jīng)受的各工作負(fù)載,所述工作負(fù)載管理機(jī)制根據(jù)所述各工作負(fù)載,將所述線程和所述第二處理器相關(guān)聯(lián)。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)裝置,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn)。
3.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)裝置,其中所述各工作負(fù)載是各自希望的工作負(fù)載。
4.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)裝置,其中所述各工作負(fù)載是各自當(dāng)前的工作負(fù)載。
5.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)裝置,其中所述各工作負(fù)載是各自希望的工作負(fù)載和各自當(dāng)前的工作負(fù)載。
6.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)裝置,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由用于所述第一節(jié)點(diǎn)的第一目標(biāo)權(quán)重和用于所述第二節(jié)點(diǎn)的第二目標(biāo)權(quán)重表示。
7.根據(jù)權(quán)利要求4所述的計(jì)算機(jī)裝置,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示。
8.根據(jù)權(quán)利要求5所述的計(jì)算機(jī)裝置,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由所述第一節(jié)點(diǎn)上的第一目標(biāo)權(quán)重和所述第二節(jié)點(diǎn)上的第二目標(biāo)權(quán)重表示,并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示。
9.根據(jù)權(quán)利要求5所述的計(jì)算機(jī)裝置,其中所述各希望的工作負(fù)載和所述各當(dāng)前的工作負(fù)載用于創(chuàng)建各中間工作負(fù)載。
10.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)裝置,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由所述第一節(jié)點(diǎn)上的第一目標(biāo)權(quán)重和所述第二節(jié)點(diǎn)上的第二目標(biāo)權(quán)重表示,并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示,并且其中所述各中間工作負(fù)載由用于所述第一節(jié)點(diǎn)的初始權(quán)重和用于所述第二節(jié)點(diǎn)的第二初始權(quán)重表示。
11.根據(jù)權(quán)利要求2所述的計(jì)算機(jī)裝置,其中所述第二節(jié)點(diǎn)是用于所述線程的本地節(jié)點(diǎn)。
12.一種程序產(chǎn)品,所述程序產(chǎn)品包含信號(hào)承載媒體;以及安置在所述信號(hào)承載媒體上的工作負(fù)載管理機(jī)制,所述工作負(fù)載管理機(jī)制確定由第一處理器和由第二處理器經(jīng)受的各工作負(fù)載,所述工作負(fù)載管理器根據(jù)所述各工作負(fù)載,將線程和所述第二處理器相關(guān)聯(lián),所述線程能夠分別在所述第一處理器上和所述第二處理器上執(zhí)行。
13.根據(jù)權(quán)利要求12所述的程序產(chǎn)品,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn)。
14.根據(jù)權(quán)利要求12所述的程序產(chǎn)品,其中所述各工作負(fù)載是各希望的工作負(fù)載。
15.根據(jù)權(quán)利要求12所述的程序產(chǎn)品,其中所述各工作負(fù)載是各當(dāng)前的工作負(fù)載。
16.根據(jù)權(quán)利要求12所述的程序產(chǎn)品,其中所述各工作負(fù)載是各希望的工作負(fù)載和各當(dāng)前的工作負(fù)載。
17.根據(jù)權(quán)利要求14所述的程序產(chǎn)品,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由用于所述第一節(jié)點(diǎn)的第一目標(biāo)權(quán)重和用于所述第二節(jié)點(diǎn)的第二目標(biāo)權(quán)重表示。
18.根據(jù)權(quán)利要求15所述的程序產(chǎn)品,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示。
19.根據(jù)權(quán)利要求16所述的程序產(chǎn)品,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由所述第一節(jié)點(diǎn)上的第一目標(biāo)權(quán)重和所述第二節(jié)點(diǎn)上的第二目標(biāo)權(quán)重表示,并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的目標(biāo)權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示。
20.根據(jù)權(quán)利要求16所述的程序產(chǎn)品,其中所述各希望的工作負(fù)載和所述各當(dāng)前的工作負(fù)載用于創(chuàng)建各中間工作負(fù)載。
21.根據(jù)權(quán)利要求20所述的程序產(chǎn)品,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由所述第一節(jié)點(diǎn)上的第一目標(biāo)權(quán)重和所述第二節(jié)點(diǎn)上的第二目標(biāo)權(quán)重表示,并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示,并且其中所述各中間工作負(fù)載由用于所述第一節(jié)點(diǎn)的初始權(quán)重和用于所述第二節(jié)點(diǎn)的第二初始權(quán)重表示。
22.根據(jù)權(quán)利要求13所述的程序產(chǎn)品,其中所述第二節(jié)點(diǎn)是用于所述線程的本地節(jié)點(diǎn)。
23.一種計(jì)算機(jī)實(shí)現(xiàn)的方法,所述方法包含以下步驟確定由第一處理器和由第二處理器經(jīng)受的各工作負(fù)載;以及根據(jù)所述各工作負(fù)載,將線程和所述第二處理器相關(guān)聯(lián),所述線程能夠分別在所述第一處理器上和所述第二處理器上執(zhí)行。
24.根據(jù)權(quán)利要求23所述的方法,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn)。
25.根據(jù)權(quán)利要求23所述的方法,其中所述各工作負(fù)載是各希望的工作負(fù)載。
26.根據(jù)權(quán)利要求23所述的方法,其中所述各工作負(fù)載是各當(dāng)前的工作負(fù)載。
27.根據(jù)權(quán)利要求23所述的方法,其中所述各工作負(fù)載是各希望的工作負(fù)載和各當(dāng)前的工作負(fù)載。
28.根據(jù)權(quán)利要求25所述的方法,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由用于所述第一節(jié)點(diǎn)的第一目標(biāo)權(quán)重和用于所述第二節(jié)點(diǎn)的第二目標(biāo)權(quán)重表示。
29.根據(jù)權(quán)利要求26所述的方法,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示。
30.根據(jù)權(quán)利要求27所述的方法,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由所述第一節(jié)點(diǎn)上的第一目標(biāo)權(quán)重和所述第二節(jié)點(diǎn)上的第二目標(biāo)權(quán)重表示,并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示。
31.根據(jù)權(quán)利要求27所述的方法,其中所述各希望的工作負(fù)載和所述各當(dāng)前的工作負(fù)載用于創(chuàng)建各中間工作負(fù)載。
32.根據(jù)權(quán)利要求31所述的方法,其中所述第一處理器和第一存儲(chǔ)器構(gòu)成第一節(jié)點(diǎn),并且其中所述第二處理器和所述第二存儲(chǔ)器構(gòu)成第二節(jié)點(diǎn),并且其中所述各希望的工作負(fù)載由所述第一節(jié)點(diǎn)上的第一目標(biāo)權(quán)重和所述第二節(jié)點(diǎn)上的第二目標(biāo)權(quán)重表示,并且其中所述各當(dāng)前的工作負(fù)載由用于所述第一節(jié)點(diǎn)的當(dāng)前權(quán)重和用于所述第二節(jié)點(diǎn)的第二當(dāng)前權(quán)重表示,并且其中所述各中間工作負(fù)載由用于所述第一節(jié)點(diǎn)的初始權(quán)重和用于所述第二節(jié)點(diǎn)的第二初始權(quán)重表示。
33.根據(jù)權(quán)利要求24所述的方法,其中所述第二節(jié)點(diǎn)是用于所述線程的本地節(jié)點(diǎn)。
34.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)裝置,其中根據(jù)分派器活動(dòng)的確定級(jí)別偏愛使用所述各當(dāng)前工作負(fù)載創(chuàng)建所述各中間工作負(fù)載的程度。
35.根據(jù)權(quán)利要求20所述的程序產(chǎn)品,其中根據(jù)分派器活動(dòng)的確定級(jí)別偏愛使用所述各當(dāng)前工作負(fù)載創(chuàng)建所述各中間工作負(fù)載的程度。
36.根據(jù)權(quán)利要求31所述的方法,其中根據(jù)分派器活動(dòng)的確定級(jí)別偏愛使用所述各當(dāng)前工作負(fù)載創(chuàng)建所述各中間工作負(fù)載的程度。
全文摘要
本發(fā)明公開一種用于將線程和多節(jié)點(diǎn)計(jì)算機(jī)系統(tǒng)的處理節(jié)點(diǎn)相關(guān)聯(lián)的裝置、方法和程序產(chǎn)品。通過考慮每個(gè)節(jié)點(diǎn)的相對(duì)工作能力和分配給每個(gè)節(jié)點(diǎn)的正在進(jìn)行的工作的相對(duì)數(shù)量,完成這個(gè)指定。當(dāng)創(chuàng)建新線程時(shí),從應(yīng)該選擇哪個(gè)節(jié)點(diǎn)的觀點(diǎn)來看,在優(yōu)選實(shí)施例中使用初始權(quán)重反映分配給每個(gè)節(jié)點(diǎn)的線程的希望的比例。
文檔編號(hào)G06F9/46GK1664786SQ20051005094
公開日2005年9月7日 申請(qǐng)日期2005年2月24日 優(yōu)先權(quán)日2004年3月4日
發(fā)明者林恩·K·常, 克里斯托弗·弗朗科伊斯, 馬克·R·芬克, 理查德·K·柯克曼, 亨利·J·梅, 唐·D·里德, 肯尼斯·C·沃森 申請(qǐng)人:國際商業(yè)機(jī)器公司