專利名稱:實(shí)現(xiàn)精確的超高速緩存靈敏度的超高速緩存體系結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)中的調(diào)度線程。具體地,本發(fā)明涉及為了超高速緩存靈敏的調(diào)度的目的方便跟蹤線程的超高速緩存足跡的方法與系統(tǒng)。
在現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)中,CPU速度不斷地以比存儲(chǔ)器存取速度快得多地提高。因此,處理存儲(chǔ)器等待時(shí)間的后果已越來越重要。為了緩和相對高的存儲(chǔ)器存取時(shí)間,如
圖1中所示的計(jì)算機(jī)系統(tǒng)在μP(12)與存儲(chǔ)器(13)之間介入越來越大的超高速緩存(14a,14b),并且經(jīng)常配置甚至多級超高速緩存(14,15)[1]。然而,CPU速度提高與存儲(chǔ)器存取速度提高的差異在出現(xiàn)超高速緩存失中的情況中導(dǎo)致以CPU周期表示的更大的超高速緩存再加載時(shí)間。隱藏超高速緩存失中的各種技術(shù)是已知的,諸如指令相關(guān)性分析、推測執(zhí)行、無次序執(zhí)行及預(yù)取指令[1]。隨著超高速緩存存取時(shí)間與存儲(chǔ)器等待時(shí)間之間的差異越來越大,更難于用這些技術(shù)來隱藏超高速緩存失中。結(jié)果μP將經(jīng)歷更多的停頓,從而增加執(zhí)行一條指令所需的平均周期數(shù)(cpi)。為了保持低的計(jì)算機(jī)系統(tǒng)cpi,因此降低μP遭遇的超高速緩存失中次數(shù)是重要的。
超高速緩存失中通常由有限的超高速緩存資源引起,其中處理器上活躍的線程的工作集不能整個(gè)出現(xiàn)在超高速緩存中。在這一情況中線程之間的切換將導(dǎo)致超高速緩存失中,因?yàn)橐粋€(gè)線程所存取的存儲(chǔ)器會(huì)逐出其它線程的超高速緩存內(nèi)容。緩解這一問題的一種顯而易見的方法便是增加執(zhí)行線程的時(shí)間量,從而提高在該較長時(shí)段中重復(fù)使用超高速緩存的概率。然而,增加時(shí)間量對諸如響應(yīng)時(shí)間等其它系統(tǒng)參數(shù)具有不利影響,因此這通常不是一種選擇。
當(dāng)前,許多甚至絕大多數(shù)現(xiàn)代服務(wù)器系統(tǒng)為與超高速緩存相干的共享存儲(chǔ)器多處理器系統(tǒng)(MP)(11),其中將多個(gè)處理器(12a,12b)鏈接在一個(gè)或多個(gè)存儲(chǔ)器模塊(13)上[1]。在這些系統(tǒng)中,當(dāng)線程的執(zhí)行從一個(gè)處理器轉(zhuǎn)移到另一個(gè)而仍有一部分其存取的存儲(chǔ)器仍超高速緩存在前一處理器的超高速緩存上時(shí)會(huì)出現(xiàn)超高速緩存失中。在存取這些存儲(chǔ)器單元時(shí),超高速緩存失中的出現(xiàn)導(dǎo)致將超高速緩存行轉(zhuǎn)移給新處理器。通過不僅參考被調(diào)度的線程的優(yōu)先級并且也考慮線程對不同處理器的親和性,這些系統(tǒng)上的調(diào)度程序能改進(jìn)吞吐量與響應(yīng)性兩者[2,4,5,6]。通常如果將線程調(diào)度給與它們具有高親和性的處理器,則能降低超高速緩存失中的總體數(shù)目,并從而提高吞吐量。在調(diào)度一個(gè)線程中短的延遲以便將該線程調(diào)度到與其具有親和性的處理器上能實(shí)際上提高該線程的響應(yīng)性,因?yàn)楫?dāng)該線程真正投入運(yùn)行時(shí),處理器將花費(fèi)較少時(shí)間來重建其超高速緩存內(nèi)容。雖然許多多處理器調(diào)度程序確曾試圖進(jìn)行某種形式的基于親和性的調(diào)度,這種調(diào)度的有效性是有限的,因?yàn)檎{(diào)度程序沒有方法來精確估算超高速緩存的親和性。
操作系統(tǒng)中的第一種嘗試并仍然是多處理系統(tǒng)的商品化操作系統(tǒng)中最廣泛的一種便是采用虛擬時(shí)間印記。當(dāng)在處理器Pi上執(zhí)行線程T時(shí),分配給該線程一個(gè)按處理器的時(shí)間印記。分配給對給定處理器具有最高時(shí)間印記的線程一個(gè)較高的親和性值。通常為這一概念提供非常簡單的實(shí)現(xiàn),即如果該線程上一次在這里運(yùn)行為值“1”否則為“0”。這一方法并不計(jì)入線程的超高速緩存足跡。它通常不正確地假定最近在處理器上運(yùn)行的線程對該處理器具有最高的親和性。
許多處理器已引入計(jì)入在設(shè)定的時(shí)間間隔中超高速緩存失中次數(shù)的機(jī)制,操作系統(tǒng)也正在利用這一信息[3,4,5,6]。在最小失中策略中調(diào)度程序記住線程在其上一次運(yùn)行中遭受超高速緩存失中的次數(shù)。對于一個(gè)給定線程,高速緩存失中次數(shù)越少,則對其分配的高速緩存親和性越高。更完善的策略是基于超高速緩存重新加載瞬態(tài)模型。重新加載瞬態(tài)定義為重新起動(dòng)線程之后重建該線程的足跡的代價(jià)??衫肕arkov鏈模型來估算給定的時(shí)間上的線程的足跡[3,5,6]。具體地,Markov鏈對作為在線程的執(zhí)行中超高速緩存失中的結(jié)果增加活躍的超高速緩存行的數(shù)目的概率建立模型。例如,假定系統(tǒng)具有N個(gè)超高速緩存行而運(yùn)行中的線程T當(dāng)前占用M個(gè)超高速緩存行,一個(gè)超高速緩存失中增加T的超高速緩存足跡的概率(即沒有T的超高速緩存行被該失中取代)為(N-M)/N。然后通過將同一邏輯應(yīng)用在一個(gè)以上的超高速緩存失中上來重構(gòu)該鏈。類似地,給定從該線程上一次執(zhí)行起的超高速緩存失中數(shù)目,可用同一模型來估算線程的超高速緩存足跡中的減少。然后在調(diào)度時(shí)有意選擇具有最低重新加載瞬態(tài)的線程,因?yàn)槲覀兤谕馐茏钌俚某咚倬彺媸е衼砘謴?fù)其前面的狀態(tài)。這一策略假設(shè)系統(tǒng)是馬爾可夫(無后效)系統(tǒng),即無歷史的,它既不能精確地反映線程的表現(xiàn)也不反映諸如超高速緩存結(jié)合性等超高速緩存硬件限制[1]。此外,由于超高速緩存足跡是在線程的生存期上增量估算的,這一模型能失去同步,導(dǎo)致低劣的調(diào)度判斷。
當(dāng)前的上述基于親和性的調(diào)度方案的主要障礙在于超高速緩存親和性函數(shù)不是基于諸如虛擬時(shí)間印記等非常簡單的直觀推斷便是基于諸如Markov鏈的隨機(jī)模型等超高速緩存足跡估算的。
因此,所需要的是具有根據(jù)精確的超高速緩存足跡測定值的基于改進(jìn)的超高速緩存親和性調(diào)度的操作系統(tǒng)。
參考文獻(xiàn)1. J.L.Hennessy,D.A.Patterson的“計(jì)算機(jī)體系結(jié)構(gòu)定量方案”(“Computer ArchitectureA Quantitative Approach,”MorganKaufmann Publishers,ISBN1-55860-329-8,1996.)2. U.Vahalla的“Unix本質(zhì)新的前沿”(“UNIX InternalsTheNew Frontier,”Prentice Hall,ISBN0-13-101908-2,1996.)3. D.Thiebaut,H.Stone的“記錄高速緩存的足跡”(“Footprintsthe Cache,”ACM Transactions on Computer Systems,5(4),Nov.1987,pp.305-329.)4. M.Squillante,E.Lazowska的“在共享存儲(chǔ)器的多處理器調(diào)度中利用處理器高速緩存的親和性”(“Using Processor CacheAffinity in Shared-Memory Multiprocessor Scheduling,”IEEETransactions on Parallel and Distributed Systems,4(2),F(xiàn)eb.1993,pp.131-143.)5. A.Tucker的“在多編程共享的存儲(chǔ)器的多處理器上的有效調(diào)度”(“Efficient Scheduling on Multiprogrammed Shared MemoryMultiprocessors,”ph.D.Thesis,Department of ComputerScience,Stanford University,CX-TN-94-4,Dec.1993.)6. F.Belossa的“在共享存儲(chǔ)器的多處理器中的基于本地信息的調(diào)度”(“Locality-Information-Based Scheduling in Shared-Memory Multiprocessors,”IPPS’96 Workshop on Job SchedulingStrategies for Parallel Processing,Honolulu,Hawaii,April1996.)通過引用將上述參考文獻(xiàn)1至6結(jié)合在此。
本發(fā)明的目的為提供基于改進(jìn)的超高速緩存親和性的調(diào)度。從而,本發(fā)明通過為各處理器的各線程測定超高速緩存足跡而提供用于在多處理器系統(tǒng)中調(diào)度線程的方法及裝置。然后,利用上面確定的超高速緩存足跡,確定各線程對各處理器的親和性。然后按照親和性調(diào)度各處理器上的各線程的執(zhí)行。在本發(fā)明的更具體的實(shí)施例中,各超高速緩存的各線程的超高速緩存足跡是用各線程從特定的超高速緩存取得的活躍的超高速緩存行的數(shù)目測定的。
圖1示意性地示出帶有集成的超高速緩存體系結(jié)構(gòu)的共享存儲(chǔ)器多處理器。
圖2為與本發(fā)明的多處理器系統(tǒng)集成的超高速緩存體系結(jié)構(gòu)的高層示意圖。
圖3示意性地示出本發(fā)明的超高速緩存監(jiān)控單元的內(nèi)部體系結(jié)構(gòu)。
圖4示意性地示出按照本發(fā)明的超高速緩存監(jiān)控單元的更新操作。
圖5用圖形示出為了選擇下一個(gè)執(zhí)行的線程而用于確定給定處理器上的線程的執(zhí)行優(yōu)先級的通用算法。
圖6示意性地示出調(diào)度程序并包括調(diào)度隊(duì)列及線程之一的親和性矢量。
如上面所討論的,圖1描繪了具有多個(gè)處理器即CPU(12a…12b)的示范性多處理器系統(tǒng)(11)。各處理器連接在保存與/或支持應(yīng)用及操作系統(tǒng)軟件的存儲(chǔ)介質(zhì),短期存儲(chǔ)器(13)上。介入處理器與其關(guān)聯(lián)的存儲(chǔ)器的通信路徑中的有至少一個(gè)相應(yīng)的超高速緩存(14a,14b),然而多級超高速緩存(14a,14b,15a,15b)也是可能的。所述超高速緩存的目的為臨時(shí)存儲(chǔ)頻繁地存取的所述存儲(chǔ)器的內(nèi)容,并提供對所述超高速緩存的存儲(chǔ)器內(nèi)容的更快的通信路徑,以便提供更快的存儲(chǔ)器存取。
按照圖2中所示的本發(fā)明,標(biāo)準(zhǔn)超高速緩存體系結(jié)構(gòu)是用超高速緩存監(jiān)控單元(20)(CMU)擴(kuò)展的。如該名稱所指,這一擴(kuò)展的目的是為了測定計(jì)算單元(進(jìn)程,線程)的超高速緩存足跡的目的而監(jiān)控及描述超高速緩存的所有權(quán)與使用的特征。圖2給出CMU與其它標(biāo)準(zhǔn)系統(tǒng)部件,即超高速緩存(21)、CPU(22)及存儲(chǔ)器(23),的集成與交互作用的高層概述。當(dāng)在CPU上執(zhí)行其指令流的當(dāng)前線程通過加載或存儲(chǔ)操作1d(A)/st(A)(24)存取存儲(chǔ)器單元A(M[A])的內(nèi)容時(shí),CPU通過CPU-超高速緩存接口(28)向其相關(guān)超高速緩存(21)發(fā)布這些請求。然后超高速緩存的任務(wù)為(a)識別M[A]是否已在超高速緩存的存儲(chǔ)器中然后返回?cái)?shù)據(jù)給CPU或(b)是否在執(zhí)行所述任務(wù)(a)前必須首先從主存儲(chǔ)器中取出M[A]。如果M[A]已在超高速緩存的存儲(chǔ)器中,便不用存取存儲(chǔ)器將M[A]返回給CPU。在這一點(diǎn)上不需要與CMU交互作用。然而,如果在該超高速緩存的存儲(chǔ)器中得不到M[A],則超高速緩存必須通過超高速緩存-存儲(chǔ)器接口(23)從存儲(chǔ)器單元取數(shù)據(jù)。由于超高速緩存的存儲(chǔ)器明顯地小于主存儲(chǔ)器,超高速緩存必須留出空間或“逐出”其它超高速緩存的存儲(chǔ)器以便存儲(chǔ)M[A]。超高速緩存是組織成有限數(shù)目(NUM_CL)的超高速緩存行的,其中各超高速緩存行保持特定數(shù)目的連續(xù)的存儲(chǔ)器字節(jié),稱作超高速緩存行大小(CLS)。超高速緩存通常根據(jù)簡單的映射函數(shù)F(A)(如地址位散列)將多個(gè)超高速緩存行組織成群。換言之,M[A]只能存儲(chǔ)在落入它們的相關(guān)超高速緩存行群CG(A)中的超高速緩存行中。如果得不到CG[A]中的超高速緩存行,超高速緩存必須從CG[A]中逐出一個(gè)超高速緩存行。如果該超高速緩存行在修改狀態(tài)中,即存儲(chǔ)器與超高速緩存內(nèi)容不同步,則逐出該超高速緩存行包括寫回到存儲(chǔ)器中。只有這時(shí)才能將M[A]取入新釋放的超高速緩存行中。組織及逐出機(jī)制是當(dāng)前超高速緩存利用中的標(biāo)準(zhǔn)實(shí)踐[1]。
按照本發(fā)明的另一方面,需要來自超高速緩存的關(guān)于哪一行是逐空的及哪一行是填充以某些存儲(chǔ)器內(nèi)容的通知。為了使CMU在任何給定的時(shí)間上都能提供精確的超高速緩存足跡測定值,這些通知應(yīng)在發(fā)生逐出或填充事件時(shí)立即發(fā)生。這些額外的操作能并行執(zhí)行而并不在存取超高速緩存的關(guān)鍵性路徑上引入任何額外的開銷。具體地,一旦超高速緩存決定逐出超高速緩存行Li,該超高速緩存在超高速緩存-CMU通信總線(C3總線)(27)上發(fā)布“evict(Li)”通知,而一旦超高速緩存填充超高速緩存行,便將“filled(Li)”通知發(fā)送給CMU。
對于所有實(shí)際目的,除超高速緩存行無效及初始CMU狀態(tài)之外,所有逐空都跟隨著同一超高速緩存行的填充。從而,可將“evict(Li)”與“filled(Li)”合在一起成為一個(gè)請求。無效指令可用對請求的附加參數(shù)INV(在硬件中這是在發(fā)布超高速緩存無效指令時(shí)升高的附加信號線)來覆蓋。從而從超高速緩存向CMU發(fā)布的各請求具有格式Req<L,Inv>,其中L標(biāo)識受影響的行而Inv則標(biāo)識這一請求是無效指令的結(jié)果還是超高速緩存行填充(隱含逐出)的結(jié)果。
現(xiàn)在描述利用來自超高速緩存的通知請求及使CMU能向各所述線程提供有多少由各所述線程所取的超高速緩存行仍在超高速緩存中活躍的測定。
CMU取得并確認(rèn)各通知請求Req<L,Inv>(例如通過降低C3總線上的特定信號)。除了CMU-超高速緩存接口之外,CMU提供對CPU(29)的接口,該接口揭示下列兩條“指令”來修改與查詢CMU的狀態(tài)1)Setowner(oid)標(biāo)識直到發(fā)布另一條“Setowner(oid)”之前從這里取得所有超高速緩存行的擁有者,oid必須是有效的ID(見下面)。
2)getusage(odi)檢索該有效oid擁有的超高速緩存行的數(shù)目。
作為有效的oid,我們假設(shè)以下限制[O<o(jì)id<MAX_OID],其中MAX_OID為一定的系統(tǒng)常數(shù)而O則是為處理INV情況及CMU的初始狀態(tài)保留的。為了在這一點(diǎn)上簡化本實(shí)施例的討論的目的,我們假設(shè)可能的擁有者數(shù)(如線程,進(jìn)程)并不超過MAX_OID??赡艿膿碛姓邤?shù)超過MAX_OID的情況將在稍后描述。
對于各有效的oid及不僅對于當(dāng)前擁有者,CMU必須維護(hù)這一oid“所擁有的”超高速緩存行的數(shù)目,稱作OC(oid)。為了能維護(hù)這一計(jì)數(shù),CMU必須為各超高速緩存行Li維護(hù)超高速緩存行擁有者CLO(Li)。具體地,對于從超高速緩存接收的各請求<L,Inv>,CMU將與該超高速緩存行L的當(dāng)前擁有者關(guān)聯(lián)的計(jì)數(shù)器減1并將與上一條“setowner”指令所指示的超高速緩存行L的新?lián)碛姓哧P(guān)聯(lián)的計(jì)數(shù)器加1。通常在上下文切換時(shí),操作系統(tǒng)將發(fā)布“setowner”指令給CMU。如果在請求中生成Inv信號,便選擇“O”作為新?lián)碛姓?,表示沒有擁有者與該超高速緩存行關(guān)聯(lián)(注意“O”不是有效的oid)。類似地在系統(tǒng)起動(dòng)時(shí),所有超高速緩存行都被賦予oid“O”。
圖3更詳細(xì)地示出CMU的內(nèi)部結(jié)構(gòu)及下列各種CMU部件對上述要求的作用1.擁有者標(biāo)識符寄存器oid-reg(30),它包含標(biāo)識當(dāng)前正在運(yùn)行的擁有者(線程,進(jìn)程)的oid(31),2.大小為NUM_CL的超高速緩存行oid矢量(32),它為各超高速緩存行L
(32a-Z)保持該超速緩存線的擁有者的oid=CLO(Li),3.計(jì)數(shù)器矢量(33),它為各可能的有效oid值維護(hù)有多少超高速緩存行由所述oid所擁有的計(jì)數(shù),4. C3總線接口(34),它與超高速緩存單元交互作用,5. CMU更新單元(35),它根據(jù)“逐出”與“填充”通知修改CMU狀態(tài)。
6. CPU接口(36),它在CPU發(fā)布的setowner與getusage指令上操作。
副作用是CMU能容易地跟蹤束縛在超高速緩存硬件本身之外的其它信息。例如,通過簡單地計(jì)數(shù)通知請求,CMU能提供實(shí)際的超高速緩存失中計(jì)算信息。
CMU更新單元(35)的操作為維護(hù)超高速緩存行的正確計(jì)數(shù)與所有權(quán)。如圖4中所示,CMU更新單元進(jìn)行下述操作流程·(41)從C3總線接口(34)檢索下一個(gè)通知請求<L,Inv>,·(42)從超高速緩存行oid矢量(32)取得超高速緩存行L的當(dāng)前擁有者,·(43)在剛確定的擁有者項(xiàng)上遞減(counter_vector)(計(jì)數(shù)器矢量)(33)·(44)如果生成Inv信號,將new_owner(新?lián)碛姓?設(shè)置為“O”表示無效(46),否則用oid-reg(45)的內(nèi)容確定new_owner(新?lián)碛姓?,·(47)將超高速緩存行CLO(L)的擁有者設(shè)置為該new_owner(新?lián)碛姓?,
·(48)增量new_owner(新?lián)碛姓?的counter_vcetor(計(jì)數(shù)器矢量)(34)。
MAX_OID的選擇取決于各種系統(tǒng)參數(shù),諸如超高速緩存行的數(shù)目NUM_CL與超高速緩存行大小CLS以及線程及進(jìn)程的數(shù)目。下面給出基于當(dāng)前技術(shù)水平的超高速緩存體系結(jié)構(gòu)及操作系統(tǒng)參數(shù)的一些估算。超高速緩存中的超高速緩存行數(shù)NUM_CL的數(shù)量級為千或萬而不是百萬。例如,假定具有128個(gè)字節(jié)(27)的超高速緩存行大小為4兆字節(jié)(223)的超高速緩存得出32768條超高速緩存行(215)。再假定將能建立的線程的數(shù)目限制在4096(212)上。注意許多商品化操作系統(tǒng)提供的比這少得多。然而,以2個(gè)字節(jié)存儲(chǔ)器表示一個(gè)oid,允許發(fā)布216個(gè)不同的oid。給定上述數(shù)字,這將要求超高速緩存設(shè)計(jì)提供64K字節(jié)存儲(chǔ)器用于超高速緩存行oid矢量(cacheline-oid-vector)及另外8K字節(jié)用于MAX_OID=4096的counter_vector(計(jì)數(shù)器矢量),總共72K字節(jié)的額外存儲(chǔ)器。這大約是原來的存儲(chǔ)器的1.75%。雖然超高速緩存大小將不斷增長,隨著超高速緩存行大小有可能同樣增長,但CMU擴(kuò)展所需的總的超高速緩存大小的實(shí)際百分比有可能下降。從而超高速緩存行的數(shù)目將不以超高速緩存本身的速度增長,最終相對于整體超高速緩存芯片資源減少CMU所需的芯片資源。
然而,OS必須準(zhǔn)備好處理oid可能成為關(guān)鍵性資源的事實(shí)。本發(fā)明提供用于處理多于MAX_OID個(gè)線程的方法。兩種通用方法是有意義的,第一種是靜態(tài)的并將線程放在群中,第二種是較動(dòng)態(tài)的并要求OS隨著時(shí)間主動(dòng)管理oid的分配。
在靜態(tài)oid分配方法中,應(yīng)分配給屬于同一地址空間或進(jìn)程的線程一個(gè)公共的oid。這比隨機(jī)線程組合優(yōu)越,因?yàn)閷儆谕贿M(jìn)程的線程通常共用數(shù)據(jù)與/或代碼,即存儲(chǔ)器。將一個(gè)進(jìn)程的所有線程分成若干線程群及分配給各群獨(dú)立的oid也是可行的。具體地,如果能獲得關(guān)于線程共用存儲(chǔ)器的知識,便應(yīng)將共用大部分它們的尋址存儲(chǔ)器的這些線程分配給具有有區(qū)別的oid的線程群。這將進(jìn)程或線程群的最大數(shù)目限制在MAX_OID上。
動(dòng)態(tài)oid分配方法認(rèn)識到這樣一個(gè)事實(shí)只有在超高速緩存親和性調(diào)度中有限數(shù)目的線程才有利,即能起動(dòng)運(yùn)行的線程的數(shù)目。通常,許多線程是在禁止?fàn)顟B(tài)中的,它們過了一段時(shí)間總要減少線程的超高速緩存足跡。因此,操作系統(tǒng)存在著有效的方法(ⅰ)如果線程或線程群已被禁止便重復(fù)使用該線程或線程群的oid;(ⅱ)將該oid重新分配給不同的實(shí)體及(ⅲ)一旦重新起動(dòng)該線程或線程群便分配新的oid給它。在這一情況中,MAX OID限制系統(tǒng)中已起動(dòng)準(zhǔn)備運(yùn)行的線程的數(shù)目而不是線程的總數(shù),這是由于內(nèi)部資源制約而大多數(shù)多處理器操作系統(tǒng)總得必須做的事情。
兩種方法各有利弊,其利弊取決于在這些系統(tǒng)上執(zhí)行的工作量,從而選擇靜態(tài)方案或動(dòng)態(tài)方案對本實(shí)施例是不能兩全其美的。
雖然不限于此,大多數(shù)處理器設(shè)計(jì)將“setowner”及“getusage”指令作為專用寄存器指令(類似于超高速緩存行無效、或讀實(shí)時(shí)時(shí)鐘或檢索/復(fù)位超高速緩存狀態(tài)(如檢索超高速緩存失中的數(shù)目)),或作為加載/存儲(chǔ)指令提供,其中將CMU寄存器映射到處理器的物理地址范圍的某一部分中。
作為示例在這里示出一個(gè)簡單的指令序列,供操作系統(tǒng)利用基于寄存器的指令集及存儲(chǔ)器映射的CMU寄存器的CPU-CMU接口。熟悉本技術(shù)的人員能容易地將本示例映射到其它指令集與/或?qū)S眉拇嫫魃稀2粨p失通用性,在本示例中的假定寄存器r4保持線程描述信息塊的地址;OID_OFFSET描述存儲(chǔ)這一線程的oid處在這一塊中的某一固定位移量;CMU_OID常數(shù)描述將CMU oid寄存器映射到其上的物理地址;及CMU_VEC描述將CMU計(jì)數(shù)器矢量的第一項(xiàng)映射到其上的物理地址(每項(xiàng)兩個(gè)字節(jié))。
如早先所述,調(diào)度程序最好在利用類似于下述代碼將執(zhí)行切換到選定的任務(wù)之前的調(diào)度決定時(shí)間上設(shè)置oid_reglds r3,r4(OID_OFFSET)//將線程<oid>16位值加載進(jìn)寄存器r3中l(wèi)dwr5,@CMU_OID//加載CMU_OID寄存器的地址stsx r3,O(r5)//在CMU_OID寄存器上的0-位移處存儲(chǔ)16位為了執(zhí)行超高速緩存親和性調(diào)度,調(diào)度程序必須為各線程建立作為超高速緩存足跡的函數(shù)的超高速緩存親和性,并從而必須從CMU中檢索超高速緩存足跡。
lds r3,r4(OID_OFFSET)//將線程<oid>16位值加載進(jìn)寄存器r3
ldw r5,@CMU_VEC//加載CMU_OID寄存器的地址shl r3,r3,1//左移一位以得到正確的矢量位移ldsx r6,r3(r5)//將counter vector[oid]的16位內(nèi)容加載進(jìn)r6中超高速緩存足跡測定值現(xiàn)在存儲(chǔ)在寄存器r6中并能將其與其它調(diào)度優(yōu)先級組合以導(dǎo)出總體執(zhí)行優(yōu)先級。這在下面描述。
現(xiàn)在展示如何將超高速緩存監(jiān)控裝置的使用綜合進(jìn)操作系統(tǒng)調(diào)度程序中。首先描述圖5中所示的通用與抽象算法,然后更詳細(xì)地描述諸如圖6中所示的UNIX調(diào)度程序等標(biāo)準(zhǔn)公平調(diào)度程序的綜合。然而,注意本發(fā)明不限于這些描述。而是,熟悉本技術(shù)的人員應(yīng)能導(dǎo)出將本發(fā)明的超高速緩存監(jiān)控裝置及基本算法綜合進(jìn)其它調(diào)度算法的進(jìn)程。
最終,假定一組調(diào)度參數(shù),所有調(diào)度程序都為各線程導(dǎo)出某一稱作執(zhí)行優(yōu)先級的正規(guī)化的數(shù),允許調(diào)度程序比較這些數(shù)以便選擇下一個(gè)要執(zhí)行的適當(dāng)線程。不損失通用性,假定較大的數(shù)優(yōu)先。圖5示出有助于執(zhí)行優(yōu)先級ep(50)的總體計(jì)算的各種參數(shù)。以一定基本優(yōu)先級bp(Tj)(51)建立線程T。為了提供某種程度的公平性,不總是以其基本優(yōu)先級bp(Tj)調(diào)度線程Tj,相反,隨著每一個(gè)時(shí)間量,通過將該線程的基本優(yōu)先級bp(Tj)降低某一依賴于時(shí)間t的量θ≤ζ(t)≤bp(Tj)(53)來計(jì)算時(shí)間t上的其當(dāng)前優(yōu)先級cp(Tj,t)(52)。從而當(dāng)前優(yōu)先級cp(Tj,t)落入小于等于bp(Tj)的某一優(yōu)先級間隔中。通常用某種簡單的降級方案來實(shí)現(xiàn)ζ(t)。在非基于超高速緩存親和性的調(diào)度中,執(zhí)行優(yōu)先級等于當(dāng)前優(yōu)先級。
ep(Tj,t)=cp(Tj,t)=bp(Tj)-ζ(Tj,t)(式1)由于在本發(fā)明中,在計(jì)算線程Tj在給定的處理器Pi上的執(zhí)行優(yōu)先級時(shí)考慮了線程Tj對處理器Pi的超高速緩存親和性CA(Tj,Pi),這隱含著同一時(shí)間上對同一線程的執(zhí)行優(yōu)先級的計(jì)算在不同處理器上能產(chǎn)生不同的值。具體地,在每一個(gè)調(diào)度點(diǎn)上將線程的當(dāng)前優(yōu)先級cp(Tj,t)(52)(與處理器無關(guān)的)增加(54)Δp(55)(0≤Δp≤ΔP)。ΔP為線程能從這一方式增加的最大的優(yōu)先級級數(shù)。Δp是通過某一單調(diào)函數(shù)ψ(CA(Tj,Pi))(56)從超高速緩存親和性CA(Tj,Pi)(57)計(jì)算的。CA(Tj,Pi)本身是從用本發(fā)明的裝置測定的線程Tj的超高速緩存足跡CFP(Tj,Pi)(59)通過單調(diào)函數(shù)(CFP(Tj,Pi))(58)計(jì)算的。從而這一執(zhí)行優(yōu)先級為線程的基本優(yōu)先級、時(shí)間及處理器的函數(shù),用其對該處理器的親和性表示ep(Pi,Tj,t)=cp(Tj,t)+ΔP(式2)cp(Tj,t)=bp(Tj)-ζ(Tj,t)Δp=ψ(Θ(CFP(Pi,Tj)))為了將這一點(diǎn)放置在具體的上下文中,現(xiàn)在用實(shí)例示出如何將本發(fā)明的裝置綜合進(jìn)通用的公平的基于UNIX的調(diào)度程序中。注意,本發(fā)明并不將這種綜合限制在這里所描述的一種上,而是熟悉本技術(shù)的人員應(yīng)能將這一策略結(jié)合進(jìn)其它調(diào)度算法中。通過引用將參考文獻(xiàn)[2]結(jié)合在此。圖6中所示為作為調(diào)度狀態(tài)的主要部分的中央調(diào)度矢量或調(diào)度隊(duì)列(60)。這一調(diào)度狀態(tài)是所有處理器共用的,并利用鎖定或其它公知的機(jī)制來適當(dāng)協(xié)調(diào)對其存取。這是必要的,因?yàn)楫?dāng)當(dāng)前運(yùn)行的線程自愿將處理器放棄給另一線程或當(dāng)在這一處理器上當(dāng)前運(yùn)行的線程用完時(shí)間量時(shí),調(diào)度程序代碼在每一個(gè)處理器上都執(zhí)行。調(diào)度隊(duì)列(60)概念性地組成隊(duì)列Qi的隊(duì)列,實(shí)際上作為隊(duì)列Qi的數(shù)組(61a至61z),其中各隊(duì)列Qi鏈接一組各保持諸如該線程的優(yōu)先級及保存的寄存器等狀態(tài)的線程控制塊TCB(62a至62z)。存在著最大的優(yōu)先級并從而在這一矢量中存在最大隊(duì)列。當(dāng)且僅當(dāng)Tj準(zhǔn)備好運(yùn)行并在當(dāng)前時(shí)間t上其當(dāng)前優(yōu)先級cp(Tj,t)為PRIOi時(shí)才將與線程Tj關(guān)聯(lián)的TCBj排隊(duì)到Qi中,其中O≤i≤PRIOmax。用TCBj表示的線程Tj是以基本優(yōu)先級bp(Tj)建立的,其中PRIOmax/2≤bp(Tj)<PRIOmax-ΔP。隨著每一時(shí)間量減量該線程的cp(Tj,t)直到它到達(dá)0或(bp(Tj)-PRIOmax/2)為止。在這一點(diǎn)上,再一次將其復(fù)位到bp(Tj)。
圖6示出描述調(diào)度程序如何想要根據(jù)線程的超高速緩存親和性增量線程的執(zhí)行優(yōu)先級的ΔP(63)的優(yōu)先級間隔。例如,假定重新加載瞬態(tài)模型以確定超高速緩存的親和性。如果重新加載瞬態(tài)非常小,如在必須重新取得以建立前一狀態(tài)的超高速緩存行的數(shù)目中所測定的,則調(diào)度程序?qū)⒃试S優(yōu)先級調(diào)節(jié)Δp(54)接近ΔP(63)。如果重新加載瞬態(tài)落到關(guān)鍵性閾值以下,調(diào)度程序并不考慮提高線程的優(yōu)先級。Θ(CFP(Tj,Pi))(58)所確定的CA(Tj,Pi)簡單地將是線程的超高速緩存足跡CFP(Tj,Pi)與其上一次執(zhí)行之后該線程的超高速緩存足跡,即重新加載瞬態(tài)CFP(Tj,Pi)stop之間的差。ψ(CA(Tj,Pi))函數(shù)(56)可以是相當(dāng)簡單的函數(shù)(如移位及位屏蔽操作或關(guān)于線程的CA值的表查找)。
由于任何線程的優(yōu)先級最多只能增加ΔP(63),調(diào)度程序只需要檢查與/或計(jì)算隊(duì)列Qcur至Qcur-(Δp-1)(61b…61d)的線程(62a…62f)的超高速緩存親和性。為了導(dǎo)出CA(Tj,Pi)值,必須在每一處理器的基礎(chǔ)上存儲(chǔ)關(guān)于超高速緩存足跡或超高速緩存親和性的某些信息。我們將這一每一處理器的值矢量稱作親和性實(shí)用矢量AUV(64)。取決于oid分配方法(單個(gè)的或成群的),AUV應(yīng)與不同的數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)。在單個(gè)分配方法中,AUV應(yīng)與線程控制塊TCB(65)本身關(guān)聯(lián)。在成群的oid分配法中,AUV應(yīng)與相關(guān)于該線程群的共享數(shù)據(jù)結(jié)構(gòu)(66)關(guān)聯(lián),例如如果一個(gè)進(jìn)程的所有線程共用同一oid,則與進(jìn)程控制塊關(guān)聯(lián)。AUV(64)可采取下述各種語義。在基于時(shí)間印記的算法中,如在先有技術(shù)部分中所描述的,位矢量便足以作為AUV,升高該線程上一次在其上運(yùn)行的處理器的位,或者如果上一次執(zhí)行是在太遠(yuǎn)的過去,便將位矢量清零。在這一情況中,AUV矢量中的各項(xiàng)AUV[i]表示為Biti(位i),并存儲(chǔ)二進(jìn)制超高速緩存親和性值。在重新加載瞬態(tài)模型的情況中,AUV[i]存儲(chǔ)線程上一次停止在處理器Pi上執(zhí)行時(shí)的超高速緩存足跡。
當(dāng)調(diào)度算法在處理器Pi上執(zhí)行時(shí)(如由于當(dāng)前運(yùn)行的線程的自愿放棄或由于定時(shí)器中斷),調(diào)度程序必須檢查隊(duì)列Qcur至Qcur-Δp的所有線程Tj并將它們的cp(Tj,Pi)增加ψ(Θ(CFP(Tj,Pi))),及確定最大值。為了獲得所有線程的CA(Tj,Pi)值,調(diào)度程序首先必須通過為這些線程的各個(gè)調(diào)用“getusage(Tj,oid)”來為各線程Tj檢索超高速緩存足跡。
從而,具有近似地相同的當(dāng)前優(yōu)先級的多個(gè)線程趨向于重復(fù)地在它們以前運(yùn)行的相同處理器上重復(fù)地調(diào)度,從而得到改進(jìn)的性能。當(dāng)前優(yōu)先級cp(Tj,t)降低ζ(Tj,t)意味著即使具有非常高的親和性的調(diào)度單位的執(zhí)行優(yōu)先級最終將落到具有較低超高速緩存親和性的線程的執(zhí)行優(yōu)先級以下,這保證了處理器的公平與靈敏的調(diào)度。
下面描述維護(hù)超高速緩存親和性實(shí)用狀態(tài)及為了減少與超高速緩存監(jiān)控單元的交互作用次數(shù)而檢驗(yàn)這一狀態(tài)的方法。如果查詢CMU的開銷是可觀的,這種減少便成為重要的。這些方法中沒有一種是可以萬能地應(yīng)用的,而是它們依賴于所選擇的oid分配算法。
在各線程維護(hù)單個(gè)oid的情況中,可應(yīng)用下述優(yōu)化。(65)中示出與這一情況相關(guān)的數(shù)據(jù)結(jié)構(gòu)。對于熟悉本技術(shù)的人員,顯而易見對于具有唯一oid的線程,如果該線程不在Pi上運(yùn)行,則該線程對處理器Pi的超高速緩存足跡CFP(Tj,Pi)及超高速緩存親和性CA(Tj,Pi)都不增加。從而,調(diào)度程序只要(a)對上一個(gè)運(yùn)行的線程Tj在一個(gè)時(shí)間量的結(jié)束上計(jì)算CA(Tj,Pi)last,及(b)當(dāng)且僅當(dāng)cp(Vj)+ψ(CA(Tj,Pi)last)>epmax(式3)時(shí)在線程選擇階段中重新計(jì)算CA(Tj,Pi)便已足夠,其中epmax為到目前為止找到的最大執(zhí)行優(yōu)先級。這一方案中的新線程應(yīng)已存儲(chǔ)最大的CA(Tj,Pi)last。這一算法導(dǎo)致對于具有低親和性的線程,只重新取出(“getusage”)CFP有限次數(shù)(通常只是一次),因?yàn)槊恳淮沃厝”WC新計(jì)算的CA(TjPi)last更小。對于帶有高超高速緩存親和性的線程,在調(diào)度進(jìn)程期間將更頻繁地重取其CFP。
在線程組成群(66)的情況中,上述假設(shè)不成立。然而,能將調(diào)度時(shí)間上的CMU請求次數(shù)減少到在隊(duì)列Qcur到Qcur-(Δp-1)(61b…61d)的集合中所表示的線程群的數(shù)目。每一個(gè)處理器矢量AUV是存儲(chǔ)在對同一線程群的所有線程公共的獨(dú)立數(shù)據(jù)結(jié)構(gòu)(67)中的,如進(jìn)程描述信息塊。此外,每一次調(diào)度嘗試時(shí)增量的時(shí)間印記,最好是每一個(gè)處理器的序號(66),指示在給定的處理器上為用oid標(biāo)識的群描述信息塊讀取CFP的上一個(gè)時(shí)間。每一個(gè)調(diào)度周期中給定線程群的CFP必須只讀取一次,這便是當(dāng)其序號(66)并不與調(diào)度周期的當(dāng)前序號匹配時(shí)。
在沒有一種上述優(yōu)化是滿意的情況中,可采用下述近似方法。它可用于唯一oid及分群的oid分配方法兩者。不是在每一個(gè)單一調(diào)度周期上訪問合格的線程或線程群的超高速緩存足跡,調(diào)度程序可以周期性地,如每第n個(gè)調(diào)度周期,對給定的線程或線程群Tj獲取CFP(Tj,Pi)。在所有其它調(diào)度周期中,調(diào)度程序能使用CFP的近似值,如先有技術(shù)部分中所述。例如,在重新加載瞬態(tài)方法中,調(diào)度程序能利用每一個(gè)調(diào)度周期必須只讀一次的超高速緩存失中信息,并根據(jù)從上一次讀取CFP(Tj,Pi)以來超高速緩存失中數(shù)目利用Markov鏈來估算CFP(Tj,Pi)的變化。這將一個(gè)估算因子引回調(diào)度算法中,然而,與先有技術(shù)部分中所描述的調(diào)度實(shí)踐相比,這一方法并不遭遇先有技術(shù)部分中所介紹的相同的問題。首先因?yàn)橹粚FP(Tj,Pi)映射到少數(shù)可能的Δp上,相互接近的CFP值最有可能映射到同一Δp上。從而,估算CFP(Tj,Pi)中的小誤差并不具有任何后果。由于周期性地將估算的CFP(Tj,Pi)值復(fù)位到實(shí)際測定的一個(gè)CFP(Tj,Pi)上,小誤差不能累積成對Δp計(jì)算結(jié)果上實(shí)際具有影響的大誤差。
權(quán)利要求
1.在具有多個(gè)處理器且各處理器具有至少一個(gè)關(guān)聯(lián)的超高速緩存的計(jì)算機(jī)系統(tǒng)中,在各處理器上調(diào)度線程的方法,包括(a)為各所述處理器的各所述線程測定超高速緩存足跡;以及(b)利用在步驟a中所確定的其各自的超高速緩存足跡,確定各所述線程對各所述處理器的親和性,其中至少按照其親和性調(diào)度各所述線程在各所述處理器上執(zhí)行。
2.權(quán)利要求1中所述方法,其中隨每一次超高速緩存失中更新所述超高速緩存足跡測定值。
3.權(quán)利要求1中所述方法,其中各所述超高速緩存的各線程的所述超高速緩存足跡是用所述各線程從所述各超高速緩存所取的活躍超高速緩存行的次數(shù)測定的。
4.權(quán)利要求3中所述方法,其中一個(gè)線程所取的活躍超高速緩存行的所述次數(shù)是通過下述各項(xiàng)測定的。a.指示哪一線程擁有取入到所述超高速緩存中的超高速緩存行的每一超高速緩存所有權(quán)標(biāo)識符寄存器;b.指示各所述超高速緩存行的擁有者線程的每一超高速緩存行擁有者標(biāo)識;c.每一超高速緩存計(jì)數(shù)器矢量,其中所述矢量的各分量指示所述線程之一對所述超高速緩存的對應(yīng)一個(gè)所具有的所述超高速緩存足跡;以及d.每一超高速緩存方法,以檢索各所述線程的計(jì)數(shù)器矢量(counter_vector)的內(nèi)容。
5.權(quán)利要求4中所述方法,其中所述線程的數(shù)目可超過該計(jì)數(shù)器矢量的大小。
6.權(quán)利要求1中所述方法,其中通過分配作為其對所述處理器的親和性的函數(shù)的執(zhí)行優(yōu)先級來調(diào)度各所述線程到處理器上執(zhí)行。
7.權(quán)利要求1中所述方法,其中對于各所述線程,所述執(zhí)行優(yōu)先級為每一線程使用者分配的基本優(yōu)先級、時(shí)間與超高速緩存親和性的組合。
8.權(quán)利要求1中所述方法,其中在所述處理器之一上執(zhí)行的調(diào)度程序能根據(jù)所述一個(gè)線程的早先計(jì)算的親和性來確定所述線程中哪一個(gè)產(chǎn)生最高的執(zhí)行優(yōu)先級,而不是每一個(gè)調(diào)度周期為所述線程重新計(jì)算執(zhí)行優(yōu)先級。
9.一種機(jī)器可讀的程序存儲(chǔ)裝置,其具體地實(shí)現(xiàn)機(jī)器可執(zhí)行的指令程序,來執(zhí)行用于在具有多個(gè)處理器的計(jì)算機(jī)系統(tǒng)中調(diào)度線程的方法步驟,所述方法步驟包括a.為各所述處理器的各所述線程測定超高速緩存足跡;以及b.利用在步驟a中所確定的其各目的超高速緩存足跡確定各所述線程對各所述處理器的親和性,其中至少按照其親和性調(diào)度各所述線程在各所述處理器上執(zhí)行。
全文摘要
一種監(jiān)控相關(guān)線程在給定的處理器及其關(guān)聯(lián)的超高速緩存上的超高速緩存足跡的技術(shù),從而使操作系統(tǒng)能執(zhí)行更好的超高速緩存靈敏的調(diào)度。線程在超高速緩存中的足跡的函數(shù)可用作該線程對該超高速緩存的處理器的親和性的指示。本發(fā)明描述了通過根據(jù)所有權(quán)登記及超高速緩存監(jiān)控單元確定的超高速緩存使用保持超高速緩存行的狀態(tài)及所有權(quán)計(jì)數(shù)來精確地測定線程在給定的處理器及其關(guān)聯(lián)的超高速緩存上的超高速緩存足跡的裝置。
文檔編號G06F12/08GK1239249SQ99106950
公開日1999年12月22日 申請日期1999年5月31日 優(yōu)先權(quán)日1998年6月17日
發(fā)明者H·弗蘭克, P·C·帕特奈克, Y·A·巴蘭斯基, O·Y·克里格 申請人:國際商業(yè)機(jī)器公司