專利名稱:多核計(jì)算機(jī)中的遠(yuǎn)程核操作的制作方法
技術(shù)領(lǐng)域:
本發(fā)明計(jì)算機(jī)技術(shù),尤其涉及多核處理器。
背景技術(shù):
多核處理器越來越廣泛,且在許多應(yīng)用領(lǐng)域中被用于給出性能增益,其中軟件進(jìn)程被并行化使得它們在多個(gè)核上同時(shí)運(yùn)行。每個(gè)核可被認(rèn)為是執(zhí)行對指令的讀取和執(zhí)行的處理器的一部分;例如,每個(gè)核可以是單個(gè)計(jì)算系統(tǒng)內(nèi)的中央處理單元(CPU)。一般而言,單核處理器一次只能處理一個(gè)指令序列。多核處理器具有兩個(gè)或更多的獨(dú)立核,這些獨(dú)立的核可在諸如芯片或芯片封裝之類的單個(gè)物理器件上被提供。多核可能具有或可能不具有對共享物理存儲(chǔ)器的訪問,但本申請關(guān)于確實(shí)具有共享物理存儲(chǔ)器的多核處理器。一個(gè)或多個(gè)共享物理存儲(chǔ)器可用于允許多核之間的通信,并且可以是隨機(jī)存取存儲(chǔ)器(RAM)或其他合適的存儲(chǔ)器的塊。通常提供分層結(jié)構(gòu)的高速緩存來加速從核到存儲(chǔ)器的存儲(chǔ)器訪問。通過使用互連設(shè)備,核、高速緩存和存儲(chǔ)器通常彼此相連。然而,以此方式使用共享物理存儲(chǔ)器帶來技術(shù)障礙。例如,各高速緩存之間的相干性通常使用高速緩存相干性協(xié)議來維護(hù)。然而,高速緩存相干性機(jī)制在計(jì)算上是昂貴的,且使用有價(jià)值的互連資源。以下描述的各實(shí)施例不限于解決使用共享物理存儲(chǔ)器的已知多核處理器的任何或全部缺點(diǎn)的實(shí)現(xiàn)。
發(fā)明內(nèi)容
下面呈現(xiàn)了本發(fā)明的簡要概述,以便向讀者提供基本理解。本發(fā)明內(nèi)容不是本公開的詳盡概述,并且不標(biāo)識(shí)本發(fā)明的關(guān)鍵/重要元素,也不描述本發(fā)明的范圍。其唯一的目的是以簡化形式呈現(xiàn)此處所公開的精選概念,作為稍后呈現(xiàn)的更詳細(xì)的描述的序言。描述了具有共享物理存儲(chǔ)器的多核處理器。在一實(shí)施例中,發(fā)送方核向目的地核發(fā)送存儲(chǔ)器寫請求,使得目的地核可對該請求采取動(dòng)作,如同該請求源自目的地核那樣。在一示例中,一數(shù)據(jù)結(jié)構(gòu)在共享物理存儲(chǔ)器中被配置,并且被映射成對于發(fā)送方核和目的地核是可訪問的。在一示例中,共享數(shù)據(jù)結(jié)構(gòu)被用作發(fā)送方核與目的地核之間的用于使用存儲(chǔ)器寫請求來承載數(shù)據(jù)的消息通道。在一實(shí)施例中,使用共享物理存儲(chǔ)器來啟用一通知機(jī)制,以便通過更新通知數(shù)據(jù)結(jié)構(gòu)來向目的地核通知各事件。在一示例中,通知機(jī)制在目的地核觸發(fā)通知進(jìn)程,以告知通知的接收進(jìn)程。通過結(jié)合附圖參考以下詳細(xì)描述,可更易于領(lǐng)會(huì)并更好地理解許多附帶特征。
根據(jù)附圖閱讀以下詳細(xì)描述,將更好地理解本發(fā)明,在附圖中圖I是兩個(gè)多核計(jì)算機(jī)的示意圖,其中一個(gè)多核計(jì)算機(jī)具有共享存儲(chǔ)器而另一個(gè)沒有;圖2是多核計(jì)算機(jī)的示例核的示意圖3是多核計(jì)算機(jī)的另一示例核的示意圖;圖4是具有分層高速緩存和共享物理存儲(chǔ)器的多核計(jì)算機(jī)的示意圖;圖5是在多核計(jì)算機(jī)中各核之間發(fā)送存儲(chǔ)器寫請求、接收該指令并執(zhí)行它的方法的流程圖;
圖6是用于與圖5的方法一起使用的配置過程的更多細(xì)節(jié)的流程圖;圖7是發(fā)送存儲(chǔ)器寫請求的方法的流程圖;圖8是標(biāo)識(shí)目的地核的方法的流程圖;圖9是讀取由存儲(chǔ)器寫請求先前更新的數(shù)據(jù)的方法以及當(dāng)不再需要從另一個(gè)核接收的數(shù)據(jù)時(shí)的方法的流程圖;圖10是從遠(yuǎn)程核接收存儲(chǔ)器寫請求的方法的流程圖;圖11是通知進(jìn)程的流程圖;圖12是在接收方核用于使用輕推來實(shí)現(xiàn)通知進(jìn)程的一過程的流程圖;圖13示出可在其中實(shí)現(xiàn)本文所描述的遠(yuǎn)程存儲(chǔ)器寫入以及通知進(jìn)程的各實(shí)施例的示例性的基于多核計(jì)算的設(shè)備。在各個(gè)附圖中使用相同的附圖標(biāo)記來指代相同的部件。
具體實(shí)施例方式下面結(jié)合附圖提供的具體實(shí)施方式
旨在作為本發(fā)明示例的描述,并不旨在表示可以構(gòu)建或使用本發(fā)明示例的唯一形式。本描述闡述了本發(fā)明示例的功能,以及用于構(gòu)建和操作本發(fā)明示例的步驟的序列。然而,可以通過不同的示例來實(shí)現(xiàn)相同或等效功能和序列。雖然在本文中將本發(fā)明的示例描述并示出為在具有共享物理存儲(chǔ)器而不具有高速緩存相干性的多核計(jì)算機(jī)系統(tǒng)中實(shí)現(xiàn),但是所描述的系統(tǒng)只是作為示例而非限制來提供的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明的示例適于在各種不同類型的多核計(jì)算機(jī)系統(tǒng)(包括具有高速緩存相干性的那些)中應(yīng)用。圖I是兩個(gè)多核計(jì)算機(jī)101、104的示意圖,其中一個(gè)多核計(jì)算機(jī)具有共享存儲(chǔ)器而另一個(gè)沒有。第一多核計(jì)算機(jī)101包括兩個(gè)節(jié)點(diǎn)100、102,其各自具有核106以及高速緩存108。如圖所示,每一節(jié)點(diǎn)具有其自己的存儲(chǔ)器110,且這些節(jié)點(diǎn)使用網(wǎng)絡(luò)接口 112進(jìn)行通信。作為對比,這里所描述的實(shí)施例使用具有共享物理存儲(chǔ)器的、諸如圖I中被示作計(jì)算機(jī)104的多核計(jì)算機(jī)。計(jì)算機(jī)104具有兩個(gè)核114,其各自具有高速緩存116。這些核共享單個(gè)物理存儲(chǔ)器118,該物理存儲(chǔ)器118可以是隨機(jī)存取存儲(chǔ)器(RAM)或其他合適類型的存儲(chǔ)器。這些核可以是不同的類型,例如,有些可以是為諸如圖形處理等特定任務(wù)設(shè)計(jì)的,而有些可以是為通用計(jì)算設(shè)計(jì)的。由于各種原因,將數(shù)據(jù)寫入和寫出物理存儲(chǔ)器118是耗時(shí)的。例如,每個(gè)核114可作為與物理存儲(chǔ)器118在物理上位置獨(dú)立的芯片來提供。為了允許更快的數(shù)據(jù)訪問,每個(gè)核可具有相關(guān)聯(lián)的高速緩存116。盡管在圖I中示出每一核僅一個(gè)高速緩存,但實(shí)際上可以存在采用分層結(jié)構(gòu)的多個(gè)高速緩存,以便增加可用的高速緩存能力。使用高速緩存使得數(shù)據(jù)訪問能被加速,但這也意味著在某些情況下,從高速緩存訪問的數(shù)據(jù)可能不是最新的。為了使得最新近的數(shù)據(jù)能被使用,先前已經(jīng)使用了高速緩存相干性機(jī)制。高速緩存相干性機(jī)制可能需要大量的互連資源。在某些情形中,高速緩存相干性機(jī)制可使用多達(dá)30%的多核計(jì)算機(jī)的功率和互連資源。圖2是多核計(jì)算機(jī)的示例核的示意圖。為清楚起見,沒有示出核的許多常規(guī)組件。核包括一個(gè)或多個(gè)寄存器202,寄存器202包括為允許實(shí)現(xiàn)如下文參考圖11和12更詳細(xì)地描述的通知進(jìn)程而提供的多個(gè)通知控制寄存器204。核還包括擴(kuò)展的轉(zhuǎn)換后備緩沖器206 (TLB),該擴(kuò)展的轉(zhuǎn)換后備緩沖器206被擴(kuò)展以使得用于標(biāo)識(shí)多個(gè)遠(yuǎn)程核中的哪一個(gè)將是發(fā)送進(jìn)程的目的地核的進(jìn)程能夠?qū)崿F(xiàn)??蛇x地,在通知被保護(hù)的情況下,提供通知白名單(NWL) 208供在實(shí)現(xiàn)該通知進(jìn)程時(shí)使用。這將在本文稍后更詳細(xì)地描述??蛇x地,提供了線程轉(zhuǎn)換緩沖器210 (TTB),并且同樣可選地,提供了通知處理單元212。圖3是多核計(jì)算機(jī)的另一示例核300的示意圖。為清楚起見,沒有示出核的許多常規(guī)組件。該核包括寄存器302,該寄存器302按照與上述對圖2的描述同樣的方式包括通知控制寄存器304。提供了轉(zhuǎn)換后備緩沖器306以及單獨(dú)的通信轉(zhuǎn)換緩沖器(CTB) 308,該通信轉(zhuǎn)換緩沖器(CTB) 308被用于使得用于標(biāo)識(shí)多個(gè)遠(yuǎn)程核中的哪一個(gè)將是發(fā)送進(jìn)程的目的地核的進(jìn)程能夠?qū)崿F(xiàn)。如上文參考圖2所描述的,還可提供通知白名單310??蛇x地,提供了線程轉(zhuǎn)換緩沖器312(TTB),并且同樣可選地,提供了通知處理單元314。
圖4是具有分層高速緩存和共享物理存儲(chǔ)器的多核計(jì)算機(jī)的示意圖。在這一示例中,存在四個(gè)核400、402、404、406(但這并不是必需的)以及分層高速緩存結(jié)構(gòu)。可以提供兩個(gè)或更多的核。每個(gè)核具有一級高速緩存。例如,核1400具有一級高速緩存408,核2具有一級高速緩存410,核3具有一級高速緩存412,以及核4具有一級高速緩存414。在這一示例中,提供了兩個(gè)二級高速緩存416和418 ;每個(gè)二級高速緩存都由兩個(gè)一級高速緩存所共享。還提供了由二級高速緩存416、418所共享的三級高速緩存420。三級高速緩存420與物理存儲(chǔ)器422通信。圖4中所示的分層高速緩存結(jié)構(gòu)僅為示例,并且可以以每一級處不同數(shù)量的高速緩存以及高速緩存共享的不同安排來使用其他級的高速緩存結(jié)構(gòu)。每個(gè)核在物理上最接近于它的一級高速緩存,并且由于芯片上的空間要求這限制了一級高速緩存的物理大小。更高級的高速緩存與核距離更遠(yuǎn),因此在物理上可以更大。隨著離核的距離增加,高速緩存與核之間的通信所花費(fèi)的時(shí)間也增加。各核、高速緩存以及存儲(chǔ)器通過互連來連接,且該互連被用于在它們之間移動(dòng)數(shù)據(jù)。使用高速緩存相干性機(jī)制的多核計(jì)算機(jī)經(jīng)由該互連在分層高速緩存結(jié)構(gòu)的各分支之間發(fā)送數(shù)據(jù)和元數(shù)據(jù),以便將最新數(shù)據(jù)提供給各核處的進(jìn)程。跨分層高速緩存結(jié)構(gòu)的互連發(fā)送數(shù)據(jù)和元數(shù)據(jù)是耗時(shí)、復(fù)雜且資源密集的。在一實(shí)施例中,在多核計(jì)算機(jī)處不提供高速緩存相干性機(jī)制。例如,圖4中的核4406可訪問值存在于高速緩存414中的存儲(chǔ)器位置,而核I可訪問值也存在于高速緩存408中的相同存儲(chǔ)器位置。如果核4對該存儲(chǔ)器位置進(jìn)行寫,則在沒有高速緩存相干性的情況下,核I就不能確信當(dāng)它從其高速緩存408中讀取時(shí)看到該新的值。通過使用如現(xiàn)在參考圖5所描述的在各核之間發(fā)送存儲(chǔ)器寫請求的進(jìn)程,確保了最新的數(shù)據(jù),而無需高速緩存相干性。例如,圖4中的箭頭424以高層次示出了這一進(jìn)程。如果核I 400處運(yùn)行的進(jìn)程從核4 406處運(yùn)行的進(jìn)程取得輸入,則核4可被配置成向核I 400的一級高速緩存發(fā)送存儲(chǔ)器寫請求。這由箭頭424示出。存儲(chǔ)器寫請求在高速緩存I 408處被接收,且可被解釋為直接從核I 400所接收的存儲(chǔ)器寫。以此方式,來自核4處運(yùn)行的進(jìn)程的數(shù)據(jù)按簡單且有效的方式被提供給核I。存儲(chǔ)器寫請求可用于在共享物理存儲(chǔ)器處的數(shù)據(jù)結(jié)構(gòu)中高效地構(gòu)建消息通道。獲得了性能優(yōu)點(diǎn)。例如,提供了使用發(fā)送方核和目的地核之間的單個(gè)底層消息來操作的快速路徑消息發(fā)送操作。這降低了個(gè)體通信上的開銷。這也維護(hù)了該實(shí)現(xiàn)方式內(nèi)的局部性,使得發(fā)送方核向目的地核的發(fā)送不涉及某一其他核。 在另一實(shí)施例中,在多核計(jì)算機(jī)處提供了高速緩存相干性機(jī)制,諸如圖4所示。在該情況下,可使用與上述在各核之間發(fā)送存儲(chǔ)器寫請求相同的進(jìn)程。在該情況下,發(fā)送存儲(chǔ)器寫請求的進(jìn)程使得高速緩存相干性機(jī)制上的負(fù)擔(dān)降低,且這給出了性能優(yōu)點(diǎn)。參考圖4所描述的示例使用單個(gè)共享物理存儲(chǔ)器。然而,在使用具有超過一個(gè)共享物理存儲(chǔ)器的架構(gòu)的情況下,在各核之間發(fā)送存儲(chǔ)器寫請求的進(jìn)程以及本文描述的其他進(jìn)程同樣可適用。例如,每插槽一個(gè)存儲(chǔ)器的非均勻存儲(chǔ)器架構(gòu)(NUMA)。圖5是在多核計(jì)算機(jī)中的各核之間發(fā)送存儲(chǔ)器寫請求、接收該指令并執(zhí)行它的方法的流程圖。該方法包括發(fā)送方核處的各步驟且還包括目的地核處的各步驟。在由多核計(jì)算機(jī)中兩個(gè)或更多的核所共享的物理存儲(chǔ)器處配置一數(shù)據(jù)結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)與發(fā)送方核以及目的地核(這兩個(gè)核都在多核計(jì)算機(jī)中)相關(guān)聯(lián)500。數(shù)據(jù)結(jié)構(gòu)可以是軟件用于在發(fā)送方核與目的地核之間建立消息通道的任何方便方法。關(guān)于這一配置過程的更多細(xì)節(jié)在下文參考圖6給出。使用互連將存儲(chǔ)器寫請求從發(fā)送方核發(fā)送504到目的地核。以此方式,對數(shù)據(jù)結(jié)構(gòu)的更新可作為從發(fā)送方核到目的地核的存儲(chǔ)器寫請求來發(fā)送。在發(fā)送方核處執(zhí)行的用于實(shí)現(xiàn)發(fā)送存儲(chǔ)器寫請求的各功能步驟的示例在下文參考圖7描述。在目的地核處接收506存儲(chǔ)器寫請求??杀粓?zhí)行以讀取由存儲(chǔ)器寫請求在目的地核處先前更新的值的各功能步驟的示例在下文參考圖9描述。在目的地核處執(zhí)行508存儲(chǔ)器寫請求,如同該存儲(chǔ)器寫請求源自目的地核那樣。即,存儲(chǔ)器寫請求是從目的地核執(zhí)行的。由于存儲(chǔ)器寫請求是從目的地核寫入的,因此更新的可見性對于目的地核是相干的。在某些示例中,這是通過將值寫入目的地核的本地高速緩存(一級高速緩存)來完成的,使得它對于目的地核處運(yùn)行的各進(jìn)程是可見的。其他示例在本文檔中稍后參考圖10來描述??蛇x地,目的地核可指示它已完成了處理已發(fā)送給它的值。在該情況下,接收方核執(zhí)行(510) “數(shù)據(jù)已完成”指令以指示不再需要該值??蓪⒃撝祻慕邮辗胶说谋镜馗咚倬彺嬷袆h除(512),而無需將該值寫出至共享物理存儲(chǔ)器。圖6給出配置消息通道的過程的更多細(xì)節(jié)。發(fā)送方核以及目的地核處的操作系統(tǒng)內(nèi)核將物理存儲(chǔ)器的公共區(qū)域映射到這些核上運(yùn)行的各進(jìn)程的地址空間。例如,當(dāng)在兩個(gè)進(jìn)程之間要使用消息通道時(shí),則物理存儲(chǔ)器的公共區(qū)域被映射到這些進(jìn)程的虛擬地址空間。物理存儲(chǔ)器的公共區(qū)域包括作為圖5的方法的一部分來形成的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)可采取各種形式。例如,它可以是環(huán)形緩沖區(qū)、存儲(chǔ)器塊、向量、隊(duì)列或堆、或其他數(shù)據(jù)結(jié)構(gòu)。操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)隨后被更新以配置消息通道,例如以便指示在發(fā)送方核處寫入數(shù)據(jù)結(jié)構(gòu)的任何數(shù)據(jù)都要被發(fā)送到目的地核。操作系統(tǒng)還可配置例如,在發(fā)送方核處數(shù)據(jù)結(jié)構(gòu)可被寫入但不被讀取,而在目的地核處,數(shù)據(jù)結(jié)構(gòu)可被讀取但不被寫入。用于使用通道來發(fā)送消息以及用于實(shí)現(xiàn)通知的各操作隨后可使用無特權(quán)代碼來執(zhí)行,也被成為用戶模式。以此方式,常見情況的操作可在用戶模式中執(zhí)行。例如,這允許消息從用戶模式中被發(fā)送且被傳遞到目的地核,而無需目的地核上的內(nèi)核模式中斷。許多消息通道可使用圖6的過程來建立,且用于發(fā)送存儲(chǔ)器寫請求和通知(如以下描述的)。以此方式,該過程對于大量通信通道是有效的。例如,以允許系統(tǒng)進(jìn)程與該系統(tǒng)中的其他進(jìn)程進(jìn)行通信。
現(xiàn)在描述偽代碼操作,這些偽代碼操作提供了如何可實(shí)現(xiàn)圖5的發(fā)送和接收進(jìn)程的各功能示例。在實(shí)踐中,某一實(shí)現(xiàn)可改編現(xiàn)有指令以執(zhí)行這些功能。例如,通過將前綴添加在現(xiàn)有指令之前、或通過標(biāo)記虛擬或物理存儲(chǔ)器的特定頁來指示對它們的操作應(yīng)按某一方式來執(zhí)行以實(shí)現(xiàn)此處描述的功能。處理器狀態(tài)標(biāo)志也可用于指示要被執(zhí)行以實(shí)現(xiàn)此處描述的功能的存儲(chǔ)器操作。某一實(shí)現(xiàn)可要求由這些偽代碼操作所訪問的存儲(chǔ)器位置不被多核處理器處可能正在進(jìn)行的其他進(jìn)程的普通存儲(chǔ)器讀和寫并發(fā)地訪問。這樣的并發(fā)訪問可被認(rèn)為是競爭條件的形式。參考圖7來描述偽代碼數(shù)據(jù)_發(fā)送(data_send)操作700。這可用于實(shí)現(xiàn)將存儲(chǔ)器寫請求從發(fā)送方核發(fā)送到目的地核的進(jìn)程(見圖5的步驟504)。這一操作可以取兩個(gè)自變量v_addr和val。v_addr是在發(fā)送方核的虛擬存儲(chǔ)器中表示數(shù)據(jù)結(jié)構(gòu)的地址,而val是要由存儲(chǔ)器寫請求寫入的值。發(fā)送方核可按各種方式獲取“val”?,F(xiàn)在給出各示例一個(gè)實(shí)現(xiàn)可從一組處理器寄存器的內(nèi)容中取得“val”。一替換實(shí)現(xiàn)可從對于發(fā)送方核可訪問的存儲(chǔ)器的內(nèi)容中取得“ val ”,存儲(chǔ)器的內(nèi)容諸如從發(fā)送方核的高速緩存的觀點(diǎn)來看“ v_addr ”的當(dāng)前內(nèi)容。一實(shí)現(xiàn)可以對v_addr和val施加約束,諸如v_addr必需與高速緩存行的開始對齊,或val的大小必需是完整的高速緩存行,或val的大小以及v_addr的對齊使得在較大范圍的地址上不需要讀-修改-寫來實(shí)現(xiàn)該寫入。在發(fā)送方核處,一進(jìn)程可通過對v_addr執(zhí)行702地址轉(zhuǎn)換和保護(hù)檢查來實(shí)現(xiàn)這樣的數(shù)據(jù)_發(fā)送(data_send)操作,以獲取數(shù)據(jù)結(jié)構(gòu)在物理存儲(chǔ)器中相關(guān)聯(lián)的物理地址p_addr0這是使用轉(zhuǎn)換后備緩沖器實(shí)現(xiàn)的。該發(fā)送方核進(jìn)程查找704目的地核以尋找v_addr。關(guān)于這一查找的更多細(xì)節(jié)在下文參考圖8給出。隨后,在消息通道上將遠(yuǎn)程_寫(p_addr,val) (remote_write (p_addr, val))消息發(fā)送到目的地核。該發(fā)送方核進(jìn)程查找704目的地核以尋找v_addr (見圖8的框800)。該查找可以按多種方式來實(shí)現(xiàn)。在一個(gè)示例中,在每個(gè)核處使用802緩沖器以高速緩存控制元數(shù)據(jù)。該緩沖器可被稱為通信轉(zhuǎn)換緩沖器(CTB)??刂圃獢?shù)據(jù)可包括目的核或目的地高速緩存的標(biāo)識(shí)符。或者,控制元數(shù)據(jù)可包括目的地軟件線程的標(biāo)識(shí)符以及用于將該軟件線程標(biāo)識(shí)符轉(zhuǎn)換成目的地核或目的地高速緩存的標(biāo)識(shí)符的單獨(dú)機(jī)制(線程轉(zhuǎn)換緩沖器TTB是執(zhí)行該第二映射的一種方式)。CTB中的查找可與轉(zhuǎn)換后備緩沖器查找并行進(jìn)行806。如果在CTB中沒找到808條目,則可生成810異常并且將執(zhí)行切換到操作系統(tǒng)內(nèi)核。隨后操作系統(tǒng)內(nèi)核能夠使用軟件管理的數(shù)據(jù)結(jié)構(gòu)來找到適當(dāng)?shù)目刂圃獢?shù)據(jù)并且將其安裝在CTB中。隨后可重新執(zhí)行816失敗的指令。在另一示例中,如果在CTB中沒找到條目808,則CTB可由硬件812從軟件維護(hù)的數(shù)據(jù)結(jié)構(gòu)中填充。在另一示例中,使用擴(kuò)展的轉(zhuǎn)換后備緩沖器(擴(kuò)展的TLB)804。例如,TLB被擴(kuò)展以包括控制元數(shù)據(jù)。在該情況下,圖7的步驟702和704被集成為TLB查找的一部分。通過配置CTB和/或TLB,系統(tǒng)軟件能夠控制哪些進(jìn)程可以進(jìn)行通信。受保護(hù)的進(jìn)程間通信被實(shí)現(xiàn),這意味著可在不同進(jìn)程之間發(fā)送消息,而不是僅在同一進(jìn)程中操作的各線程之間發(fā)送消息。這使得各進(jìn)程能夠被用于實(shí)現(xiàn)各系統(tǒng)功能,如在多內(nèi)核或微內(nèi)核操作系統(tǒng)中一樣參考圖9來描述偽代碼數(shù)據(jù)_接收(data_receive)操作900。這可用于實(shí)現(xiàn)讀取由存儲(chǔ)器寫請求在目的地核處先前更新的數(shù)據(jù)的進(jìn)程(見圖5的步驟506和508)。數(shù)據(jù)接_收操作900取一個(gè)自變量v_addr,該自變量是在接收方核的虛擬地址空間中表示數(shù)據(jù)結(jié)構(gòu)的地址。目的地核處的該進(jìn)程對v_addr執(zhí)行地址轉(zhuǎn)換和保護(hù)檢查902,以獲取實(shí)現(xiàn)消息通道的數(shù)據(jù)結(jié)構(gòu)在共享存儲(chǔ)器中的物理地ap_addr。該進(jìn)程或者從本地高速緩存中或者取回p_addr的內(nèi)容并放入本地高速緩存,來返回904p_addr的內(nèi)容。參考圖9來描述偽代碼數(shù)據(jù)_已完成(data_done)操作906。這可用于實(shí)現(xiàn)用信號通知數(shù)據(jù)不再被某一進(jìn)程需要的進(jìn)程(見圖5的步驟510和512)。數(shù)據(jù)_已完成取一個(gè)自變量v_addr。對v_addr執(zhí)行地址和轉(zhuǎn)換檢查908,以獲取物理地址p_addr。p_addr的內(nèi)容在目的地核的本地高速緩存中被標(biāo)記為干凈的 P—addr的內(nèi)容則不需要被寫出到存儲(chǔ)器。參考圖10來描述偽代碼遠(yuǎn)程_寫(remote_write)操作1000。這可用于實(shí)現(xiàn)在目的地核處執(zhí)行存儲(chǔ)器寫請求的進(jìn)程(見圖5的步驟508)。遠(yuǎn)程_寫取兩個(gè)變量p_addr以及要被接收到的存儲(chǔ)器寫請求寫的值。如果在本地于目的地核的一高速緩存中存在口_addr,則被高速緩存的值被更新為val 1002。如果本地于目的地核的高速緩存中不存在p_addr 1004,則進(jìn)行以下操作之一將寫轉(zhuǎn)發(fā)1006到下一級的高速緩存存儲(chǔ)器層級,作為對p_addr的寫入;或者,可能通過收回(evict)某一其他行,在本地于目的地核的高速緩存中分配1008空間,由此將p_addr插入到本地于目的地核的該高速緩存。某一實(shí)現(xiàn)要求用于在這兩個(gè)替換方案之間進(jìn)行選擇的策略;在它們之間進(jìn)行選擇涉及以下兩者之間的折衷在數(shù)據(jù)到達(dá)時(shí)在目的地核上消耗高速緩存空間(無需知道該數(shù)據(jù)是否在從高速緩存中被驅(qū)逐之前將被讀取),(在數(shù)據(jù)不存儲(chǔ)在高速緩存中,但數(shù)據(jù)隨后被訪問的情況下)在目的地核上招致高速緩存未命中?,F(xiàn)在給出策略的兩個(gè)示例?!澳J(rèn)轉(zhuǎn)發(fā)”策略是如果存在高速緩存條目則更新該高速緩存條目,否則,將該更新轉(zhuǎn)發(fā)到存儲(chǔ)器。如果期望一個(gè)或多個(gè)位置是遠(yuǎn)程_寫請求的目標(biāo),則軟件可使用常規(guī)的預(yù)取或讀取指令來將該一個(gè)或多個(gè)位置帶入高速緩存中?!澳J(rèn)緩沖”策略是如果目的地線程正在運(yùn)行,則在高速緩存中對更新進(jìn)行緩沖,如果目的地線程不在運(yùn)行,則將該更新轉(zhuǎn)發(fā)到存儲(chǔ)器。這需要(i)將目的地-線程-ID添加到遠(yuǎn)程_寫請求的內(nèi)容,以及(ii)將當(dāng)前-線程-ID狀態(tài)寄存器添加到該核?!澳J(rèn)緩沖”的變體是將由遠(yuǎn)程_寫請求所使用的高速緩存空間限制為高速緩存的子集;例如,在4路組相聯(lián)高速緩存中,遠(yuǎn)程_寫請求可被約束為將未被緩沖的數(shù)據(jù)寫入各路中的一路?,F(xiàn)在描述使用如圖5中所建立的共享存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)的通知進(jìn)程。該通知可用于各種不同的目的,例如,用于指示是時(shí)候執(zhí)行垃圾收集、或是進(jìn)出退出的時(shí)候、或給定的消息通道需要注意。在另一示例中,通知可用于喚醒休眠的核或使核斷電來作為節(jié)能進(jìn)程的一部分。該通知進(jìn)程可與此處所描述的向遠(yuǎn)程核發(fā)送存儲(chǔ)器寫請求的進(jìn)程結(jié)合使用,因此該通知進(jìn)程可被稱為“遠(yuǎn)程通知”進(jìn)程。用于通知的存儲(chǔ)器區(qū)域與普通存儲(chǔ)器并且與消息傳遞存儲(chǔ)器區(qū)域相區(qū)分。用于實(shí)現(xiàn)消息通道的相同技術(shù)被用于遞送通知、發(fā)送“遠(yuǎn)程_通知(remote_notify) ”請求而不是“遠(yuǎn)程_寫”請求。通知數(shù)據(jù)結(jié)構(gòu)被配置在多核計(jì)算機(jī)的共享物理存儲(chǔ)器處。向參與通知方案的每個(gè)核通知1100該通知數(shù)據(jù)結(jié)構(gòu)。這在配置階段按類似于以上參考圖6所描述的方式來實(shí)現(xiàn)。在一示例中,通知數(shù)據(jù)結(jié)構(gòu)保持的位比特向量,每一位用于指示不同的條件。高速緩存行大小的向量可能是足夠的;如果需要更多位,則可使用多個(gè)向量來建立分層結(jié)構(gòu)。還可使用其他類型的數(shù)據(jù)結(jié)構(gòu)。專用通知高速緩存可用在每一核處,以保持通知數(shù)據(jù)結(jié)構(gòu)的內(nèi)容(而不是使用正常數(shù)據(jù)高速緩存條目)。可以這樣做以避免對性能重要的數(shù)據(jù)高速緩存的修改,但這不是必需的。
在發(fā)送方核處,獲取1102與事件集中的哪個(gè)事件已發(fā)生有關(guān)的信息。該信息被壓縮成緊湊的低層表示。例如,該信息可包括消息已在其上被發(fā)送的消息通道的列表,以及該緊湊的底層表示可包括位向量,每一位與一組消息通道相關(guān)聯(lián)??蛇x地,通知白名單由發(fā)送方核檢查1104。這使得受保護(hù)的通知方案能夠被實(shí)現(xiàn),稍后將更詳細(xì)地描述該方案。在一個(gè)實(shí)現(xiàn)中,通知白名單包括一系列(addr, val)對,每一對指示只要遠(yuǎn)程_通知請求中所攜帶的值僅包含“val ”中所設(shè)置的位,則該核執(zhí)行對地址“addr”的通知是有效的。如參考圖5所描述的,發(fā)送方核使用所建立的消息通道將存儲(chǔ)器通知請求從發(fā)送方核發(fā)送1106到目的地核。存儲(chǔ)器通知請求是寫入表示事件集中的哪一個(gè)事件已發(fā)生的值。存儲(chǔ)器通知請求在目的地核處被接收1108,且如同它是源自目的地核那樣被執(zhí)行1110,以便通過邏輯“或(0R)”操作來更新通知數(shù)據(jù)結(jié)構(gòu)。邏輯“或”操作是在由存儲(chǔ)器通知請求所指定的值與通知數(shù)據(jù)結(jié)構(gòu)中的現(xiàn)有值之間進(jìn)行的。這使用與哪些事件已發(fā)生有關(guān)的信息來更新通知數(shù)據(jù)結(jié)構(gòu)。如果通知數(shù)據(jù)結(jié)構(gòu)的地址在目的地核處被高速緩存,則更新1112發(fā)生在該高速緩存處。也可使用其他邏輯操作,包括但不限于,邏輯“與(AND)”、“異或(XOR) ”。如果通知數(shù)據(jù)結(jié)構(gòu)的地址在目的地核處沒有被高速緩存,則將更新1114轉(zhuǎn)發(fā)到存儲(chǔ)器。注意,存儲(chǔ)器通知請求與存儲(chǔ)器寫請求不同地被對待。這是因?yàn)榇鎯?chǔ)器通知請求要求請求中所攜帶的值(“val”)要使用邏輯或操作與存儲(chǔ)器的現(xiàn)有內(nèi)容組合,而不是簡單地被轉(zhuǎn)發(fā)到存儲(chǔ)器而不處理。各種機(jī)制對于執(zhí)行這一工作是可能的。給出兩個(gè)示例。首先,核可使用所有位被設(shè)置為I的二進(jìn)制值來代替“val”。該值可被轉(zhuǎn)發(fā)到存儲(chǔ)器以代替“val”。這可導(dǎo)致用信號發(fā)出偽通知,但不導(dǎo)致丟失真實(shí)通知。第二,核可包括負(fù)責(zé)將“val”與存儲(chǔ)器的現(xiàn)有內(nèi)容組合的通知處理單元。通知處理單元訪問機(jī)器的存儲(chǔ)器系統(tǒng),從存儲(chǔ)器中讀取當(dāng)前值,將其與“val ”組合,并且寫入所得值。在這一示例中,發(fā)送方核能夠向目的地核通知關(guān)于事件集中的哪個(gè)事件已經(jīng)發(fā)生。這是通過更新目的地核能夠監(jiān)視的通知數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的。如果目的地核正忙且沒有監(jiān)視通知數(shù)據(jù)結(jié)構(gòu),則它會(huì)錯(cuò)過事件。在另一實(shí)施例中,當(dāng)通知被接收時(shí),目的地核被輕推(nudge)或被積極地迫使以調(diào)用通知功能。為了實(shí)現(xiàn)“輕推”通知方案,可在目的地核處使用通知寄存器。在一示例中,提供了四個(gè)通知寄存器。這些通知寄存器被配置1200成保持監(jiān)視標(biāo)志、掩碼、受監(jiān)視的區(qū)域、以及通知目標(biāo)功能。掩碼指示通知機(jī)制是否應(yīng)執(zhí)行“輕推”操作。掩碼和受監(jiān)視的區(qū)域指示哪些特定通知應(yīng)導(dǎo)致“輕推”發(fā)生。通知目標(biāo)功能是要被積極地調(diào)用以便在事件發(fā)生時(shí)輕推目的地核的任何功能。參考圖12,當(dāng)通知從發(fā)送方核被接收1202時(shí),目的地核檢查其監(jiān)視標(biāo)志。如果設(shè)置了標(biāo)志,且如果通知的目的地地址在受監(jiān)視的區(qū)域中,且如果通知的值與掩碼的邏輯“與”為非零,則執(zhí)行輕推。為執(zhí)行輕推,核清除監(jiān)視標(biāo)志1204,原子地讀取并清除受監(jiān)視的區(qū)域的內(nèi)容,并且使用受監(jiān)視的區(qū)域的先前內(nèi)容作為參數(shù)來調(diào)用目標(biāo)通知功能。監(jiān)視標(biāo)志隨后被重置1206,且過程返回至等待通知1202。目的地核處的線程可與許多不同的消息發(fā)送者進(jìn)行交互,且通過使用遠(yuǎn)程通知進(jìn)程就可能避免要求目的地核線程輪詢大量消息通道。每一輪詢操作將要么要求對主存儲(chǔ)器的訪問,要么要求保持消息通道的頭部的本地高速緩存行。 通知進(jìn)程也可在高速緩存相干的硬件上實(shí)現(xiàn)。在這一情況下,受監(jiān)視的地址是一個(gè)或多個(gè)存儲(chǔ)器位置,且相干性消息被用于觸發(fā)通知。目的地核以共享或排他模式來保持包含受監(jiān)視的區(qū)域的行。當(dāng)目的地核丟失該行時(shí),目的地核在補(bǔ)償(back-off)延遲之后再次取回該行,并且評估是否需要遞送通知。(這可通過擴(kuò)展正常的高速緩存或作為單獨(dú)特殊情況的單條目高速緩存來完成)??傊?,高速緩存相干性機(jī)制在某些實(shí)施例中可用于互連多個(gè)核。在目的地核處,當(dāng)通知數(shù)據(jù)結(jié)構(gòu)的高速緩存相干性無效被注意到時(shí),對于通知數(shù)據(jù)結(jié)構(gòu)可從目的地核發(fā)送一取回。如上所述,通知白名單可選地被用于實(shí)現(xiàn)具有保護(hù)的通知方案,借此發(fā)送者能夠在特定位置內(nèi)僅設(shè)置特定一組位。這可在以下情況下使用發(fā)送者和目的地是分開的進(jìn)程(而不是相同進(jìn)程內(nèi)的各線程),或多個(gè)不同的發(fā)送者進(jìn)程被用于向相同的目的地進(jìn)程發(fā)送通知。在這兩種情況下,防止發(fā)送者能夠任意地設(shè)置通知是可能的。例如,操作系統(tǒng)安排發(fā)送者映射通知地址(通知數(shù)據(jù)結(jié)構(gòu)的地址)而無需用戶模式訪問。每個(gè)核保持新的“通知白名單”(NWL),該通知白名單包括與發(fā)送者相關(guān)聯(lián)的軟狀態(tài),該通知白名單列出準(zhǔn)許該發(fā)送者發(fā)送到的(地址、掩碼)對。白名單最初為空,且在線程轉(zhuǎn)換時(shí)被清除。在通知_發(fā)送(notify_Send)操作上,搜索NWL以尋找目標(biāo)地址,且將通知值與可允許的掩碼相比較。如果存在未命中,或如果被通知的值沒有包含在可允許的掩碼內(nèi),則發(fā)送者上出現(xiàn)異常。與CTB —樣,發(fā)送者上的操作系統(tǒng)確定通知是否被允許,且如果被允許,則將條目添加到NWL中。以此方式,使CTB和NWL保持分開,因?yàn)镃TB處理諸如頁等聚集區(qū)域,而NWL處理個(gè)體地址??商峁┕仓噶?,以單個(gè)步驟來清除這兩者。在另一實(shí)施例中,NWL通過操作系統(tǒng)將經(jīng)準(zhǔn)許的通知位存儲(chǔ)在對于通知發(fā)送者只讀的存儲(chǔ)器中來實(shí)現(xiàn),并且CTB或擴(kuò)展的TLB為該頁存儲(chǔ)通知存儲(chǔ)器的目的地核以及物理地址(除了 NWL存儲(chǔ)器的物理地址以外)。當(dāng)發(fā)送方核試圖將通知寫入該頁時(shí),對應(yīng)的NWL高速緩存行首先被取回,邏輯“與”操作被執(zhí)行,且所得通知位隨后作為遠(yuǎn)程_通知_請求移動(dòng)到目的地核。可選地,某一實(shí)現(xiàn)可將虛擬地址連同物理地址或代替物理地址,放置在遠(yuǎn)程_寫和遠(yuǎn)程_通知請求中。在“經(jīng)接收者轉(zhuǎn)換的”實(shí)現(xiàn)中,遠(yuǎn)程_寫和遠(yuǎn)程_通知請求僅攜帶虛擬地址。轉(zhuǎn)換和保護(hù)檢查在遠(yuǎn)程寫進(jìn)程(1002)或遠(yuǎn)程_通知進(jìn)程(1110)之前在目的地核處被執(zhí)行。這樣的實(shí)現(xiàn)可在數(shù)據(jù)_發(fā)送和通知_發(fā)送操作中省略地址轉(zhuǎn)換和保護(hù)檢查。這樣的實(shí)現(xiàn)可將遠(yuǎn)程_寫和遠(yuǎn)程_通知操作約束為僅在對共享數(shù)據(jù)結(jié)構(gòu)具有相同虛擬存儲(chǔ)器映射的各進(jìn)程之間發(fā)生??蛇x地,目的地核可向發(fā)送方核指示它已經(jīng)完成了處理諸如遠(yuǎn)程_寫請求和遠(yuǎn)程_通知請求之類的請求。目的地核Cl可向發(fā)送方核C2發(fā)送響應(yīng)消息。在接收到響應(yīng)消息時(shí),核C2可以確信請求消息中所指定的存儲(chǔ)器更新對于核Cl處運(yùn)行的進(jìn)程是可見的。在一個(gè)實(shí)施例中,自動(dòng)地將響應(yīng)發(fā)送給所有請求。在另一實(shí)施例中,核C2指示是否需要響應(yīng)。核C2可使用各響應(yīng)通過在發(fā)出后續(xù)請求之前要求對早先請求的響應(yīng),來提供一系列遠(yuǎn)程_寫和遠(yuǎn)程_通知請求之間的排序。核C2還可使用各響應(yīng)經(jīng)由遠(yuǎn)程_柵欄(rem0te_fenCe)操作來提供遠(yuǎn)程_寫和遠(yuǎn)程_通知請求以及其他進(jìn)程之間的排序(以下描述)。本文所描述的遠(yuǎn)程寫進(jìn)程和遠(yuǎn)程通知進(jìn)程可與機(jī)器內(nèi)諸如線程的調(diào)度、線程的預(yù)清空、線程的遷移之類的操作系統(tǒng)功能集成。這在可隨時(shí)間在若干進(jìn)程之間對核進(jìn)行復(fù)用的多程序機(jī)器中是有益的?,F(xiàn)在給出關(guān)于此的更多細(xì)節(jié)。發(fā)送者Tl的預(yù)清空或遷移在預(yù)清空Tl之后,各進(jìn)程在切換到不同保護(hù)域中的線程之前清除CTB和NWL。CTB和NWL保持軟件狀態(tài),該軟件狀態(tài)可在下次Tl運(yùn)行時(shí)被重建。在遷移之后,確保消息不被重新排序是可能的。例如,假設(shè)Tl從核C-舊(C-Old) 遷移至核C-新(C-New),且Tl與核C2上的T2進(jìn)行通信。該實(shí)現(xiàn)可規(guī)定在完成從C-舊上的Tl接收到的消息之前,T2不處理從C-新上的Tl接收到的消息。在一示例實(shí)現(xiàn)中,可能足以推遲重新調(diào)度不同核上的線程直到實(shí)現(xiàn)特定的延遲已經(jīng)過去(例如,該實(shí)現(xiàn)內(nèi)可緩沖的最大消息數(shù)與處理每一消息可能需要的最大時(shí)間的乘積)。該限度是可接受的,因?yàn)樘幚泶鎯?chǔ)器_寫_請求(memory_write_request)和存儲(chǔ)器_通知_請求(memory_notify_request)消息不涉及軟件處理程序的執(zhí)行。該延遲可經(jīng)由新的“遠(yuǎn)程_柵欄”操作來暴露給軟件,該新的“遠(yuǎn)程_柵欄”操作或者(i)延遲直到將確保所有消息要被處理,或者(ii)與調(diào)用者的CTB中的每一遠(yuǎn)程核進(jìn)行通信并且在遠(yuǎn)程核已經(jīng)完成了處理來自發(fā)送者的所有消息時(shí)接收響應(yīng)。在替換實(shí)現(xiàn)中,“遠(yuǎn)程_柵欄”操作使用響應(yīng)消息來實(shí)現(xiàn)“遠(yuǎn)程_柵欄”操作延遲直到已經(jīng)從所有已發(fā)送的請求接收到響應(yīng)。接收者T2的預(yù)清空或遷移注意到在預(yù)清空T2之后不要求特殊工作;遠(yuǎn)程_寫和遠(yuǎn)程_通知消息可繼續(xù)到達(dá)且由最后運(yùn)行T2的核來處理(更新主存儲(chǔ)器而不是高速緩存)。這在T2阻塞以等待來自Tl的數(shù)據(jù)時(shí)尤其可能發(fā)生,因此可能期望允許該轉(zhuǎn)發(fā)繼續(xù)一段時(shí)間,預(yù)期著T2將在相同的核上被恢復(fù)(而不是向運(yùn)行Tl的核通知T2現(xiàn)在已被預(yù)清空)。如果T2從C-舊遷移至C-新,則安排未丟失的消息是可能的。消息在從C-舊轉(zhuǎn)發(fā)到主存儲(chǔ)器的情況下可能被丟失,而C-新具有本地高速緩存中的相同位置的非相干副本。因此,接收者可安排任何發(fā)送者知曉接收者的新位置?,F(xiàn)在描述取決于TTB (線程轉(zhuǎn)換緩沖器)是否被使用的兩個(gè)替換實(shí)現(xiàn)。沒有TTB的遷移這一問題類似于改變虛擬-物理頁轉(zhuǎn)換(實(shí)際上,CTB按照同TLB高速緩存與物理存儲(chǔ)器中的虛擬頁位置有關(guān)的信息相同的方式來高速緩存與線程位置有關(guān)的信息)??墒褂门cTLB關(guān)閉(TLB shoot-down)類似的方法來支持線程遷移。在C-新上恢復(fù)接收者T2之前,操作系統(tǒng)執(zhí)行以下過程標(biāo)識(shí)可能正在運(yùn)行對T2是發(fā)送者的線程的核的集合(例如,從被維持以供CTB未命中處理程序使用的信息中,或從當(dāng)設(shè)置Tl和T2之間的共享存儲(chǔ)器時(shí)所維護(hù)的數(shù)據(jù)結(jié)構(gòu)中)。向這些核發(fā)送處理器間中斷(IPI)。
IPI處理程序?qū)εcT2共享的頁的CTB條目進(jìn)行轉(zhuǎn)儲(chǔ)清除,并且執(zhí)行“遠(yuǎn)程_柵欄”以確保剛好在IPI之前發(fā)送的消息在IPI之后所發(fā)送的任何消息之前被接收。帶有TTB的遷移TTB提供各線程ID (例如,T2)與各核ID (例如,C-新)之間的間接層,因此遷移需要改變TTB中的映射而不是CTB條目中的映射。替換TTB實(shí)現(xiàn)可提供各TTB之間的硬件相干性。在一替換實(shí)現(xiàn)中,發(fā)送方核處所需的TLB、CTB或TTB更新可通過以下操作來執(zhí)行將TLB、CTB或TTB與TLB、CTB或TTB是其高速緩存的存儲(chǔ)器中的操作系統(tǒng)配置數(shù)據(jù)結(jié)構(gòu)的地址相關(guān)聯(lián),以及將該配置數(shù)據(jù)結(jié)構(gòu)的遠(yuǎn)程_寫_請求從正執(zhí)行遷移的核發(fā)送到發(fā)送方核。因此,TLB、CTB或TTB將按發(fā)送方核立即可見的方式被更新,而無需向發(fā)送方核發(fā)送中斷。對發(fā)送者Tl處的存儲(chǔ)器配置的改變操作系統(tǒng)可重新配置發(fā)送者Tl處的存儲(chǔ)器,使得發(fā)送者不再具有對物理頁的寫訪問權(quán)。例如,操作系統(tǒng)可移除Tl對物理頁面的寫許可,或者操作系統(tǒng)可改變虛擬-物理地址轉(zhuǎn)換,使得給定的虛擬頁映射到一不同的物理頁。在完成這樣的重新配置之前,操作系統(tǒng)可使用“遠(yuǎn)程_柵欄”以確保發(fā)送者Tl先前發(fā)出的寫在該重新配置發(fā)生之前已經(jīng)完成。對線程的調(diào)度在多程序系統(tǒng)中,在一個(gè)核上運(yùn)行的操作系統(tǒng)知道分配給該核的給定線程何時(shí)變得可運(yùn)行是有用的。通知機(jī)制的擴(kuò)展可用于通過以下方式來提供該信息允許向T2發(fā)送的通知隱式地用信號向操作系統(tǒng)表示T2已準(zhǔn)備好運(yùn)行。使用該擴(kuò)展,每個(gè)核除了上述用戶模式機(jī)制以外還具有內(nèi)核模式通知機(jī)制。另外,每一線程具有操作系統(tǒng)分配的線程ID,且該ID被包括在向該線程所發(fā)出的“遠(yuǎn)程_通知”消息中。如果某一“遠(yuǎn)程_通知”消息到達(dá)除當(dāng)前正運(yùn)行的線程以外的一線程,則發(fā)生內(nèi)核模式通知。這如同在由目標(biāo)線程ID索引的位位置上(相對于由目標(biāo)核上的操作系統(tǒng)所提供的地址)那樣發(fā)生。(例如,操作系統(tǒng)可指示內(nèi)核模式通知應(yīng)在地址OxfOOOOOOO處被遞送,且向線程ID 256的通知將通過在地址0Xf0000020處設(shè)置位來指示)。如用戶模式通知一樣,將所得值與掩碼相比較;如果該值與掩碼的邏輯“和”為非零,則遞送通知。內(nèi)核模式通知經(jīng)由中斷來遞送,通常導(dǎo)致操作系統(tǒng)對被通知的線程進(jìn)行重新調(diào)度(或是立即地、或是之后某一時(shí)間)。注意,使用位圖和掩碼允許內(nèi)核選擇不接收給定線程的通知(例如,因?yàn)樗呀?jīng)被通知過),并且允許多個(gè)通知在硬件中累積(例如,在處理給定通知時(shí)其他通知到達(dá)的情況下)。此處描述的過程還可被安排成允許消息傳遞與調(diào)度的高效集成。例如,通過允許內(nèi)核模式調(diào)度器標(biāo)識(shí)接收過程何時(shí)具有對其可用的消息,以及通過允許用戶模式軟件標(biāo)識(shí)各消息通道中的哪一個(gè)具有可用的消息(或相反地具有可用于在其上發(fā)送新消息的空間)。此處描述的遠(yuǎn)程寫進(jìn)程和遠(yuǎn)程通知進(jìn)程可以提供以下各項(xiàng)中的全部或一個(gè)或多個(gè)在用戶模式下執(zhí)行常見情況的操作、受保護(hù)的進(jìn)程間通信、與操作系統(tǒng)功能集成、快速路徑消息發(fā)送操作的能力、對大量通信信道的操作以及消息傳遞與調(diào)度的高效集成。然而,對于此處描述的過程,提供所有這些功能不是必需的。
此處描述的遠(yuǎn)程寫過程和遠(yuǎn)程通知過程可提供受保護(hù)的進(jìn)程間通信,這意味著可在不同進(jìn)程之間發(fā)送消息,而不是僅在相同進(jìn)程中操作的各線程之間發(fā)送消息。在例如各進(jìn)程如在多內(nèi)核或微內(nèi)核操作系統(tǒng)中那樣被用于實(shí)現(xiàn)系統(tǒng)功能的情況下,這是有益的。系統(tǒng)軟件可控制哪些進(jìn)程可通信。此處描述的遠(yuǎn)程寫進(jìn)程和遠(yuǎn)程通知進(jìn)程可提供與操作系統(tǒng)功能的集成。例如,通過允許將消息發(fā)送給已被清空的接收者,以及允許線程在機(jī)器中的各核之間遷移,或用于為了電源管理而掛起/恢復(fù)整個(gè)機(jī)器。這在其中可隨時(shí)間在若干進(jìn)程之間對核進(jìn)行復(fù)用的多程序機(jī)器中可能是有益的。此處描述的遠(yuǎn)程寫過程和遠(yuǎn)程通知過程可為大量通信信道提供有效的功能性。例如,以允許系統(tǒng)進(jìn)程與該系統(tǒng)中的其他進(jìn)程進(jìn)行通信。(消息信道通過機(jī)器中相對豐富的物理存儲(chǔ)器中的存儲(chǔ)來支持,而不是由可能稀少的專用消息傳 遞緩沖器存儲(chǔ)器內(nèi)的空間來支持)。圖13示出了可以實(shí)現(xiàn)為任何形式的計(jì)算和/或電子設(shè)備、且其中可以實(shí)現(xiàn)此處所描述的遠(yuǎn)程寫和遠(yuǎn)程通知進(jìn)程的各實(shí)施例的示例性基于多核計(jì)算的設(shè)備1300的各種組件。基于計(jì)算的設(shè)備1300還包括一個(gè)或多個(gè)處理核1302,處理核可以是用于處理通用計(jì)算的計(jì)算可執(zhí)行指令并且還用于實(shí)現(xiàn)此處描述的遠(yuǎn)程寫和遠(yuǎn)程通知進(jìn)程的微處理器、控制器或任何其他合適類型的處理器。核1302可以是不同的類型的,諸如圖形處理器和通用處理器的混合,或者可以是相同的類型。例如,核可以是如上參考圖2或3所描述的。在某些示例中,例如使用片上系統(tǒng)架構(gòu)的情況,處理器1302可包括用硬件(而非軟件或固件)實(shí)現(xiàn)此處描述的方法的一部分的一個(gè)或多個(gè)固定功能塊(也被稱為專用核)??梢栽诨谟?jì)算的設(shè)備處提供包括操作系統(tǒng)1308的平臺(tái)軟件或任何其他合適的平臺(tái)軟件以使得能夠在該設(shè)備上執(zhí)行應(yīng)用軟件1310。核1302與互連1304進(jìn)行通信。核1302經(jīng)由互連1304共享物理存儲(chǔ)器1306??梢允褂每捎苫谟?jì)算的設(shè)備1300訪問的任何計(jì)算機(jī)可讀介質(zhì)來提供計(jì)算機(jī)可執(zhí)行指令。計(jì)算機(jī)可讀介質(zhì)可以包括例如諸如存儲(chǔ)器1306等計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。諸如存儲(chǔ)器1306等計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、EPROM、EEPR0M、閃存、相變存儲(chǔ)器、憶阻器或其他存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其他光存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備,或者可用于存儲(chǔ)信息以供計(jì)算設(shè)備訪問的任何其他非傳輸介質(zhì)。相反,通信介質(zhì)可以以諸如載波或其他傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者其他數(shù)據(jù)。如本文所定義的,計(jì)算機(jī)存儲(chǔ)介質(zhì)不包括通信介質(zhì)。雖然在基于計(jì)算的設(shè)備1300中示出了計(jì)算機(jī)存儲(chǔ)介質(zhì)(存儲(chǔ)器1306),然而應(yīng)當(dāng)理解,該存儲(chǔ)可以是分布式的或位于遠(yuǎn)程并經(jīng)由網(wǎng)絡(luò)或其他通信鏈路(例如,使用通信接口 1320)來訪問?;谟?jì)算的設(shè)備1300還包括被安排成向可與基于計(jì)算的設(shè)備1300分開或集成在一起的顯示設(shè)備1316輸出顯示信息的輸入/輸出控制器1314。該顯示信息可以提供圖形用戶界面。輸入/輸出控制器1314還被安排成接收并處理來自一個(gè)或多個(gè)設(shè)備的輸入,如用戶輸入設(shè)備1318 (例如,鼠標(biāo)或鍵盤)。該用戶輸入可用于設(shè)置配置參數(shù),并且用于使用計(jì)算機(jī)以供通用計(jì)算。在一實(shí)施例中,如果顯示設(shè)備1316是觸敏顯示設(shè)備,則它還可擔(dān)當(dāng)用戶輸入設(shè)備1318。輸入/輸出控制器1314還可向除顯示設(shè)備之外的設(shè)備輸出數(shù)據(jù),例如,本地連接的打印設(shè)備。此處所使用的術(shù)語“計(jì)算機(jī)”是指帶有處理能力使得可以執(zhí)行指令的任何設(shè)備。本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,這樣的處理能力被集成到許多不同的設(shè)備中,因此,術(shù)語“計(jì)算機(jī)”包括PC、服務(wù)器、移動(dòng)電話、個(gè)人數(shù)字助理和許多其他設(shè)備。 本文描述的方法可由有形存儲(chǔ)介質(zhì)上的機(jī)器可讀形式的軟件來執(zhí)行,例如計(jì)算機(jī)程序的形式,該計(jì)算機(jī)程序包括在該程序在計(jì)算機(jī)上運(yùn)行時(shí)適用于執(zhí)行本文描述的任何方法的所有步驟的計(jì)算機(jī)程序代碼裝置并且其中該計(jì)算機(jī)程序可被包括在計(jì)算機(jī)可讀介質(zhì)上。有形(或非瞬態(tài))存儲(chǔ)介質(zhì)的示例可包括盤(disk)、拇指型驅(qū)動(dòng)器、存儲(chǔ)器等,而不包括所傳播的信號。軟件可以適合于在并行處理器或串行處理器上執(zhí)行,使得各方法步驟可以以任何適當(dāng)?shù)捻樞驅(qū)崿F(xiàn),或同時(shí)實(shí)現(xiàn)。這確認(rèn)了軟件可以是有價(jià)值的、可單獨(dú)交易的商品。它旨在包含運(yùn)行于或者控制“啞”或標(biāo)準(zhǔn)硬件以實(shí)現(xiàn)所需功能的軟件。它還旨在包含例如用于設(shè)計(jì)硅芯片,或者用于配置通用可編程芯片的HDL(硬件描述語言)軟件等“描述”或者定義硬件配置以實(shí)現(xiàn)期望功能的軟件。本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,用來存儲(chǔ)程序指令的存儲(chǔ)設(shè)備可以分布在網(wǎng)絡(luò)上。例如,遠(yuǎn)程計(jì)算機(jī)可以存儲(chǔ)被描述為軟件的進(jìn)程的示例。本地或終端計(jì)算機(jī)可以訪問遠(yuǎn)程計(jì)算機(jī)并下載軟件的一部分或全部以運(yùn)行程序??闪磉x地,本地計(jì)算機(jī)可以根據(jù)需要下載軟件的片段,或在本地終端上執(zhí)行一些軟件指令,并在遠(yuǎn)程計(jì)算機(jī)(或計(jì)算機(jī)網(wǎng)絡(luò))上執(zhí)行另一些軟件指令。本領(lǐng)域的技術(shù)人員還將認(rèn)識(shí)到,通過利用本領(lǐng)域的技術(shù)人員已知的傳統(tǒng)技術(shù),軟件指令的全部,或一部分可以通過諸如DSP、可編程邏輯陣列等等之類的專用電路來實(shí)現(xiàn)。如本領(lǐng)域技術(shù)人員將清楚的,此處給出的任何范圍或者設(shè)備值都可以被擴(kuò)展或者改變而不失去所尋求的效果。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述具體特征或動(dòng)作。相反,上述具體特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式公開的??梢岳斫猓衔乃枋龅膬?yōu)點(diǎn)可以涉及一個(gè)實(shí)施例或可以涉及多個(gè)實(shí)施例。各實(shí)施例不限于解決所述問題中的任一個(gè)或全部的實(shí)施例或具有所述好處和優(yōu)點(diǎn)中的任一個(gè)或全部的實(shí)施例。進(jìn)一步可以理解,對“一個(gè)”項(xiàng)目的引用是指那些項(xiàng)目中的一個(gè)或多個(gè)。此處所描述的方法的步驟可以在適當(dāng)?shù)那闆r下以任何合適的順序,或同時(shí)實(shí)現(xiàn)。另外,在不偏離此處所描述的主題的精神和范圍的情況下,可以從任何一個(gè)方法中刪除各單獨(dú)的框。上文所描述的任何示例的各方面可以與所描述的其他示例中的任何示例的各方面相結(jié)合,以構(gòu)成進(jìn)一步的示例,而不會(huì)丟失尋求的效果。此處使用了術(shù)語“包括”旨在包括已標(biāo)識(shí)的方法的框或元素,但是這樣的框或元素不構(gòu)成排它性的列表,方法或設(shè)備可以包含額外的框或元素??梢岳斫?,上面對一較佳實(shí)施例的描述只是作為示例給出并且本領(lǐng)域的技術(shù)人員可以做出各種修改。以上說明、示例和數(shù)據(jù)提供了對本發(fā)明的各示例性實(shí)施例的結(jié)構(gòu)和使用的全面描述。雖然上文以一定的詳細(xì)度或參考一個(gè)或多個(gè)單個(gè)實(shí)施例描述了本發(fā)明的各實(shí)施例, 但是,在不偏離本發(fā)明的精神或范圍的情況下,本領(lǐng)域的技術(shù)人員可以對所公開的實(shí)施例作出很多更改。
權(quán)利要求
1.一種在具有多個(gè)核(1302)以及至少一個(gè)共享物理存儲(chǔ)器(1306)的多核處理器(1300)處的方法,所述方法包括 將對所述共享物理存儲(chǔ)器的一部分的更新作為來自所述核中的第一核的存儲(chǔ)器寫請求發(fā)送(504)到向目的地核,該第一核是發(fā)送方核; 在所述目的地核處接收(506)所述存儲(chǔ)器寫請求; 在所述目的地核處執(zhí)行(508)對高速緩存存儲(chǔ)器分層結(jié)構(gòu)的所述存儲(chǔ)器寫請求,如同該存儲(chǔ)器寫請求源自所述目的地核那樣。
2.如權(quán)利要求I所述的方法,其特征在于,包括在所述共享物理存儲(chǔ)器中創(chuàng)建數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)至少由所述發(fā)送方核來寫入并且由作為所述目的地核的單個(gè)核來讀??;使用所述發(fā)送方核以及目的地核處的操作系統(tǒng)內(nèi)核,來將用于所述數(shù)據(jù)結(jié)構(gòu)的物理存儲(chǔ)器的公共區(qū)域映射(600)到本地于所述發(fā)送方核以及目的地核中的每一個(gè)的虛擬地址空間;以及更新操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)以配置在發(fā)送方核上對所述虛擬地址的寫是由對所述目的地核的所述存儲(chǔ)器寫請求來實(shí)現(xiàn)的。
3.如權(quán)利要求I或2所述的方法,其特征在于,所述目的地核由所述發(fā)送方核使用控制元數(shù)據(jù)來標(biāo)識(shí),所述控制元數(shù)據(jù)是在配置過程中被建立的且使用選自以下各項(xiàng)中任一項(xiàng)來被高速緩存在所述發(fā)送方核處被擴(kuò)展以結(jié)合所述控制元數(shù)據(jù)的轉(zhuǎn)換后備緩沖器(206);以及存儲(chǔ)所述控制元數(shù)據(jù)的專用通信轉(zhuǎn)換緩沖器(308)。
4.如前述權(quán)利要求中任一項(xiàng)所述的方法,其特征在于,所述多個(gè)核是使用分層高速緩存結(jié)構(gòu)來互連的,所述分層高速緩存結(jié)構(gòu)或者具有高速緩存相干性機(jī)制或者不具有高速緩存相干性機(jī)制。
5.如前述權(quán)利要求中任一項(xiàng)所述的方法,其特征在于,在所述目的地核處執(zhí)行對高速緩存存儲(chǔ)器分層結(jié)構(gòu)的所述存儲(chǔ)器寫請求被執(zhí)行,使得在所述目的地核處對所述高速緩存存儲(chǔ)器分層結(jié)構(gòu)的所述存儲(chǔ)器寫請求對于所述目的地核處運(yùn)行的進(jìn)程可見。
6.一種在具有共享至少一個(gè)共享物理存儲(chǔ)器的多個(gè)核(1302)的多核處理器(1300)處的方法,所述方法包括 在所述共享物理存儲(chǔ)器處配置通知數(shù)據(jù)結(jié)構(gòu),并且在所述多個(gè)核中的每一個(gè)核的虛擬地址空間處建立所述通知數(shù)據(jù)結(jié)構(gòu)的表示,其中每一虛擬地址空間是所述共享物理存儲(chǔ)器中的至少一部分在一核處的映射; 在是所述多個(gè)核中的一個(gè)核的發(fā)送方核處,獲取與事件集中的哪個(gè)事件已發(fā)生有關(guān)的信息(1102); 通過以下步驟向目的地核通知所述信息,所述目的地核是所述多個(gè)核中的一個(gè)核 更新所述通知數(shù)據(jù)結(jié)構(gòu)或在所述目的地核虛擬地址空間處的該通知數(shù)據(jù)結(jié)構(gòu)的表示。
7.如權(quán)利要求6所述的方法,其特征在于,包括通過以下操作來更新所述通知數(shù)據(jù)結(jié)構(gòu)或在所述目的地核虛擬地址空間處的該通知數(shù)據(jù)結(jié)構(gòu)的表示將存儲(chǔ)器通知請求從所述發(fā)送方核發(fā)送到所述目的地核,以便寫入一值,該值表示所述事件集中的哪一個(gè)事件已經(jīng)在所述目的地核處發(fā)生,如同所述通知數(shù)據(jù)結(jié)構(gòu)更新源自所述目的地核那樣。
8.如權(quán)利要求6或7所述的方法,其特征在于,包括僅允許所述發(fā)送方核在指定條件下向所述目的地核發(fā)送所述存儲(chǔ)器通知請求。
9.如權(quán)利要求6所述的方法,其特征在于,包括使用高速緩存相干性機(jī)制來對所述多個(gè)核進(jìn)行互連;以及在所述目的地核處,對所述通知數(shù)據(jù)結(jié)構(gòu)注意到高速緩存相干性的無效,并且對于所述通知數(shù)據(jù)結(jié)構(gòu)將取回從所述目的地核發(fā)送到所述共享存儲(chǔ)器。
10.一種多核處理器(1300),包括 使用分層高速緩存結(jié)構(gòu)來互連的多個(gè)核(1302); 使用所述分層高速緩存結(jié)構(gòu)與所述多個(gè)核進(jìn)行通信的至少一個(gè)共享物理存儲(chǔ)器(1306); 所述共享物理存儲(chǔ)器處的數(shù)據(jù)結(jié)構(gòu); 所述多個(gè)核中的一個(gè)是發(fā)送方核,該發(fā)送方核被安排成向是所述多個(gè)核中的一個(gè)核的目的地核發(fā)送存儲(chǔ)器寫請求,以便更新所述共享物理存儲(chǔ)器處的數(shù)據(jù)結(jié)構(gòu),所述共享物理存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)被映射到本地于所述發(fā)送方核以及目的地核中的每一個(gè)核的高速緩存結(jié)構(gòu)中各部分處的虛擬地址空間。
全文摘要
本發(fā)明公開了多核計(jì)算機(jī)中的遠(yuǎn)程核操作。描述了具有共享物理存儲(chǔ)器的多核處理器。在一實(shí)施例中,發(fā)送方核向目的地核發(fā)送存儲(chǔ)器寫請求,使得目的地核可對該請求采取動(dòng)作,如同該請求源自目的地核那樣。在一示例中,一數(shù)據(jù)結(jié)構(gòu)在共享物理存儲(chǔ)器中被配置,并且被映射成對于發(fā)送方核和目的地核是可訪問的。在一示例中,共享數(shù)據(jù)結(jié)構(gòu)被用作發(fā)送方核與目的地核之間的用于使用存儲(chǔ)器寫請求來承載數(shù)據(jù)的消息通道。在一實(shí)施例中,使用共享物理存儲(chǔ)器來啟用一通知機(jī)制,以便通過更新通知數(shù)據(jù)結(jié)構(gòu)來向目的地核通知各事件。在一示例中,通知機(jī)制在目的地核觸發(fā)通知進(jìn)程,以告知通知的接收進(jìn)程。
文檔編號G06F15/167GK102622329SQ201210030338
公開日2012年8月1日 申請日期2012年2月10日 優(yōu)先權(quán)日2011年2月11日
發(fā)明者K·斯特勞斯, R·C·麥基爾洛伊, R·J·布萊克, T·哈里斯 申請人:微軟公司