專利名稱:高速緩存相干協(xié)議的推測(cè)分布式?jīng)_突解決的制作方法
相關(guān)申請(qǐng)本美國(guó)專利申請(qǐng)涉及以下同時(shí)提交的美國(guó)專利申請(qǐng)(1)申請(qǐng)?zhí)?0/XXXXXX(備案號(hào)P13983),2002年提交,標(biāo)題為“用于多節(jié)點(diǎn)系統(tǒng)中的高速緩存相干的轉(zhuǎn)發(fā)狀態(tài)”;(2)申請(qǐng)?zhí)?0/XXXXXX(備案號(hào)P13984),2002年提交,標(biāo)題為“用于多處理器系統(tǒng)中高速緩存相干的分級(jí)目錄”;(3)申請(qǐng)?zhí)?0/XXXXXX(備案號(hào)P13985),2002年提交,標(biāo)題為“多處理器系統(tǒng)中高速緩存分級(jí)結(jié)構(gòu)的分級(jí)虛擬模型”;(4)申請(qǐng)?zhí)?0/XXXXXX(備案號(hào)P13986),2002年提交,標(biāo)題為“用于高速緩存相干協(xié)議的非推測(cè)分布式?jīng)_突解決”。
領(lǐng)域本發(fā)明涉及高速緩沖存儲(chǔ)器。更具體來說,本發(fā)明涉及多高速緩存多處理器系統(tǒng)中的分布式?jīng)_突解決。
背景當(dāng)電子系統(tǒng)包括多個(gè)高速緩沖存儲(chǔ)器時(shí),必須保持可供使用的數(shù)據(jù)的有效性。這通常通過根據(jù)高速緩存相干協(xié)議處理數(shù)據(jù)來實(shí)現(xiàn)。隨著高速緩存和/或處理器數(shù)量的增加,保持高速緩存相干性的復(fù)雜度也增加。
當(dāng)多個(gè)組件(例如高速緩沖存儲(chǔ)器、處理器)請(qǐng)求相同數(shù)據(jù)塊時(shí),多個(gè)組件之間的沖突必須以保持?jǐn)?shù)據(jù)有效性的方式來解決。當(dāng)前的高速緩存相干協(xié)議通常具有負(fù)責(zé)沖突解決的單個(gè)組件。但是,隨著系統(tǒng)的復(fù)雜度增加,對(duì)用于沖突解決的單一組件的依賴性會(huì)降低整體系統(tǒng)性能。
圖1a到1e提供多節(jié)點(diǎn)系統(tǒng)中的沖突狀況的概念說明。節(jié)點(diǎn)110、120和130是對(duì)等節(jié)點(diǎn),它們可在高速緩沖存儲(chǔ)器中存儲(chǔ)所請(qǐng)求數(shù)據(jù)(例如高速緩存行)的副本。歸屬節(jié)點(diǎn)140為所請(qǐng)求數(shù)據(jù)的歸屬(H)節(jié)點(diǎn)。在圖1a到1e的實(shí)例中,對(duì)等節(jié)點(diǎn)110和120存儲(chǔ)所請(qǐng)求數(shù)據(jù)的無效副本或者沒有存儲(chǔ)副本,對(duì)等節(jié)點(diǎn)130存儲(chǔ)沒有回寫到存儲(chǔ)器的所請(qǐng)求數(shù)據(jù)的已修改副本。歸屬節(jié)點(diǎn)在存儲(chǔ)器中存儲(chǔ)數(shù)據(jù)的原始副本或者在修改回寫到存儲(chǔ)器時(shí)存儲(chǔ)數(shù)據(jù)的已修改版本。
如圖1a所示,對(duì)等節(jié)點(diǎn)120發(fā)送“數(shù)據(jù)請(qǐng)求”消息以請(qǐng)求數(shù)據(jù)塊、例如高速緩存行的副本?!皵?shù)據(jù)請(qǐng)求”消息被發(fā)送到對(duì)等節(jié)點(diǎn)110和對(duì)等節(jié)點(diǎn)130。但是,送往對(duì)等節(jié)點(diǎn)130的“數(shù)據(jù)請(qǐng)求”消息被延遲。延遲可能例如由于缺乏可用帶寬、緩沖考慮等而引起。
對(duì)等節(jié)點(diǎn)110以“無有效副本”消息來響應(yīng)來自對(duì)等節(jié)點(diǎn)120的“數(shù)據(jù)請(qǐng)求”消息,它向?qū)Φ裙?jié)點(diǎn)120表明,對(duì)等節(jié)點(diǎn)110沒有所請(qǐng)求數(shù)據(jù)的有效副本。在對(duì)等節(jié)點(diǎn)120發(fā)送“數(shù)據(jù)請(qǐng)求”消息之后的某個(gè)時(shí)間,對(duì)等節(jié)點(diǎn)110向?qū)Φ裙?jié)點(diǎn)120和130發(fā)送“數(shù)據(jù)請(qǐng)求”消息,如圖1c所示,請(qǐng)求與對(duì)等節(jié)點(diǎn)120所請(qǐng)求的數(shù)據(jù)相同的數(shù)據(jù)。
對(duì)等節(jié)點(diǎn)120響應(yīng)“數(shù)據(jù)請(qǐng)求”消息而向?qū)Φ裙?jié)點(diǎn)110提供“無有效副本”消息。對(duì)等節(jié)點(diǎn)130向?qū)Φ裙?jié)點(diǎn)110提供所請(qǐng)求數(shù)據(jù)。由對(duì)等節(jié)點(diǎn)130保持的數(shù)據(jù)副本(如果有的話)被標(biāo)記為無效,以及由對(duì)等節(jié)點(diǎn)110存儲(chǔ)的數(shù)據(jù)副本被標(biāo)記為“已修改”。
在對(duì)等節(jié)點(diǎn)130已經(jīng)響應(yīng)來自對(duì)等節(jié)點(diǎn)110的“數(shù)據(jù)請(qǐng)求”并使數(shù)據(jù)副本無效之后的某個(gè)時(shí)間,對(duì)等節(jié)點(diǎn)130接收來自對(duì)等節(jié)點(diǎn)120的延遲“數(shù)據(jù)請(qǐng)求”消息,如圖1c所示。響應(yīng)“數(shù)據(jù)請(qǐng)求”消息,對(duì)等節(jié)點(diǎn)130向?qū)Φ裙?jié)點(diǎn)120提供“無有效副本”消息。注意,由對(duì)等節(jié)點(diǎn)130存儲(chǔ)的數(shù)據(jù)的狀態(tài)從原始“數(shù)據(jù)請(qǐng)求”消息的時(shí)間改變?yōu)閷?duì)等節(jié)點(diǎn)130響應(yīng)“數(shù)據(jù)請(qǐng)求”消息的時(shí)間。
由于對(duì)等節(jié)點(diǎn)110和130以“無有效副本”消息響應(yīng)來自對(duì)等節(jié)點(diǎn)120的“數(shù)據(jù)請(qǐng)求”消息,因此對(duì)等節(jié)點(diǎn)120在發(fā)現(xiàn)沒有所請(qǐng)求數(shù)據(jù)的有效高速緩存副本時(shí)向歸屬節(jié)點(diǎn)140請(qǐng)求數(shù)據(jù)副本。這樣,如圖1d所示,對(duì)等節(jié)點(diǎn)向歸屬節(jié)點(diǎn)140發(fā)送“讀取”消息。歸屬節(jié)點(diǎn)140從存儲(chǔ)器檢索所請(qǐng)求數(shù)據(jù),并向?qū)Φ裙?jié)點(diǎn)120提供該數(shù)據(jù)。對(duì)等節(jié)點(diǎn)120則以“獨(dú)占”狀態(tài)存儲(chǔ)所請(qǐng)求數(shù)據(jù)。
如圖1e所示,圖1a到1e所示的消息序列得到數(shù)據(jù)行的兩個(gè)不兼容副本。在所提供的實(shí)例中,對(duì)等節(jié)點(diǎn)110以“已修改”狀態(tài)存儲(chǔ)數(shù)據(jù)副本,對(duì)等節(jié)點(diǎn)120以“獨(dú)占”狀態(tài)存儲(chǔ)數(shù)據(jù)副本。但是,由對(duì)等節(jié)點(diǎn)120存儲(chǔ)的副本不是對(duì)等節(jié)點(diǎn)120專有的。這樣,多節(jié)點(diǎn)系統(tǒng)在某些情況下可能產(chǎn)生數(shù)據(jù)的不兼容副本,除非提供一種機(jī)制來解決高速緩存沖突。
附圖概述在附圖中通過舉例而不是限制的方式對(duì)本發(fā)明進(jìn)行說明,附圖中,同樣的參考標(biāo)號(hào)表示類似的元件。
圖1a到1e提供多節(jié)點(diǎn)系統(tǒng)中的沖突狀況的概念說明。
圖2a到2d提供共享行沖突的概念說明。
圖3a到3d提供由接近同時(shí)發(fā)出的請(qǐng)求所引起的共享行沖突的概念說明。
圖4a到4d提供由多個(gè)請(qǐng)求中一個(gè)的延遲所引起的共享行沖突的概念說明。
圖5a到5d提供無效行沖突的概念說明。
圖6a到6d提供由多個(gè)請(qǐng)求中一個(gè)的延遲所引起的無效行沖突的概念說明。
圖7是節(jié)點(diǎn)的一個(gè)實(shí)施例的框圖。
圖8是多處理器系統(tǒng)的一個(gè)實(shí)施例。
詳細(xì)說明描述多節(jié)點(diǎn)系統(tǒng)中分布式高速緩存相干性沖突解決的技術(shù)。為了便于說明,以下說明中提出了大量具體細(xì)節(jié),以便透徹地理解本發(fā)明。然而,本領(lǐng)域的技術(shù)人員十分清楚,即使沒有這些具體細(xì)節(jié),也可以實(shí)施本發(fā)明。另一方面,結(jié)構(gòu)和裝置以框圖形式來表示,以免使本發(fā)明含糊不清。
請(qǐng)求消息以下消息是來自請(qǐng)求節(jié)點(diǎn)的對(duì)數(shù)據(jù)/動(dòng)作的請(qǐng)求。這些消息對(duì)系統(tǒng)的所有節(jié)點(diǎn)廣播。
“端口讀取行”(PRL)這是對(duì)數(shù)據(jù)段、例如高速緩存行的副本的請(qǐng)求。
“端口讀取無效行”(PRIL)這是在提供方節(jié)點(diǎn)的數(shù)據(jù)副本無效的情況下對(duì)數(shù)據(jù)段的副本的請(qǐng)求。這個(gè)消息也可稱作“對(duì)所有權(quán)的請(qǐng)求”。
“端口寫入行”(PWL)這個(gè)消息使數(shù)據(jù)(例如已修改高速緩存行)被寫入存儲(chǔ)器。這個(gè)消息也可稱作“臟驅(qū)逐”。
“端口無效行”(PIL)這個(gè)消息使指定數(shù)據(jù)的狀態(tài)從“共享”改變?yōu)椤蔼?dú)占”。
“端口寫入無效行”(PWIL)這個(gè)消息使數(shù)據(jù)被寫入存儲(chǔ)器,以及使數(shù)據(jù)的目標(biāo)副本無效。
響應(yīng)消息以下消息是響應(yīng)上述請(qǐng)求而從對(duì)等(即非歸屬)節(jié)點(diǎn)發(fā)送到請(qǐng)求節(jié)點(diǎn)的消息。
“無效狀態(tài)確認(rèn)”(IACK)這個(gè)消息是當(dāng)發(fā)送響應(yīng)的節(jié)點(diǎn)具有所請(qǐng)求數(shù)據(jù)的無效副本或者沒有所請(qǐng)求數(shù)據(jù)的副本時(shí)對(duì)請(qǐng)求(PRL、PRIL、PWL、PIL、PWIL)的響應(yīng)。
“共享狀態(tài)確認(rèn)”(SACK)這個(gè)消息是當(dāng)發(fā)送響應(yīng)的節(jié)點(diǎn)具有處于“共享”狀態(tài)的所請(qǐng)求數(shù)據(jù)的副本時(shí)對(duì)請(qǐng)求的響應(yīng)。
“所接收數(shù)據(jù)的確認(rèn)”(DACK)這個(gè)消息由請(qǐng)求節(jié)點(diǎn)發(fā)送到請(qǐng)求節(jié)點(diǎn)從其接收了數(shù)據(jù)的節(jié)點(diǎn)。它是在請(qǐng)求節(jié)點(diǎn)已經(jīng)向歸屬節(jié)點(diǎn)發(fā)送READ或CNCL消息并接收到來自歸屬節(jié)點(diǎn)的XFR/XFRI消息或ACK消息之后發(fā)送的。
“沖突”這個(gè)消息表明對(duì)于所請(qǐng)求的高速緩存行存在共同未決的請(qǐng)求。
到歸屬節(jié)點(diǎn)的消息這些消息由對(duì)等節(jié)點(diǎn)發(fā)送到歸屬節(jié)點(diǎn)。
“讀取(沖突)”這個(gè)消息向歸屬節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)并列出沖突(如果有的話)。在所有響應(yīng)由對(duì)等節(jié)點(diǎn)接收到之后,如果沒有所接收消息是DATA(數(shù)據(jù))消息,則發(fā)送這個(gè)消息。
“CNCL(沖突)”這個(gè)消息響應(yīng)對(duì)等節(jié)點(diǎn)中的命中而發(fā)送到歸屬節(jié)點(diǎn)并列出沖突(如果有的話)。這個(gè)消息取消歸屬節(jié)點(diǎn)的預(yù)取操作。在所有響應(yīng)由對(duì)等節(jié)點(diǎn)接收到并且其中之一為DATA消息之后,發(fā)送這個(gè)消息。
“數(shù)據(jù)”這個(gè)消息用來回寫PWL和PWIL請(qǐng)求的數(shù)據(jù)。
來自歸屬節(jié)點(diǎn)的消息這些消息從歸屬節(jié)點(diǎn)發(fā)送到對(duì)等和/或請(qǐng)求節(jié)點(diǎn)。
“數(shù)據(jù)”這個(gè)消息包括所請(qǐng)求數(shù)據(jù),并且可表明要由請(qǐng)求節(jié)點(diǎn)使用的數(shù)據(jù)的狀態(tài)(M/E/F/S)。
“傳輸”(XFR)這個(gè)消息使接收節(jié)點(diǎn)向消息中指明的節(jié)點(diǎn)傳輸數(shù)據(jù)。當(dāng)通知?dú)w屬節(jié)點(diǎn)關(guān)于要求數(shù)據(jù)的當(dāng)前擁有者將該數(shù)據(jù)傳輸給目標(biāo)節(jié)點(diǎn)的沖突狀況時(shí),歸屬節(jié)點(diǎn)把這個(gè)消息發(fā)送給所請(qǐng)求數(shù)據(jù)的當(dāng)前擁有者。如果歸屬節(jié)點(diǎn)確定未解決沖突請(qǐng)求是PRIL消息,則發(fā)送XFRI消息以取代XFR消息,這意味著當(dāng)前擁有者必須在發(fā)起數(shù)據(jù)傳輸時(shí)使該行無效。在一個(gè)實(shí)施例中,在某個(gè)時(shí)期發(fā)送CNCL消息的第一節(jié)點(diǎn)是當(dāng)前擁有者。時(shí)期是數(shù)據(jù)的第一請(qǐng)求與該數(shù)據(jù)的所有請(qǐng)求的解決之間的時(shí)段。如果歸屬節(jié)點(diǎn)從存儲(chǔ)器向節(jié)點(diǎn)發(fā)送數(shù)據(jù),則那個(gè)節(jié)點(diǎn)是當(dāng)前擁有者。發(fā)送XFR/XFRI消息使目標(biāo)節(jié)點(diǎn)變?yōu)楫?dāng)前擁有者。在一個(gè)實(shí)施例中,目標(biāo)節(jié)點(diǎn)從在READ或CNCL消息中提供給歸屬節(jié)點(diǎn)的沖突列表中選取。
“確認(rèn)”(ACK)這個(gè)消息表明所請(qǐng)求數(shù)據(jù)已經(jīng)發(fā)送到請(qǐng)求節(jié)點(diǎn)。當(dāng)歸屬節(jié)點(diǎn)發(fā)送ACK消息時(shí),當(dāng)前時(shí)期終止。
“等待”這個(gè)消息使接收節(jié)點(diǎn)在發(fā)送其它消息之前暫停。
MESIF協(xié)議概述有兩種基本方案用于提供高速緩存相干性,即窺探(現(xiàn)在常常稱作對(duì)稱多處理SMP)和目錄(常常稱作分布式共享存儲(chǔ)器DSM)?;静町惐仨毺幚韺?duì)元信息、即關(guān)于存儲(chǔ)高速緩存行副本的位置的信息的安置和存取。
為了窺探高速緩存,該信息與高速緩存副本本身一起分布,即,高速緩存行的每個(gè)有效副本由每當(dāng)任何節(jié)點(diǎn)以新方式請(qǐng)求存取高速緩存行的許可時(shí)必須認(rèn)識(shí)到其責(zé)任的單元來保存。在某處--通常在固定位置--是信息庫,數(shù)據(jù)在沒有被高速緩存時(shí)被存儲(chǔ)在其中。即使當(dāng)行被高速緩存時(shí),這個(gè)位置也可包含有效副本。但是,這個(gè)節(jié)點(diǎn)的位置一般是請(qǐng)求節(jié)點(diǎn)未知的--請(qǐng)求節(jié)點(diǎn)只廣播被請(qǐng)求高速緩存行的地址以及所需的許可,可能具有副本的所有節(jié)點(diǎn)必須響應(yīng)以確保一致性被保持,其中在沒有其它(對(duì)等)節(jié)點(diǎn)響應(yīng)時(shí),包含未高速緩存副本的節(jié)點(diǎn)響應(yīng)。
對(duì)于基于目錄的方案,除了存儲(chǔ)未高速緩存數(shù)據(jù)的固定位置之外,還有固定位置、目錄,表明高速緩存副本所在的位置。為了以新的方式存取高速緩存行,節(jié)點(diǎn)必須與包含目錄的、通常是包含未緩存數(shù)據(jù)信息庫的同一節(jié)點(diǎn)的節(jié)點(diǎn)進(jìn)行通信,從而允許響應(yīng)節(jié)點(diǎn)在主存儲(chǔ)副本有效時(shí)提供數(shù)據(jù)。這樣一種節(jié)點(diǎn)稱作歸屬節(jié)點(diǎn)。
目錄可以兩種方式分布。第一,主存儲(chǔ)數(shù)據(jù)(未高速緩存信息庫)常常在節(jié)點(diǎn)之間分布,而目錄以同樣方式分布。第二,元信息本身可以是分布式的,在歸屬節(jié)點(diǎn)保存如行是否被高速緩存以及若被高速緩存、則單一副本所在位置等的極少信息。例如,SCI采用這種方案,其中包含高速緩存副本的各節(jié)點(diǎn)保持到其它具有高速緩存副本的節(jié)點(diǎn)的鏈接,從而共同保持完整的目錄。
窺探方案依靠廣播,因?yàn)闆]有保存元信息的單一位置,因此每個(gè)查詢必須通知所有節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)負(fù)責(zé)自己的任務(wù)以確保相干性被保持。這包括干預(yù)消息,通知?dú)w屬節(jié)點(diǎn)在另一個(gè)節(jié)點(diǎn)提供數(shù)據(jù)時(shí)不進(jìn)行響應(yīng)。
窺探方案的優(yōu)點(diǎn)在于,響應(yīng)可以是直接迅速的,但沒有很好地縮放,因?yàn)橐笏泄?jié)點(diǎn)觀察所有查詢。目錄方案固有地是更為可縮放的,但要求更復(fù)雜的響應(yīng),常常涉及三個(gè)節(jié)點(diǎn)的點(diǎn)到點(diǎn)通信。
本文所述的基本MESIF協(xié)議提供一種沒有單一串行化總線的限制的窺探協(xié)議。與窺探高速緩存協(xié)議相似,MESIF依靠具有數(shù)據(jù)的高速緩存副本的節(jié)點(diǎn)來保持相干性。點(diǎn)到點(diǎn)鏈路而不是同步集中廣播的使用引入時(shí)間異常的問題--事件從不同節(jié)點(diǎn)的角度看來好像以不同順序出現(xiàn)的事實(shí)。MESIF協(xié)議正確地處理時(shí)間異常,識(shí)別可能的錯(cuò)誤何時(shí)可能產(chǎn)生,并保證它們被正確處理。歸屬節(jié)點(diǎn)的概念主要是確定未高速緩存副本所在位置,但歸屬節(jié)點(diǎn)參與每個(gè)事務(wù)處理--而沒有在關(guān)鍵路徑上-以便解決沖突和時(shí)間異常問題。由于該方案的同時(shí)廣播性質(zhì),MESIF實(shí)現(xiàn)與窺探協(xié)議關(guān)聯(lián)的低等待時(shí)間,在大部分情況下,以最小可能的等待時(shí)間單個(gè)往返請(qǐng)求-響應(yīng),獲取數(shù)據(jù)的可高速緩存副本。
基本MESIF協(xié)議包含向所有對(duì)等節(jié)點(diǎn)以及歸屬節(jié)點(diǎn)廣播初始請(qǐng)求。如果副本以狀態(tài)E、F或M被高速緩存,則它包含在響應(yīng)中。然后,第二消息被發(fā)送給歸屬節(jié)點(diǎn),通知它滿足該請(qǐng)求。如果所請(qǐng)求行未高速緩存,或者如果只存在S狀態(tài)副本,則發(fā)送到歸屬節(jié)點(diǎn)的第二請(qǐng)求用來確認(rèn)這時(shí)歸屬節(jié)點(diǎn)可能已經(jīng)從其存儲(chǔ)器中取出的前一個(gè)請(qǐng)求。在任一情況下,為了同步和沖突解決,歸屬節(jié)點(diǎn)必須響應(yīng)第二請(qǐng)求(以及響應(yīng)第一請(qǐng)求,但它們有時(shí)可以結(jié)合)。注意,歸屬節(jié)點(diǎn)可具有一個(gè)或多個(gè)高速緩存,因此它可響應(yīng)初始請(qǐng)求,就象其它任何節(jié)點(diǎn)那樣。
沖突以分布方式來處理。時(shí)間異常問題使得難以檢測(cè)沖突,因?yàn)楦鱾€(gè)請(qǐng)求可能被延遲任意長(zhǎng)的時(shí)間。但是,如果每個(gè)節(jié)點(diǎn)在進(jìn)行請(qǐng)求之后監(jiān)測(cè)沖突,則會(huì)檢測(cè)到?jīng)_突。兩個(gè)節(jié)點(diǎn)可以或可以不檢測(cè)沖突,但至少一個(gè)會(huì)檢測(cè)。由于所有節(jié)點(diǎn)必須通過提供數(shù)據(jù)或表明它們沒有副本(或者在某些情況下不提供它們所具有的副本)來響應(yīng)廣播請(qǐng)求,因此響應(yīng)可包含沖突的指示,所以沖突節(jié)點(diǎn)將檢測(cè)該沖突。
復(fù)雜化起因于允許節(jié)點(diǎn)在數(shù)據(jù)到達(dá)時(shí)立即使用該數(shù)據(jù)而不是等待所有響應(yīng)。因此,接收數(shù)據(jù)副本的節(jié)點(diǎn)被允許在接收時(shí)立即內(nèi)部使用該數(shù)據(jù),但在節(jié)點(diǎn)接收到來自歸屬的確認(rèn)之前,不得讓使用該數(shù)據(jù)的效果為系統(tǒng)的其余部分可見。確認(rèn)也可包含節(jié)點(diǎn)必須將其副本轉(zhuǎn)發(fā)給另一個(gè)節(jié)點(diǎn)的指令,也許將該節(jié)點(diǎn)驅(qū)逐出其自身的高速緩存。
最后,當(dāng)節(jié)點(diǎn)通過提供高速緩存數(shù)據(jù)響應(yīng)來自另一個(gè)節(jié)點(diǎn)的請(qǐng)求時(shí),節(jié)點(diǎn)必須推遲它接收的對(duì)于相同高速緩存行的其它所有請(qǐng)求,直到節(jié)點(diǎn)接收到來自歸屬節(jié)點(diǎn)的響應(yīng),確認(rèn)節(jié)點(diǎn)轉(zhuǎn)發(fā)了該數(shù)據(jù)的事實(shí),從而確保所有節(jié)點(diǎn)觀察到(可能可寫的)高速緩存行的傳輸?shù)南嗤樞颉?br>
歸屬節(jié)點(diǎn)是未高速緩存數(shù)據(jù)的信息庫,但歸屬節(jié)點(diǎn)也可具有產(chǎn)生請(qǐng)求的處理器,并包括一個(gè)或多個(gè)高速緩存。與其它任何節(jié)點(diǎn)相似,當(dāng)歸屬節(jié)點(diǎn)處理器失效時(shí),歸屬節(jié)點(diǎn)必須向所有其它(對(duì)等)節(jié)點(diǎn)廣播請(qǐng)求,以及歸屬節(jié)點(diǎn)必須內(nèi)部處理該請(qǐng)求,好像對(duì)到達(dá)歸屬節(jié)點(diǎn)的其它任何請(qǐng)求那樣。注意,這是一種特例,因?yàn)闅w屬節(jié)點(diǎn)沒有明確地向其本身(歸屬節(jié)點(diǎn))發(fā)送消息。另外,當(dāng)對(duì)于本地高速緩存的數(shù)據(jù)的外部請(qǐng)求到達(dá)時(shí),歸屬節(jié)點(diǎn)必須以某種方式進(jìn)行響應(yīng),以便確保來自歸屬節(jié)點(diǎn)的隨后響應(yīng)不會(huì)產(chǎn)生歧義。也就是說,歸屬節(jié)點(diǎn)可通過提供數(shù)據(jù)來響應(yīng)初始請(qǐng)求,但歸屬節(jié)點(diǎn)還必須作為歸屬節(jié)點(diǎn)響應(yīng)第二請(qǐng)求。
對(duì)于如本文所述的適合使用的MESIF協(xié)議的各種實(shí)施例的更詳細(xì)的基于偽代碼的描述作為附錄A加入本文。
推測(cè)分布式?jīng)_突解決的概述一般來說,高速緩存相干協(xié)議要求沖突解決,以便按順序提供各種高速緩存行或其它數(shù)據(jù)塊的狀態(tài)改變。本文所述的沖突解決技術(shù)提供連續(xù)一致性,這意味著在任何時(shí)候只有高速緩存行的單個(gè)可修改副本可以存在,以及沒有高速緩存行的副本可在其它副本為可讀時(shí)被修改。因此,修改高速緩存行的副本的沖突請(qǐng)求必須被解決,以便保持連續(xù)一致性。
在一個(gè)實(shí)施例中,沖突采用時(shí)間屬性來解決。也就是說,不考慮延遲,兩個(gè)節(jié)點(diǎn)都無法在另一個(gè)之前請(qǐng)求高速緩存行。因此,如果每個(gè)節(jié)點(diǎn)在那個(gè)節(jié)點(diǎn)已經(jīng)進(jìn)行其自身的請(qǐng)求之后監(jiān)測(cè)所有請(qǐng)求,則沖突可被沖突請(qǐng)求方中至少一個(gè)檢測(cè)到。
在一個(gè)實(shí)施例中,如果行處于“獨(dú)占”(E)、“已修改”(M)或“轉(zhuǎn)發(fā)”(F)狀態(tài),則沖突在保存唯一副本的節(jié)點(diǎn)上解決。沖突解決的勝方以及可能還有敗方向歸屬節(jié)點(diǎn)報(bào)告沖突,歸屬節(jié)點(diǎn)使沖突報(bào)告成對(duì),并發(fā)出轉(zhuǎn)發(fā)指令,以便確保所有請(qǐng)求節(jié)點(diǎn)最終接收到所請(qǐng)求數(shù)據(jù)。在一個(gè)實(shí)施例中,如果被請(qǐng)求高速緩存行是未高速緩存的或者僅存在于“共享”(S)狀態(tài)中,則所請(qǐng)求高速緩存行的歸屬節(jié)點(diǎn)提供所請(qǐng)求數(shù)據(jù)的副本并解決沖突。
在一個(gè)實(shí)施例中,本文所述的分布式?jīng)_突解決是稱作MESIF協(xié)議的高速緩存協(xié)議的組成部分,其中,五種狀態(tài)之一與高速緩存行的高速緩存副本關(guān)聯(lián)(已修改、獨(dú)占、共享、無效、轉(zhuǎn)發(fā))。在一個(gè)實(shí)施例中,在已經(jīng)從歸屬節(jié)點(diǎn)接收到確認(rèn)消息之前的請(qǐng)求的所有響應(yīng)之后的封鎖期間允許所有沖突節(jié)點(diǎn)認(rèn)識(shí)到這些節(jié)點(diǎn)所涉及的沖突。封鎖期間不限制高速緩存中的數(shù)據(jù)的使用,但卻防止數(shù)據(jù)被傳播到其它高速緩存。
以下論述依照多節(jié)點(diǎn)系統(tǒng)中的節(jié)點(diǎn)來提供。在一個(gè)實(shí)施例中,節(jié)點(diǎn)包括具有內(nèi)部高速緩沖存儲(chǔ)器的處理器、外部高速緩沖存儲(chǔ)器和/或外部存儲(chǔ)器。在一個(gè)備選實(shí)施例中,節(jié)點(diǎn)是與其它電子系統(tǒng)互連的電子系統(tǒng)(例如計(jì)算機(jī)系統(tǒng)、移動(dòng)裝置)。也可使用其它類型的節(jié)點(diǎn)配置。在以下實(shí)例中,虛線表示先前發(fā)送的消息,以及實(shí)線表示正被描述的消息。為了使附圖更為清楚,當(dāng)一組消息(例如PRIL和相應(yīng)IACK)被解決時(shí),表示消息的線條不再包含在附圖中。
圖2a到2d提供共享行沖突的概念說明。在圖2a到2d的實(shí)例中,對(duì)等節(jié)點(diǎn)210和220都請(qǐng)求某個(gè)數(shù)據(jù)塊(例如高速緩存行)的副本。對(duì)等節(jié)點(diǎn)230以M狀態(tài)存儲(chǔ)所請(qǐng)求數(shù)據(jù)塊的可用副本。如果對(duì)等節(jié)點(diǎn)230以S狀態(tài)或F狀態(tài)存儲(chǔ)所請(qǐng)求數(shù)據(jù),則所述處理也適用。
為了提供沖突的一個(gè)實(shí)例,與圖2a到2d的各種消息關(guān)聯(lián)的編號(hào)(例如1.PRIL、7.IACK)提供近似排序。不需要圖2a到2d中所示的準(zhǔn)確定時(shí)關(guān)系以及所提供的其它實(shí)例(即圖3a-3d、4a-4d、5a-5d、6a-6d)。
如圖2a所示,對(duì)等節(jié)點(diǎn)210通過向?qū)Φ裙?jié)點(diǎn)220和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息來請(qǐng)求數(shù)據(jù)塊。對(duì)等節(jié)點(diǎn)210還可利用PRL消息來請(qǐng)求同樣的數(shù)據(jù)塊,在這種情況下,對(duì)等節(jié)點(diǎn)230不會(huì)響應(yīng)請(qǐng)求消息而使其副本無效。對(duì)等節(jié)點(diǎn)220以IACK消息響應(yīng)PRIL消息,表明對(duì)等節(jié)點(diǎn)220沒有存儲(chǔ)所請(qǐng)求數(shù)據(jù)塊的有效副本。
歸屬節(jié)點(diǎn)240用作要被請(qǐng)求的數(shù)據(jù)的歸屬節(jié)點(diǎn),這意味著,節(jié)點(diǎn)240與非高速緩沖存儲(chǔ)器(例如主存儲(chǔ)器)關(guān)聯(lián),其中,要被請(qǐng)求的數(shù)據(jù)在沒有被高速緩存時(shí)被存儲(chǔ)。例如,歸屬節(jié)點(diǎn)240可以是處理器、高速緩沖存儲(chǔ)器和隨機(jī)存取存儲(chǔ)器(RAM),其中,RAM提供數(shù)據(jù)的非高速緩沖存儲(chǔ)位置。
圖2b說明向?qū)Φ裙?jié)點(diǎn)210和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息來請(qǐng)求先前由對(duì)等節(jié)點(diǎn)210所請(qǐng)求的數(shù)據(jù)塊的對(duì)等節(jié)點(diǎn)220。如上所述,也可采用PRL消息來請(qǐng)求數(shù)據(jù)。雖然圖2a到2d的沖突采用PRIL消息來說明,但不一致結(jié)果可能在其中出現(xiàn)的請(qǐng)求消息的任何組合導(dǎo)致沖突。
與對(duì)等節(jié)點(diǎn)220發(fā)送PRIL消息大致同時(shí),對(duì)等節(jié)點(diǎn)230通過向?qū)Φ裙?jié)點(diǎn)210發(fā)送“DataM”消息來響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息。DataM消息向?qū)Φ裙?jié)點(diǎn)210提供所請(qǐng)求數(shù)據(jù)的副本,并使對(duì)等節(jié)點(diǎn)210以“已修改”(M)狀態(tài)來存儲(chǔ)該數(shù)據(jù)。其它狀態(tài)可以被指定,例如轉(zhuǎn)發(fā)(F)狀態(tài)。由對(duì)等節(jié)點(diǎn)230存儲(chǔ)的所請(qǐng)求數(shù)據(jù)的副本的狀態(tài)從M狀態(tài)改變?yōu)椤盁o效”(I)狀態(tài)。
如圖2c所示,響應(yīng)從對(duì)等節(jié)點(diǎn)230接收到DataM消息,對(duì)等節(jié)點(diǎn)210向歸屬節(jié)點(diǎn)240發(fā)送CNCL()消息。如果檢索已經(jīng)開始,則CNCL()消息取消從存儲(chǔ)器中的所請(qǐng)求數(shù)據(jù)塊的檢索。歸屬節(jié)點(diǎn)240以ACK消息響應(yīng)對(duì)等節(jié)點(diǎn)210,確認(rèn)接收到CNCL()消息,它表明來自對(duì)等節(jié)點(diǎn)210的PRIL消息的處理的完成。
響應(yīng)接收到來自歸屬節(jié)點(diǎn)240的ACK消息,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)230發(fā)送DACK消息,確認(rèn)接收到來自對(duì)等節(jié)點(diǎn)230的所請(qǐng)求數(shù)據(jù)。從對(duì)等節(jié)點(diǎn)230的數(shù)據(jù)接收與向?qū)Φ裙?jié)點(diǎn)230的DACK消息發(fā)送之間的周期為封鎖周期,在此期間數(shù)據(jù)塊沒有被發(fā)送到另一個(gè)節(jié)點(diǎn)。在封鎖周期中,對(duì)等節(jié)點(diǎn)210不響應(yīng)來自對(duì)等節(jié)點(diǎn)220的PRIL消息。同樣,對(duì)等節(jié)點(diǎn)230在封鎖周期中不響應(yīng)來自對(duì)等節(jié)點(diǎn)220的PRIL消息。
如圖2d所示,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220發(fā)送DataM消息,以便向?qū)Φ裙?jié)點(diǎn)220提供所請(qǐng)求數(shù)據(jù)的副本,以及使對(duì)等節(jié)點(diǎn)220以M狀態(tài)存儲(chǔ)數(shù)據(jù)副本。其它類型的消息(例如DataF、DataS)可用于向?qū)Φ裙?jié)點(diǎn)220提供所請(qǐng)求數(shù)據(jù)。對(duì)等節(jié)點(diǎn)210還把所保留的數(shù)據(jù)副本(如果有的話)標(biāo)記為處于I狀態(tài),因?yàn)镈ataM消息響應(yīng)PRIL消息。所保留的請(qǐng)求數(shù)據(jù)的副本不會(huì)由于例如PRL消息而無效。對(duì)等節(jié)點(diǎn)220還向歸屬節(jié)點(diǎn)240發(fā)送CNCL()消息,以便取消從非高速緩沖存儲(chǔ)器中對(duì)所請(qǐng)求數(shù)據(jù)的任何檢索。歸屬節(jié)點(diǎn)240以WAIT消息進(jìn)行響應(yīng),它使對(duì)等節(jié)點(diǎn)220在發(fā)送其它消息之前暫停。
在所述過程中的某個(gè)時(shí)間,對(duì)等節(jié)點(diǎn)230和代理290響應(yīng)請(qǐng)求這時(shí)沒有由對(duì)等節(jié)點(diǎn)230存儲(chǔ)或者沒有以I狀態(tài)存儲(chǔ)的數(shù)據(jù)塊的PRIL消息而向?qū)Φ裙?jié)點(diǎn)220發(fā)送IACK消息。對(duì)等節(jié)點(diǎn)220通過向?qū)Φ裙?jié)點(diǎn)210發(fā)送DACK消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的DataM消息。DACK消息斷定來自對(duì)等節(jié)點(diǎn)210和220的沖突PRIL消息的解決。
圖3a到3d提供由接近同時(shí)發(fā)出的請(qǐng)求(平局狀況)所引起的共享行沖突的概念說明。如圖3a所示,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求數(shù)據(jù)塊。某個(gè)短時(shí)段之后,或者甚至同時(shí),對(duì)等節(jié)點(diǎn)220向?qū)Φ裙?jié)點(diǎn)210和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求相同的數(shù)據(jù)塊。
響應(yīng)在接收所請(qǐng)求數(shù)據(jù)之前接收到來自另一個(gè)對(duì)等節(jié)點(diǎn)的PRIL消息,對(duì)等節(jié)點(diǎn)210向作為沖突PRIL消息的源的對(duì)等節(jié)點(diǎn)220發(fā)送CONFLICT消息。CONFLICT消息把請(qǐng)求沖突的存在從標(biāo)識(shí)沖突的對(duì)等節(jié)點(diǎn)傳遞到?jīng)_突中涉及的一個(gè)或多個(gè)其它對(duì)等節(jié)點(diǎn)。同樣,對(duì)等節(jié)點(diǎn)220響應(yīng)在接收所請(qǐng)求數(shù)據(jù)之前接收PRIL消息而向?qū)Φ裙?jié)點(diǎn)210發(fā)送CONFLICT消息。圖3b說明對(duì)等節(jié)點(diǎn)210與220之間的CONFLICT消息的傳送。
如圖3c所示,對(duì)等節(jié)點(diǎn)230以DataM消息向?qū)Φ裙?jié)點(diǎn)210提供所請(qǐng)求數(shù)據(jù),并把所保留的數(shù)據(jù)副本(如果有的話)標(biāo)記為I狀態(tài)。對(duì)等節(jié)點(diǎn)210接收所請(qǐng)求數(shù)據(jù),并將它以M狀態(tài)存儲(chǔ)。對(duì)等節(jié)點(diǎn)210則向歸屬節(jié)點(diǎn)240發(fā)送CNCL(220)消息。CNCL(220)消息使歸屬節(jié)點(diǎn)240取消從存儲(chǔ)器對(duì)所請(qǐng)求數(shù)據(jù)的檢索,并向歸屬節(jié)點(diǎn)240表明,在發(fā)送節(jié)點(diǎn)(即對(duì)等節(jié)點(diǎn)210)與對(duì)等節(jié)點(diǎn)220之間存在沖突。
響應(yīng)CNCL(220)消息,歸屬節(jié)點(diǎn)240向?qū)Φ裙?jié)點(diǎn)210發(fā)送XFER(220)消息。XFER(220)消息使對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220轉(zhuǎn)發(fā)該數(shù)據(jù)的副本。在一個(gè)實(shí)施例中,對(duì)等節(jié)點(diǎn)210在向?qū)Φ裙?jié)點(diǎn)220發(fā)送數(shù)據(jù)副本之前使用和/或修改所請(qǐng)求數(shù)據(jù)塊。在一個(gè)備選實(shí)施例中,對(duì)等節(jié)點(diǎn)210立即向?qū)Φ裙?jié)點(diǎn)220發(fā)送數(shù)據(jù)副本。響應(yīng)接收到來自歸屬節(jié)點(diǎn)240的XFER(220)消息,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)230發(fā)送DACK消息,確認(rèn)對(duì)所請(qǐng)求數(shù)據(jù)的接收。
如圖3d所示,響應(yīng)接收到來自對(duì)等節(jié)點(diǎn)210的DACK消息,對(duì)等節(jié)點(diǎn)230向?qū)Φ裙?jié)點(diǎn)220發(fā)送IACK消息,表明對(duì)等節(jié)點(diǎn)230沒有存儲(chǔ)所請(qǐng)求數(shù)據(jù)的有效副本。對(duì)等節(jié)點(diǎn)230不響應(yīng)第二PRIL消息(即來自對(duì)等節(jié)點(diǎn)220的PRIL消息),直到第一PRIL消息(即來自對(duì)等節(jié)點(diǎn)210的PRIL消息)被解決。響應(yīng)來自歸屬節(jié)點(diǎn)240的XFER(220)消息,對(duì)等節(jié)點(diǎn)210以DataM消息向?qū)Φ裙?jié)點(diǎn)220發(fā)送所請(qǐng)求數(shù)據(jù)的副本。對(duì)等節(jié)點(diǎn)210把保留數(shù)據(jù)的任何副本標(biāo)記為I狀態(tài),以及對(duì)等節(jié)點(diǎn)220以M狀態(tài)存儲(chǔ)所接收數(shù)據(jù)的副本。
對(duì)等節(jié)點(diǎn)220向歸屬節(jié)點(diǎn)240發(fā)送READ(210)消息,以便停止從存儲(chǔ)器對(duì)所請(qǐng)求數(shù)據(jù)的檢索,以及表明對(duì)等節(jié)點(diǎn)220已經(jīng)檢測(cè)到與對(duì)等節(jié)點(diǎn)210的沖突。歸屬節(jié)點(diǎn)240以發(fā)送給對(duì)等節(jié)點(diǎn)220的WAIT消息響應(yīng)READ(210)消息。WAIT消息使對(duì)等節(jié)點(diǎn)220在傳送任何后續(xù)消息之前暫停預(yù)定時(shí)段。對(duì)等節(jié)點(diǎn)220向?qū)Φ裙?jié)點(diǎn)210發(fā)送DACK消息,以表明對(duì)所請(qǐng)求數(shù)據(jù)的接收。
圖4a到4d提供由多個(gè)請(qǐng)求中一個(gè)的延遲所引起的共享行沖突的概念說明。如圖4a所示,對(duì)等節(jié)點(diǎn)220向?qū)Φ裙?jié)點(diǎn)210和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求數(shù)據(jù)塊。送往對(duì)等節(jié)點(diǎn)230的PRIL消息被延遲。延遲可能是因?yàn)槔缦到y(tǒng)等待時(shí)間、信息包損壞或其它任何原因。對(duì)等節(jié)點(diǎn)210以IACK消息響應(yīng)PRIL消息,表明對(duì)等節(jié)點(diǎn)210沒有存儲(chǔ)所請(qǐng)求數(shù)據(jù)的有效副本。
如圖4b所示,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求相同的數(shù)據(jù)塊。來自對(duì)等節(jié)點(diǎn)220的延遲PRIL消息由對(duì)等節(jié)點(diǎn)230在來自對(duì)等節(jié)點(diǎn)210的PRIL消息的同時(shí)或之后接收。對(duì)等節(jié)點(diǎn)230以DataM消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息,它向?qū)Φ裙?jié)點(diǎn)210提供所請(qǐng)求數(shù)據(jù)的副本,并使對(duì)等節(jié)點(diǎn)210以M狀態(tài)來存儲(chǔ)該數(shù)據(jù)。對(duì)等節(jié)點(diǎn)230把所請(qǐng)求數(shù)據(jù)的保留副本(如果有的話)標(biāo)記為I狀態(tài)。對(duì)等節(jié)點(diǎn)220以CONFLICT消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息,向?qū)Φ裙?jié)點(diǎn)210表明,對(duì)等節(jié)點(diǎn)220已經(jīng)檢測(cè)到兩個(gè)節(jié)點(diǎn)的請(qǐng)求之間的沖突。
如圖4c所示,對(duì)等節(jié)點(diǎn)210向歸屬節(jié)點(diǎn)240發(fā)送CNCL(220)消息,以便取消從存儲(chǔ)器對(duì)所請(qǐng)求數(shù)據(jù)的檢索。CNCL(220)消息還向歸屬節(jié)點(diǎn)240表明,在對(duì)等節(jié)點(diǎn)210與對(duì)等節(jié)點(diǎn)220之間存在沖突。歸屬節(jié)點(diǎn)240以XFER(220)消息來響應(yīng)CNCL(220)消息,它使對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220發(fā)送所請(qǐng)求數(shù)據(jù)的副本。在一個(gè)實(shí)施例中,對(duì)等節(jié)點(diǎn)210在向?qū)Φ裙?jié)點(diǎn)220發(fā)送數(shù)據(jù)副本之前使用和/或修改所請(qǐng)求數(shù)據(jù)塊。在一個(gè)備選實(shí)施例中,對(duì)等節(jié)點(diǎn)210立即向?qū)Φ裙?jié)點(diǎn)220發(fā)送數(shù)據(jù)副本。
對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)230發(fā)送DACK消息,以確認(rèn)對(duì)所請(qǐng)求數(shù)據(jù)的接收。對(duì)等節(jié)點(diǎn)210還向?qū)Φ裙?jié)點(diǎn)220發(fā)送DataM消息,以便提供所請(qǐng)求數(shù)據(jù)的副本。對(duì)等節(jié)點(diǎn)220以M狀態(tài)存儲(chǔ)所請(qǐng)求數(shù)據(jù),而對(duì)等節(jié)點(diǎn)210則把所請(qǐng)求數(shù)據(jù)的任何剩余副本標(biāo)記為I狀態(tài)。
如圖4d所示,對(duì)等節(jié)點(diǎn)230響應(yīng)接收到來自對(duì)等節(jié)點(diǎn)210的DACK消息,向?qū)Φ裙?jié)點(diǎn)220發(fā)送IACK消息。IACK消息表明對(duì)等節(jié)點(diǎn)230沒有存儲(chǔ)所請(qǐng)求數(shù)據(jù)的有效副本。對(duì)等節(jié)點(diǎn)220向歸屬節(jié)點(diǎn)240發(fā)送READ(210)消息。READ(210)消息取消從存儲(chǔ)器對(duì)所請(qǐng)求數(shù)據(jù)的檢索,并向歸屬節(jié)點(diǎn)240表明,對(duì)等節(jié)點(diǎn)220與對(duì)等節(jié)點(diǎn)210有沖突。
歸屬節(jié)點(diǎn)240以WAIT消息來響應(yīng)READ(210)消息,它使對(duì)等節(jié)點(diǎn)220在發(fā)送任何后續(xù)消息之前暫停預(yù)定時(shí)段。對(duì)等節(jié)點(diǎn)220以DACK消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的DataM消息,它確認(rèn)對(duì)于來自對(duì)等節(jié)點(diǎn)210的所請(qǐng)求數(shù)據(jù)的接收。
圖5a到5d提供無效行沖突的概念說明。如圖5a所示,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求數(shù)據(jù)塊。如圖5b所示,在來自對(duì)等節(jié)點(diǎn)210的PRIL消息的同時(shí)或稍后,對(duì)等節(jié)點(diǎn)220向?qū)Φ裙?jié)點(diǎn)210和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求相同的數(shù)據(jù)。
如圖5c所示,對(duì)等節(jié)點(diǎn)230以IACK消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息,表明對(duì)等節(jié)點(diǎn)230沒有存儲(chǔ)所請(qǐng)求數(shù)據(jù)的有效副本。同樣,對(duì)等節(jié)點(diǎn)230以IACK消息響應(yīng)來自對(duì)等節(jié)點(diǎn)220的PRIL消息。對(duì)等節(jié)點(diǎn)220以CONFLICT消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息,以便傳遞對(duì)等節(jié)點(diǎn)210與220之間的沖突的標(biāo)識(shí)。同樣,對(duì)等節(jié)點(diǎn)210以CONFLICT消息響應(yīng)來自對(duì)等節(jié)點(diǎn)220的PRIL消息。
如圖5d所示,對(duì)等節(jié)點(diǎn)210向歸屬節(jié)點(diǎn)240發(fā)送READ(220)消息。READ(220)消息讀取來自已經(jīng)從存儲(chǔ)器檢索了所請(qǐng)求數(shù)據(jù)的歸屬節(jié)點(diǎn)240的先前所請(qǐng)求數(shù)據(jù)。歸屬節(jié)點(diǎn)240以Data,XFER(220)消息向?qū)Φ裙?jié)點(diǎn)210提供所請(qǐng)求數(shù)據(jù)。在一個(gè)實(shí)施例中,歸屬節(jié)點(diǎn)240把來自兩種消息(即Data和XFER)的信息包含到單個(gè)消息包中。這種“搭載”技術(shù)可降低解決沖突所需的帶寬。
“Data,XFER(220)”消息向?qū)Φ裙?jié)點(diǎn)210提供所請(qǐng)求數(shù)據(jù),并且還使對(duì)等節(jié)點(diǎn)210把所請(qǐng)求數(shù)據(jù)傳送給對(duì)等節(jié)點(diǎn)220。當(dāng)對(duì)等節(jié)點(diǎn)210接收到所請(qǐng)求數(shù)據(jù)時(shí),所請(qǐng)求數(shù)據(jù)以M狀態(tài)被存儲(chǔ)。
在接收所請(qǐng)求數(shù)據(jù)之后,對(duì)等節(jié)點(diǎn)210以DataM消息向?qū)Φ裙?jié)點(diǎn)220發(fā)送所請(qǐng)求數(shù)據(jù)的副本。對(duì)等節(jié)點(diǎn)210所保留的所請(qǐng)求數(shù)據(jù)的任何副本被標(biāo)記為I狀態(tài)。對(duì)等節(jié)點(diǎn)220以M狀態(tài)存儲(chǔ)所請(qǐng)求數(shù)據(jù),并以DACK消息向?qū)Φ裙?jié)點(diǎn)210確認(rèn)對(duì)所請(qǐng)求數(shù)據(jù)的接收。
圖6a到6d提供由多個(gè)請(qǐng)求中一個(gè)的延遲所引起的無效行沖突的概念說明。如圖6a所示,對(duì)等節(jié)點(diǎn)220向?qū)Φ裙?jié)點(diǎn)210和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求數(shù)據(jù)塊。送往對(duì)等節(jié)點(diǎn)230的PRIL消息被延遲。延遲可能是因?yàn)槔缦到y(tǒng)等待時(shí)間、信息包損壞或其它任何原因。對(duì)等節(jié)點(diǎn)210以IACK消息響應(yīng)PRIL消息,表明對(duì)等節(jié)點(diǎn)210沒有存儲(chǔ)所請(qǐng)求數(shù)據(jù)的有效副本。
如圖6b所示,對(duì)等節(jié)點(diǎn)210向?qū)Φ裙?jié)點(diǎn)220和230以及向歸屬節(jié)點(diǎn)240發(fā)送PRIL消息,請(qǐng)求相同的數(shù)據(jù)塊。來自對(duì)等節(jié)點(diǎn)220的延遲PRIL消息由對(duì)等節(jié)點(diǎn)230在來自對(duì)等節(jié)點(diǎn)210的PRIL消息的同時(shí)或之后接收。對(duì)等節(jié)點(diǎn)220以CONFLICT消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息,向?qū)Φ裙?jié)點(diǎn)210表明,對(duì)等節(jié)點(diǎn)220已經(jīng)檢測(cè)到兩個(gè)節(jié)點(diǎn)的請(qǐng)求之間的沖突。
如圖6c所示,對(duì)等節(jié)點(diǎn)230以IACK消息響應(yīng)來自對(duì)等節(jié)點(diǎn)210的PRIL消息,表明對(duì)等節(jié)點(diǎn)230沒有存儲(chǔ)對(duì)等節(jié)點(diǎn)210所請(qǐng)求的數(shù)據(jù)的有效副本。同樣,對(duì)等節(jié)點(diǎn)230以IACK消息響應(yīng)來自對(duì)等節(jié)點(diǎn)220的PRIL消息,表明對(duì)等節(jié)點(diǎn)230沒有存儲(chǔ)對(duì)等節(jié)點(diǎn)220所請(qǐng)求的數(shù)據(jù)的有效副本。
如圖6d所示,對(duì)等節(jié)點(diǎn)210向歸屬節(jié)點(diǎn)240發(fā)送READ(220)消息。READ(220)消息讀取來自已經(jīng)從存儲(chǔ)器檢索所請(qǐng)求數(shù)據(jù)的歸屬節(jié)點(diǎn)240的先前所請(qǐng)求數(shù)據(jù)。歸屬節(jié)點(diǎn)240以Data,XFER(220)消息向?qū)Φ裙?jié)點(diǎn)210提供所請(qǐng)求數(shù)據(jù)。
在接收所請(qǐng)求數(shù)據(jù)之后,對(duì)等節(jié)點(diǎn)210以DataM消息向?qū)Φ裙?jié)點(diǎn)220發(fā)送所請(qǐng)求數(shù)據(jù)的副本。對(duì)等節(jié)點(diǎn)210所保留的所請(qǐng)求數(shù)據(jù)的任何副本被標(biāo)記為I狀態(tài)。對(duì)等節(jié)點(diǎn)220以M狀態(tài)存儲(chǔ)所請(qǐng)求數(shù)據(jù),并以DACK消息向?qū)Φ裙?jié)點(diǎn)210確認(rèn)所請(qǐng)求數(shù)據(jù)的接收。
支持推測(cè)分布式?jīng)_突解決的示例系統(tǒng)圖7是節(jié)點(diǎn)的一個(gè)實(shí)施例的框圖。節(jié)點(diǎn)700表示為具有單處理器、高速緩沖存儲(chǔ)器、存儲(chǔ)控制器以及存儲(chǔ)器;但是,這些組件的任一個(gè)的任何數(shù)量均可包含在一個(gè)節(jié)點(diǎn)中。此外,附加和/或不同組件(例如總線橋)也可包含在節(jié)點(diǎn)中。
處理器710可以是本領(lǐng)域已知的任何類型的處理器。在一個(gè)實(shí)施例中,處理器710包括高速緩沖存儲(chǔ)器720。在備選實(shí)施例中,高速緩沖存儲(chǔ)器720是處理器710外部的,或者可包括處理器710內(nèi)部或外部的附加高速緩沖存儲(chǔ)器。
存儲(chǔ)控制器730與高速緩沖存儲(chǔ)器720和存儲(chǔ)器740耦合。存儲(chǔ)控制器730用作高速緩沖存儲(chǔ)器720與存儲(chǔ)器740之間的接口。在一個(gè)實(shí)施例中,存儲(chǔ)控制器730根據(jù)本文所述的高速緩存相干協(xié)議來保持高速緩存相關(guān)性。存儲(chǔ)控制器730經(jīng)由節(jié)點(diǎn)鏈路750與其它節(jié)點(diǎn)交互。在一個(gè)備選實(shí)施例中,處理器710與存儲(chǔ)控制器730交互,以便保持高速緩存相干性,如本文所述,以及處理器710經(jīng)由備選節(jié)點(diǎn)鏈路755與其它節(jié)點(diǎn)交互。
在一個(gè)實(shí)施例中,節(jié)點(diǎn)鏈路750包括節(jié)點(diǎn)700與其交互的各節(jié)點(diǎn)的專用接口。在一個(gè)備選實(shí)施例中,節(jié)點(diǎn)鏈路750包括多個(gè)接口,其數(shù)量不同于節(jié)點(diǎn)700與其交互的節(jié)點(diǎn)的數(shù)量。在一個(gè)實(shí)施例中,節(jié)點(diǎn)700與表示多個(gè)節(jié)點(diǎn)的一個(gè)或多個(gè)代理交互。
圖8是多處理器系統(tǒng)的一個(gè)實(shí)施例。多處理器系統(tǒng)800用于表示具有多個(gè)處理器的一系列系統(tǒng),例如計(jì)算機(jī)系統(tǒng)、實(shí)時(shí)監(jiān)測(cè)系統(tǒng)等。其它多處理器系統(tǒng)可包括更多、更少和/或不同的組件。在某些情況下,本文所述的高速緩存管理技術(shù)可應(yīng)用于單處理器和多處理器系統(tǒng)。多處理器系統(tǒng)800可配置成作為多節(jié)點(diǎn)系統(tǒng)來工作。
多處理器系統(tǒng)800包括總線系統(tǒng)810或傳遞信息的其它通信裝置。總線系統(tǒng)810可包括任何數(shù)量的總線及相關(guān)互連電路、例如總線橋。處理器820與總線系統(tǒng)810耦合以處理信息。處理器820可包括例如零級(jí)(L0)高速緩沖存儲(chǔ)器等高速緩沖存儲(chǔ)器822和高速緩存控制器824。在一個(gè)實(shí)施例中,處理器820還與可以是任何類型的高速緩沖存儲(chǔ)器的高速緩存825耦合。在一個(gè)備選實(shí)施例中,高速緩存825可與總線系統(tǒng)810耦合。也可使用其它類型的處理器-高速緩存配置。
在一個(gè)實(shí)施例中,高速緩存控制器824經(jīng)由可以是例如處理器820內(nèi)部的總線的高速緩沖存儲(chǔ)器接口828與高速緩沖存儲(chǔ)器822耦合。高速緩存控制器經(jīng)由提供處理器820與外部高速緩沖存儲(chǔ)器之間接口的高速緩存接口826與高速緩沖存儲(chǔ)器825耦合。
多處理器系統(tǒng)800還包括具有高速緩沖存儲(chǔ)器832和高速緩存控制器834的處理器830。高速緩存控制器834經(jīng)由高速緩存接口838與高速緩沖存儲(chǔ)器832耦合。同樣,高速緩存控制器834經(jīng)由高速緩存接口836與高速緩沖存儲(chǔ)器835耦合。在一個(gè)實(shí)施例中,高速緩沖存儲(chǔ)器835與處理器830耦合。
雖然多處理器系統(tǒng)800表示為具有兩個(gè)處理器,但多處理器系統(tǒng)800可包括任何數(shù)量的處理器和/或協(xié)處理器。多處理器系統(tǒng)800還包括與總線系統(tǒng)810耦合的存儲(chǔ)系統(tǒng)840。存儲(chǔ)系統(tǒng)840可包括動(dòng)態(tài)(例如隨機(jī)存取存儲(chǔ)器)和靜態(tài)(例如只讀存儲(chǔ)器、CD-ROM、盤存儲(chǔ)裝置、閃存)存儲(chǔ)裝置的任何組合及適當(dāng)?shù)南嚓P(guān)驅(qū)動(dòng)器。存儲(chǔ)系統(tǒng)840的存儲(chǔ)裝置用來存儲(chǔ)由多處理器系統(tǒng)800的處理器執(zhí)行的信息和指令。存儲(chǔ)系統(tǒng)840還可用于在處理器執(zhí)行指令的過程中存儲(chǔ)臨時(shí)變量或其它中間信息。
指令可從諸如磁盤、只讀存儲(chǔ)器(ROM)集成電路、CD-ROM、DVD等靜態(tài)或遠(yuǎn)程存儲(chǔ)裝置經(jīng)由有線或無線遠(yuǎn)程連接等提供給存儲(chǔ)系統(tǒng)840。在備選實(shí)施例中,硬布線電路可用來代替軟件指令或與其結(jié)合。因此,指令序列的執(zhí)行不限于硬件電路和軟件指令的任何特定組合。
多處理器系統(tǒng)800還包括網(wǎng)絡(luò)接口850,以便提供對(duì)網(wǎng)絡(luò)、如局域網(wǎng)和/或因特網(wǎng)的接入。網(wǎng)絡(luò)接口850可提供無線和/或有線網(wǎng)絡(luò)接口,它可包括與遠(yuǎn)程電可存取媒體之間的指令傳遞。電可存取媒體包括以電子裝置(例如計(jì)算機(jī)、個(gè)人數(shù)字助理、蜂窩電話)可讀形式提供(即存儲(chǔ)和/或傳送)內(nèi)容(例如計(jì)算機(jī)可執(zhí)行指令)的任何機(jī)構(gòu)。
例如,機(jī)器可存取媒體包括只讀存儲(chǔ)器(ROM);隨機(jī)存取存儲(chǔ)器(RAM);磁盤存儲(chǔ)媒體;光存儲(chǔ)媒體;閃存裝置;電、光、聲或其它形式的傳播信號(hào)(例如載波、紅外信號(hào)、數(shù)字信號(hào))。
多處理器系統(tǒng)800還可包括顯示裝置860、如陰極射線管(CRT)或液晶顯示器(LCD),以便顯示信息。包括例如具有字母數(shù)字鍵及其它鍵的鍵盤在內(nèi)的輸入裝置870通常耦合到總線810,以便向處理器820和/或830傳遞信息和命令選擇。另一種用戶輸入裝置是光標(biāo)控制裝置,如鼠標(biāo)、軌跡球或光標(biāo)方向鍵,以便向處理器820和830傳遞方向信息和命令選擇,以及控制顯示裝置860上的光標(biāo)運(yùn)動(dòng)。
說明中提到“一個(gè)實(shí)施例”或“實(shí)施例”表示結(jié)合這些實(shí)施例所述的特定特征、結(jié)構(gòu)或特性包含在本發(fā)明的至少一個(gè)實(shí)施例中。詞組“在一個(gè)實(shí)施例中”在本說明的各個(gè)位置中的出現(xiàn)不一定都表示同一個(gè)實(shí)施例。
在以上說明中,參照特定實(shí)施例對(duì)本發(fā)明進(jìn)行了說明。但是,顯然可對(duì)其進(jìn)行各種修改及變更,而沒有背離本發(fā)明的廣義精神和范圍。因此,說明書和附圖應(yīng)看作是說明性的而不是限制性的。
附錄A以下是以偽代碼格式對(duì)MESIF算法的示例描述。描述是基于信息包的;即,每個(gè)例程響應(yīng)入局或出局信息包而執(zhí)行?;蛘?,算法可描述為對(duì)于因信息包被接收或產(chǎn)生而引起的狀態(tài)改變的反應(yīng)。
為了簡(jiǎn)化描述,進(jìn)行下列假設(shè)1.每個(gè)對(duì)等/請(qǐng)求節(jié)點(diǎn)具有單個(gè)高速緩存代理;2.歸屬節(jié)點(diǎn)沒有高速緩存代理;以及3.歸屬節(jié)點(diǎn)中存儲(chǔ)器請(qǐng)求所用的算法可能比所表示的更為復(fù)雜,并處理MESIF引起的所有角落情況(不止一次讀取、多個(gè)時(shí)期、寫入轉(zhuǎn)發(fā)等)。
具有高速緩存代理的歸屬節(jié)點(diǎn)的情況(在部分實(shí)施例中可能出現(xiàn))由給定算法得出,即通過以下方式進(jìn)行通過使涉及由本地高速緩存代理(或代理人)進(jìn)行的與歸屬節(jié)點(diǎn)之間的傳輸?shù)睦虄?nèi)在化,來結(jié)合所接收信息包的例程。
在一個(gè)實(shí)施例中,高速緩存服從以下約束1.高速緩存只在行處于I狀態(tài)時(shí)才產(chǎn)生PRL。
2.高速緩存只在行處于I或S狀態(tài)時(shí)才產(chǎn)生PRIL。
3.高速緩存只在行處于M狀態(tài)時(shí)才產(chǎn)生PWL。
4.高速緩存可隨意從S、F和E狀態(tài)轉(zhuǎn)變到I狀態(tài)。
5.高速緩存可隨意從E狀態(tài)轉(zhuǎn)變到M狀態(tài)(假定發(fā)生寫入)。
6.高速緩存也可僅在它所發(fā)出的請(qǐng)求完成時(shí)或者在接收到來自對(duì)等體的請(qǐng)求時(shí)才轉(zhuǎn)變。
以下描述的基本協(xié)議僅包含PRL、PRIL和PWL請(qǐng)求,并使用涉及與傳輸數(shù)據(jù)共同傳遞的沖突列表的沖突解決方法。在以下部分包含對(duì)這個(gè)基本協(xié)議的擴(kuò)充和選項(xiàng)。
基本MESIF協(xié)議請(qǐng)求生成調(diào)用
高速緩存產(chǎn)生對(duì)(不活動(dòng))地址的新請(qǐng)求算法把地址標(biāo)記為活動(dòng)的If請(qǐng)求為PRL或PRIL向所有其它對(duì)等節(jié)點(diǎn)以及向歸屬節(jié)點(diǎn)發(fā)送請(qǐng)求If請(qǐng)求為PWL向歸屬節(jié)點(diǎn)發(fā)送請(qǐng)求由歸屬節(jié)點(diǎn)進(jìn)行的請(qǐng)求接收調(diào)用在歸屬節(jié)點(diǎn)接收的請(qǐng)求算法If請(qǐng)求為PWL發(fā)起對(duì)存儲(chǔ)器的寫入(處理轉(zhuǎn)發(fā)、取消未完成的讀取等)向請(qǐng)求方發(fā)回ACKIf請(qǐng)求為PRL或PRIL發(fā)起從存儲(chǔ)器的讀取(如果讀取在接收到READ之前完成,則緩沖數(shù)據(jù),等等)由對(duì)等節(jié)點(diǎn)進(jìn)行的請(qǐng)求接收調(diào)用在對(duì)等節(jié)點(diǎn)接收的請(qǐng)求(PRL或PRIL)算法If地址正被轉(zhuǎn)發(fā)緩沖入局請(qǐng)求Else if地址不是活動(dòng)的窺探高速緩存Else if地址是活動(dòng)的If活動(dòng)請(qǐng)求為PWL
緩沖入局請(qǐng)求--End IfIf入局請(qǐng)求處于活動(dòng)請(qǐng)求的沖突列表中If活動(dòng)請(qǐng)求為PRL以CNFL響應(yīng)Else(活動(dòng)請(qǐng)求為PRIL)以CNFLI響應(yīng)Else if活動(dòng)請(qǐng)求處于“數(shù)據(jù)階段”(參見下面的“收集響應(yīng)”)緩沖入局請(qǐng)求Else把請(qǐng)求方添加到(活動(dòng)請(qǐng)求的)沖突列表If入局請(qǐng)求為PRIL把沖突列表中的請(qǐng)求方標(biāo)記為PRIL沖突方If活動(dòng)請(qǐng)求為PRL以CNFL響應(yīng)Else(活動(dòng)請(qǐng)求為PRIL)以CNFLI響應(yīng)窺探響應(yīng)調(diào)用(作為窺探)提交給高速緩存用于適當(dāng)響應(yīng)產(chǎn)生的請(qǐng)求算法根據(jù)當(dāng)前高速緩存狀態(tài)和入局請(qǐng)求類型查找下表中的響應(yīng)和下一個(gè)狀態(tài)(S/I的下一個(gè)狀態(tài)表示高速緩存可把行移動(dòng)到任一狀態(tài);注意即使讓本地副本無效,仍然對(duì)PRL發(fā)送DATA_F--參見以下的PRL DATA E/M響應(yīng)選項(xiàng))
IfPRL窺探命中處于M狀態(tài)的高速緩存行發(fā)起PWL請(qǐng)求緩沖窺探(推遲發(fā)送DATA_F,直到回寫完成)ElseIf窺探命中高速緩存行(處于M、E或F狀態(tài))把地址標(biāo)記為正轉(zhuǎn)發(fā)把高速緩存行改變?yōu)橄乱粋€(gè)狀態(tài)向請(qǐng)求方發(fā)送響應(yīng)收集響應(yīng)調(diào)用PRL/PRIL請(qǐng)求接收到來自對(duì)等節(jié)點(diǎn)的響應(yīng)算法If響應(yīng)為SACK(僅PRL)記錄系統(tǒng)中共享副本的存在Else if響應(yīng)為DATA記錄對(duì)來自響應(yīng)節(jié)點(diǎn)的轉(zhuǎn)發(fā)數(shù)據(jù)的接收向高速緩存發(fā)送高速緩存行和新狀態(tài)(注意行仍然不是全局可觀察的!)Else if響應(yīng)為CNFL把響應(yīng)節(jié)點(diǎn)添加到?jīng)_突列表Else if響應(yīng)為CNFLI把響應(yīng)節(jié)點(diǎn)添加到?jīng)_突列表把響應(yīng)節(jié)點(diǎn)標(biāo)記為PRIL沖突方--End If
If所有對(duì)等節(jié)點(diǎn)已經(jīng)響應(yīng)把請(qǐng)求標(biāo)為處于“數(shù)據(jù)階段”If接收到數(shù)據(jù)響應(yīng)向轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送CNCL以及向歸屬節(jié)點(diǎn)發(fā)送沖突列表Else向歸屬節(jié)點(diǎn)發(fā)送READ和沖突列表在歸屬節(jié)點(diǎn)取消調(diào)用歸屬節(jié)點(diǎn)接收到CNCL(包含轉(zhuǎn)發(fā)節(jié)點(diǎn)和沖突列表)算法取消未完成的讀取(如果有的話)把請(qǐng)求節(jié)點(diǎn)標(biāo)記為這個(gè)地址的“當(dāng)前擁有者”向轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送DACKIf沒有沖突向請(qǐng)求節(jié)點(diǎn)發(fā)送ACK--無沖突高速緩存時(shí)期完成Else結(jié)合沖突列表作為這個(gè)地址的“未完成請(qǐng)求”--等待對(duì)XFR數(shù)據(jù)的READ在歸屬節(jié)點(diǎn)的讀取請(qǐng)求調(diào)用歸屬節(jié)點(diǎn)接收到READ(包含沖突列表)算法If沒有當(dāng)前擁有者If數(shù)據(jù)不可用等待完成讀取向請(qǐng)求節(jié)點(diǎn)發(fā)送DATA_EIf沖突列表為空向請(qǐng)求節(jié)點(diǎn)發(fā)送ACK--無沖突未高速緩存時(shí)期完成Else結(jié)合沖突列表作為這個(gè)地址的“未完成節(jié)點(diǎn)”Else把未完成沖突添加到這個(gè)地址的“未完成節(jié)點(diǎn)”從“未完成節(jié)點(diǎn)”刪除請(qǐng)求節(jié)點(diǎn)If沒有(剩余)未完成節(jié)點(diǎn)向“當(dāng)前擁有者”發(fā)送XFR(目標(biāo)請(qǐng)求節(jié)點(diǎn))向請(qǐng)求節(jié)點(diǎn)發(fā)送ACK--時(shí)期完成ElseIf一個(gè)或多個(gè)未完成節(jié)點(diǎn)(包括請(qǐng)求方)為PRIL向“當(dāng)前擁有者”發(fā)送XFRI(目標(biāo)請(qǐng)求節(jié)點(diǎn))Else向“當(dāng)前擁有者”發(fā)送XFR(目標(biāo)請(qǐng)求節(jié)點(diǎn))把請(qǐng)求節(jié)點(diǎn)標(biāo)記為“當(dāng)前擁有者”傳輸接收調(diào)用請(qǐng)求方接收到XFR或XFRI(包含目標(biāo)節(jié)點(diǎn))算法在仍未接收到時(shí)等待數(shù)據(jù)If接收到XFRI向高速緩存發(fā)送PRIL窺探Else向高速緩存發(fā)送PRL窺探把沖突列表(無接收節(jié)點(diǎn))添加到DATA包把DATA包發(fā)送到目標(biāo)節(jié)點(diǎn)傳輸數(shù)據(jù)接收調(diào)用請(qǐng)求方作為XFR的結(jié)果接收到DATA(包含沖突列表)算法向處理器發(fā)送數(shù)據(jù)把沖突列表結(jié)合到當(dāng)前沖突列表If緩沖請(qǐng)求匹配沖突列表中的條目以CNFL響應(yīng)每個(gè)匹配請(qǐng)求轉(zhuǎn)發(fā)DACK調(diào)用轉(zhuǎn)發(fā)節(jié)點(diǎn)接收到DACK算法取消地址標(biāo)為正轉(zhuǎn)發(fā)的標(biāo)記服務(wù)緩沖用于接收對(duì)等請(qǐng)求的每個(gè)算法的請(qǐng)求請(qǐng)求ACK調(diào)用請(qǐng)求方接收到來自歸屬節(jié)點(diǎn)的ACK算法If活動(dòng)請(qǐng)求為PWL把高速緩存行轉(zhuǎn)換到預(yù)期的下一個(gè)狀態(tài)(E或I)If緩沖窺探(PRL命中M狀態(tài)的行)向請(qǐng)求方發(fā)送DATA_F把高速緩存行改變?yōu)橄乱粋€(gè)狀態(tài)(S)或I狀態(tài)Else(請(qǐng)求為PRL或PRIL)釋放緩沖請(qǐng)求(即把它們當(dāng)作好像剛到達(dá)該節(jié)點(diǎn)來處理)在仍未接收到時(shí)等待數(shù)據(jù)向處理器發(fā)送ACK<<<===基本協(xié)議結(jié)束===>>>
PIL請(qǐng)求在以上協(xié)議算法中,節(jié)點(diǎn)把高速緩存行從F狀態(tài)移動(dòng)到E狀態(tài)的唯一方式是使該行無效(把行改變?yōu)镮狀態(tài)),然后再請(qǐng)求PRIL。這涉及DATA傳輸。
為了支持直接F->E轉(zhuǎn)變,可使用PIL請(qǐng)求。這個(gè)請(qǐng)求發(fā)送到所有對(duì)等節(jié)點(diǎn)和歸屬節(jié)點(diǎn),并使其它高速緩存使它們的行共享副本無效。為了防止正在傳送中的PRIL和/或PRL干擾這種轉(zhuǎn)變,PIL可被給予更高優(yōu)先級(jí)。
對(duì)基本協(xié)議的改變請(qǐng)求生成調(diào)用高速緩存產(chǎn)生對(duì)(不活動(dòng))地址的新請(qǐng)求算法把地址標(biāo)記為活動(dòng)If請(qǐng)求為PRL或PRIL向所有其它對(duì)等節(jié)點(diǎn)以及向歸屬節(jié)點(diǎn)發(fā)送請(qǐng)求>>If請(qǐng)求為PIL>>向所有其它對(duì)等節(jié)點(diǎn)發(fā)送請(qǐng)求If請(qǐng)求為PWL向歸屬節(jié)點(diǎn)發(fā)送請(qǐng)求由對(duì)等節(jié)點(diǎn)進(jìn)行的請(qǐng)求接收調(diào)用在對(duì)等節(jié)點(diǎn)接收的請(qǐng)求(PRL或PRIL)如果存在活動(dòng)PIL請(qǐng)求,則對(duì)算法的唯一改變是緩沖請(qǐng)求,如對(duì)于活動(dòng)PWL進(jìn)行的那樣。
由對(duì)等節(jié)點(diǎn)進(jìn)行的PIL請(qǐng)求接收調(diào)用在對(duì)等節(jié)點(diǎn)接收的PIL請(qǐng)求算法向高速緩存發(fā)送PIL窺探窺探響應(yīng)對(duì)于新的響應(yīng)/下一個(gè)狀態(tài)表使用的相同算法(沒有具有PIL的F、E和M的條目,因?yàn)镕和F、E和M中的請(qǐng)求方是相互排他的)
收集響應(yīng)調(diào)用PIL請(qǐng)求接收到來自對(duì)等節(jié)點(diǎn)的響應(yīng)算法If所有對(duì)等節(jié)點(diǎn)已經(jīng)響應(yīng)通知高速緩存把行移動(dòng)到E狀態(tài)釋放任何緩沖的請(qǐng)求--PIL請(qǐng)求完成M->SPWL和立即響應(yīng)PRL命中M狀態(tài)的行存在的性能問題是需要在轉(zhuǎn)發(fā)數(shù)據(jù)之前進(jìn)行回寫(發(fā)出PWL)。通過某些細(xì)微變化,數(shù)據(jù)可能同時(shí)被轉(zhuǎn)發(fā)和回寫。歸屬節(jié)點(diǎn)不發(fā)送DACK,直到它已經(jīng)接收到來自請(qǐng)求方/勝方的PWL請(qǐng)求和CNCL。
對(duì)基本協(xié)議的改變由歸屬節(jié)點(diǎn)進(jìn)行的請(qǐng)求接收調(diào)用
在歸屬節(jié)點(diǎn)接收的請(qǐng)求算法If請(qǐng)求為PWL發(fā)起對(duì)存儲(chǔ)器的寫入(處理轉(zhuǎn)發(fā)、取消未完成的讀取等)>>IfPWL是用于PRL命中M>>If接收到CNCL>>向CNCL中表明的轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送DACK>>Else>>把地址標(biāo)記為被回寫>>Else>>向請(qǐng)求方發(fā)回ACKIf請(qǐng)求為PRL或PRIL發(fā)起從存儲(chǔ)器的讀取(如果讀取在接收到READ之前完成,則緩沖數(shù)據(jù),等等)窺探響應(yīng)調(diào)用(作為窺探)提交給高速緩存用于適當(dāng)響應(yīng)產(chǎn)生的請(qǐng)求算法進(jìn)行如基本協(xié)議中的響應(yīng)/下一個(gè)狀態(tài)查找If窺探命中高速緩存行(處于M、E或F狀態(tài))把地址標(biāo)記為正被轉(zhuǎn)發(fā)把高速緩存行改變?yōu)橄乱粋€(gè)狀態(tài)IfPRL窺探命中M狀態(tài)的高速緩存行發(fā)起標(biāo)記為PRL命中M回寫的PWL向請(qǐng)求方發(fā)送DATA_F,標(biāo)記為PRL命中MElse向請(qǐng)求方發(fā)送響應(yīng)收集響應(yīng)算法差別是在記錄PRL命中M數(shù)據(jù)以及當(dāng)發(fā)送CNCL時(shí)通知?dú)w屬節(jié)點(diǎn)特殊轉(zhuǎn)發(fā)Else if響應(yīng)為DATA記錄對(duì)來自響應(yīng)節(jié)點(diǎn)的轉(zhuǎn)發(fā)數(shù)據(jù)的接收IfPRL請(qǐng)求并命中M(經(jīng)由DATA表明)把轉(zhuǎn)發(fā)節(jié)點(diǎn)標(biāo)記為PRL命中M向高速緩存發(fā)送高速緩存行和新狀態(tài)(注意行仍然不是全局可觀察的!)If所有對(duì)等節(jié)點(diǎn)已經(jīng)響應(yīng)If接收到數(shù)據(jù)響應(yīng)向轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送CNCL(如果它是,則標(biāo)記為PRL命中M),以及向歸屬節(jié)點(diǎn)發(fā)送沖突列表在歸屬節(jié)點(diǎn)取消調(diào)用歸屬節(jié)點(diǎn)接收到CNCL(包含轉(zhuǎn)發(fā)節(jié)點(diǎn)和沖突列表)算法唯一的差別是在確定是否發(fā)送DACK方面If轉(zhuǎn)發(fā)節(jié)點(diǎn)進(jìn)行了PRL命中M回寫If已經(jīng)接收到PWL向轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送DACKElse把地址標(biāo)記為需要回寫Else向轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送DACK轉(zhuǎn)發(fā)DACK沒有差別。所發(fā)出的PWL作為一次性信息包(或者由DACK完成的請(qǐng)求)處理FM狀態(tài)PRL命中M狀態(tài)的行的另一個(gè)備選方案是把FM狀態(tài)引入MESIF。這個(gè)狀態(tài)表明已修改行的共享副本。如同M狀態(tài)一樣,數(shù)據(jù)在被驅(qū)逐出高速緩存時(shí)必須回寫(PWL)。如同F(xiàn)狀態(tài)一樣,數(shù)據(jù)無法被改變,以及節(jié)點(diǎn)對(duì)于對(duì)行的讀取請(qǐng)求以命中來響應(yīng)。
當(dāng)具有M狀態(tài)的行的節(jié)點(diǎn)接收PRL時(shí),它以DATA_FM進(jìn)行響應(yīng),而不是發(fā)出PWL并以DATA_F進(jìn)行響應(yīng)。
除經(jīng)由PIL之外,不允許從FM到M的轉(zhuǎn)變。不允許從FM直接改變到E。
對(duì)基本協(xié)議的改變窺探響應(yīng)調(diào)用(作為窺探)提交給高速緩存用于適當(dāng)響應(yīng)產(chǎn)生的請(qǐng)求算法根據(jù)當(dāng)前高速緩存狀態(tài)和入局請(qǐng)求類型查找下表中的響應(yīng)和下一個(gè)狀態(tài)(S/I的下一個(gè)狀態(tài)表示高速緩存可把行移動(dòng)到任一狀態(tài);注意即使讓本地副本無效,仍然對(duì)PRL發(fā)送DATA_F(M)--參見以下的PRL DATA E/M響應(yīng)選項(xiàng))
If窺探命中高速緩存行(處于M、E或F狀態(tài))
把地址標(biāo)記為正被轉(zhuǎn)發(fā)把高速緩存行改變?yōu)橄乱粋€(gè)狀態(tài)向請(qǐng)求方發(fā)送響應(yīng)無沖突數(shù)據(jù)與傳輸數(shù)據(jù)一起發(fā)送沖突列表對(duì)于硬件是有問題的。如果在傳輸鏈中間的請(qǐng)求知道它們處于中間并被允許在接收傳輸數(shù)據(jù)之后(以IACK/SACK)響應(yīng)所緩沖的請(qǐng)求,則有可能避免這個(gè)沖突列表。這允許其它所有沖突節(jié)點(diǎn)取得進(jìn)一步進(jìn)展,從而讓其余READ到達(dá)歸屬節(jié)點(diǎn)。
通過這個(gè)選項(xiàng),請(qǐng)求(PRL和PRIL,即讀取請(qǐng)求)經(jīng)過四個(gè)階段1)發(fā)送階段-發(fā)送請(qǐng)求2)收集階段-收集響應(yīng)(隨后再發(fā)送READ或CNCL)3)數(shù)據(jù)階段-等待數(shù)據(jù)4)保持階段-在沖突鏈中間,保持?jǐn)?shù)據(jù),直到XFR,對(duì)緩沖和入局請(qǐng)求發(fā)送IACK/SACK在這個(gè)實(shí)施例中,如果在所傳輸DATA上沒有搭載ACK,則請(qǐng)求將知道它處于鏈的中間。只有這個(gè)保持階段不同于基本協(xié)議。實(shí)際上,基本協(xié)議的數(shù)據(jù)階段或者保持相同(對(duì)于無沖突請(qǐng)求或者在時(shí)期/沖突鏈結(jié)束時(shí)的請(qǐng)求),或者分為兩個(gè)階段,第一個(gè)仍然是數(shù)據(jù)階段,第二個(gè)這時(shí)是當(dāng)接收到XFR時(shí)保持階段結(jié)束。
對(duì)基本協(xié)議的改變由對(duì)等節(jié)點(diǎn)進(jìn)行的請(qǐng)求接收對(duì)算法的唯一改變是檢查在其保持階段是否存在活動(dòng)請(qǐng)求If地址被轉(zhuǎn)發(fā)[同上]Else if地址不是活動(dòng)的[同上]Else if地址是活動(dòng)的
If活動(dòng)請(qǐng)求為PWL[同上]If入局請(qǐng)求處于活動(dòng)請(qǐng)求的沖突列表中[同上]Else if活動(dòng)請(qǐng)求處于“保持階段”If入局請(qǐng)求為PRL以SACK(或者在前一個(gè)PRIL得到IACK時(shí)以IACK)進(jìn)行響應(yīng)Else--入局請(qǐng)求為PRIL把活動(dòng)請(qǐng)求標(biāo)記為需要被無效以IACK響應(yīng)Else if活動(dòng)請(qǐng)求處于“數(shù)據(jù)階段”[同上]Else[同上]收集響應(yīng)對(duì)此算法的唯一改變?cè)谟?,?qǐng)求在它發(fā)送CNCL以及其沖突列表為空時(shí)完成。換言之,系統(tǒng)進(jìn)行了高速緩存到高速緩存?zhèn)鬏?,并且沒有沖突;唯一要做的是通知?dú)w屬節(jié)點(diǎn),這不需要被ACK。
注意正進(jìn)行CNCL請(qǐng)求(具有沖突)保持在數(shù)據(jù)階段,等待XFR,即,它不進(jìn)入保持階段。
在歸屬節(jié)點(diǎn)取消調(diào)用歸屬節(jié)點(diǎn)接收到CNCL(包含轉(zhuǎn)發(fā)節(jié)點(diǎn)和沖突列表)算法取消未完成的讀取(如果有的話)把請(qǐng)求節(jié)點(diǎn)標(biāo)記為這個(gè)地址的“當(dāng)前擁有者”向轉(zhuǎn)發(fā)節(jié)點(diǎn)發(fā)送DACKIf沒有沖突
--無沖突高速緩存時(shí)期完成Else結(jié)合沖突列表作為這個(gè)地址的“未完成請(qǐng)求”--等待對(duì)XFR數(shù)據(jù)的READ在歸屬節(jié)點(diǎn)的讀取請(qǐng)求調(diào)用歸屬節(jié)點(diǎn)接收到READ(包含沖突列表)算法If沒有當(dāng)前擁有者If數(shù)據(jù)不可用必要時(shí)發(fā)起讀取等待完成讀取向請(qǐng)求節(jié)點(diǎn)發(fā)送DATA_EIf沖突列表為空--無沖突未高速緩存時(shí)期完成Else結(jié)合沖突列表作為這個(gè)地址的“未完成節(jié)點(diǎn)”--等待對(duì)XFR數(shù)據(jù)的讀取Else把未完成沖突添加到這個(gè)地址的“未完成節(jié)點(diǎn)”從“未完成結(jié)點(diǎn)”刪除請(qǐng)求節(jié)點(diǎn)If沒有(剩余)未完成節(jié)點(diǎn)向“當(dāng)前擁有者”發(fā)送XFR+ACK(目標(biāo)請(qǐng)求節(jié)點(diǎn))--時(shí)期完成ElseIf一個(gè)或多個(gè)未完成節(jié)點(diǎn)(包括請(qǐng)求方)為PRIL向“當(dāng)前擁有者”發(fā)送XFRI(目標(biāo)請(qǐng)求節(jié)點(diǎn))Else
向“當(dāng)前擁有者”發(fā)送XFR(目標(biāo)請(qǐng)求節(jié)點(diǎn))把請(qǐng)求節(jié)點(diǎn)標(biāo)記為“當(dāng)前擁有者”傳輸接收這里的改變(除了處理XFR+ACK之外)是確定在保持階段中對(duì)于PRIL是否欺騙IACK響應(yīng)。如果是,則采用窺探使行無效。
調(diào)用請(qǐng)求方接收到XFR、XFR+ACK或XFRI(包含目標(biāo)節(jié)點(diǎn))算法在仍未接收到時(shí)等待數(shù)據(jù)If所接收XFRI或請(qǐng)求被標(biāo)記為需要被無效向高速緩存發(fā)送PRIL窺探Else向高速緩存發(fā)送PRL窺探--End IfIf接收到XFR+ACK把DATA+ACK包發(fā)送到目標(biāo)節(jié)點(diǎn)Else把DATA包發(fā)送到目標(biāo)節(jié)點(diǎn)傳輸數(shù)據(jù)接收調(diào)用請(qǐng)求方作為XFR的結(jié)果接收到DATA或DATA+ACK(請(qǐng)求方處于數(shù)據(jù)階段,因此它知道這是經(jīng)由XFR的)算法向處理器發(fā)送數(shù)據(jù)If接收到DATA包把請(qǐng)求移動(dòng)到保持階段For各個(gè)所緩沖的請(qǐng)求If所緩沖的請(qǐng)求為PRL
以SACK(或者在前一個(gè)PRIL得到IACK時(shí)以IACK)進(jìn)行響應(yīng)Else--所緩沖的請(qǐng)求為PRIL把本地請(qǐng)求標(biāo)記為需要被無效以IACK響應(yīng)Else--接收到DATA+ACK--請(qǐng)求完成,以及時(shí)期完成PRL DATA E/M響應(yīng)當(dāng)PRL窺探命中高速緩存行時(shí),它必須以DATA_F進(jìn)行響應(yīng),以便保持正確性,而與高速緩存是否把行轉(zhuǎn)變到S或I無關(guān)。有可能在轉(zhuǎn)變到I時(shí)支持發(fā)送DATA_E,但它要求與高速緩存的附加通信,以便讓它知道它所接收的E狀態(tài)需要降級(jí)到F。算法基本上在于,如果節(jié)點(diǎn)已經(jīng)接收到DATA_E然后再接收SACK,則它必須把高速緩存狀態(tài)從E改變到F。
權(quán)利要求
1.一種方法,包括從第一對(duì)等節(jié)點(diǎn)向多節(jié)點(diǎn)系統(tǒng)中的多個(gè)節(jié)點(diǎn)發(fā)送對(duì)數(shù)據(jù)塊副本的請(qǐng)求;通過所述第一對(duì)等節(jié)點(diǎn)從第二對(duì)等節(jié)點(diǎn)接收對(duì)數(shù)據(jù)塊副本的請(qǐng)求;確定所接收的請(qǐng)求是否與所發(fā)送的請(qǐng)求有沖突;以及如果所接收的請(qǐng)求與所發(fā)送的請(qǐng)求有沖突,則向歸屬節(jié)點(diǎn)發(fā)送關(guān)于所述數(shù)據(jù)塊的消息,指明存在沖突。
2.如權(quán)利要求1所述的方法,其特征在于,確定所接收的請(qǐng)求是否與所發(fā)送的請(qǐng)求有沖突包括確定所接收的請(qǐng)求和所發(fā)送的請(qǐng)求是否請(qǐng)求相同的數(shù)據(jù)。
3.如權(quán)利要求1所述的方法,其特征在于還包括如果所接收的請(qǐng)求與所發(fā)送的請(qǐng)求有沖突,則向第三對(duì)等節(jié)點(diǎn)發(fā)送關(guān)于所述數(shù)據(jù)塊的消息,指明存在沖突。
4.如權(quán)利要求1所述的方法,其特征在于,送到所述歸屬節(jié)點(diǎn)的所述消息使所述歸屬節(jié)點(diǎn)向第三對(duì)等節(jié)點(diǎn)發(fā)送消息,使所述第三對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所請(qǐng)求的數(shù)據(jù)。
5.如權(quán)利要求1所述的方法,其特征在于,所述第一對(duì)等節(jié)點(diǎn)經(jīng)由代表多個(gè)對(duì)等節(jié)點(diǎn)的對(duì)等代理與所述第二對(duì)等節(jié)點(diǎn)通信。
6.如權(quán)利要求1所述的方法,其特征在于,所述第一對(duì)等節(jié)點(diǎn)經(jīng)由代表多個(gè)節(jié)點(diǎn)的歸屬代理與所述歸屬節(jié)點(diǎn)通信。
7.一種裝置,包括要與具有多個(gè)對(duì)等實(shí)體和歸屬實(shí)體的系統(tǒng)中的多個(gè)系統(tǒng)實(shí)體耦合的接口;以及控制電路,與所述接口耦合,以便向一個(gè)或多個(gè)所述對(duì)等實(shí)體發(fā)送對(duì)數(shù)據(jù)塊副本的請(qǐng)求,所述控制電路檢測(cè)從其它對(duì)等實(shí)體接收的沖突請(qǐng)求消息,其中響應(yīng)沖突請(qǐng)求消息,所述控制電路向?qū)?yīng)于所述數(shù)據(jù)塊的歸屬節(jié)點(diǎn)發(fā)送指明沖突的消息。
8.如權(quán)利要求7所述的裝置,其特征在于,所述對(duì)等實(shí)體包括一個(gè)或多個(gè)對(duì)等節(jié)點(diǎn)以及代表多個(gè)對(duì)等節(jié)點(diǎn)的一個(gè)或多個(gè)對(duì)等代理。
9.如權(quán)利要求7所述的裝置,其特征在于,所述歸屬實(shí)體包括歸屬節(jié)點(diǎn)。
10.如權(quán)利要求7所述的裝置,其特征在于,所述歸屬實(shí)體包括代表多個(gè)節(jié)點(diǎn)的歸屬代理。
11.如權(quán)利要求7所述的裝置,其特征在于還包括與所述接口耦合的處理器。
12.如權(quán)利要求11所述的裝置,其特征在于,所述控制電路包含在所述處理器中。
13.如權(quán)利要求7所述的裝置,其特征在于,如果所述請(qǐng)求與所述控制電路進(jìn)行的請(qǐng)求沒有沖突,則所述控制電路向請(qǐng)求對(duì)等節(jié)點(diǎn)提供所請(qǐng)求數(shù)據(jù)的副本。
14.一種方法,包括通過第一對(duì)等節(jié)點(diǎn)向至少一個(gè)對(duì)等節(jié)點(diǎn)以及對(duì)應(yīng)于所請(qǐng)求數(shù)據(jù)塊的歸屬節(jié)點(diǎn)發(fā)送第一請(qǐng)求消息以請(qǐng)求數(shù)據(jù)塊的副本;通過第二對(duì)等節(jié)點(diǎn)向至少所述第一對(duì)等節(jié)點(diǎn)和所述歸屬節(jié)點(diǎn)以及向第三對(duì)等節(jié)點(diǎn)發(fā)送第二請(qǐng)求消息以請(qǐng)求所述數(shù)據(jù)塊的副本;從所述第三對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本;從所述第一對(duì)等節(jié)點(diǎn)向所述歸屬節(jié)點(diǎn)發(fā)送指明接收到來自所述第三對(duì)等節(jié)點(diǎn)的所述數(shù)據(jù)塊的消息;從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本;以及從所述第二對(duì)等節(jié)點(diǎn)向所述歸屬節(jié)點(diǎn)發(fā)送指明接收到來自所述第二對(duì)等節(jié)點(diǎn)的所述數(shù)據(jù)塊的消息。
15.如權(quán)利要求14所述的方法,其特征在于,所述數(shù)據(jù)塊包括高速緩存行。
16.如權(quán)利要求14所述的方法,其特征在于,所述第一請(qǐng)求消息被發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
17.如權(quán)利要求14所述的方法,其特征在于,所述第二請(qǐng)求消息發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
18.如權(quán)利要求14所述的方法,其特征在于,從所述第三對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本包括改變所述第三對(duì)等節(jié)點(diǎn)所保留的任何所述數(shù)據(jù)塊的狀態(tài)。
19.如權(quán)利要求14所述的方法,其特征在于,從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本包括改變所述第一對(duì)等節(jié)點(diǎn)所保留的任何所述數(shù)據(jù)塊的狀態(tài)。
20.一種方法,包括從第一對(duì)等節(jié)點(diǎn)向至少第二對(duì)等節(jié)點(diǎn)、第三對(duì)等節(jié)點(diǎn)以及對(duì)應(yīng)于數(shù)據(jù)塊的歸屬節(jié)點(diǎn)發(fā)送第一請(qǐng)求消息以請(qǐng)求所述數(shù)據(jù)塊的副本;從所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)、所述第三對(duì)等節(jié)點(diǎn)以及所述歸屬節(jié)點(diǎn)發(fā)送對(duì)于所述數(shù)據(jù)塊副本的第二請(qǐng)求,其中所述第二請(qǐng)求消息在所述第二節(jié)點(diǎn)接收所述第一請(qǐng)求消息之前被發(fā)送;從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送指明所述第一請(qǐng)求消息與所述第二請(qǐng)求消息之間沖突的消息;從所述第三對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本;從所述第一節(jié)點(diǎn)向所述歸屬節(jié)點(diǎn)發(fā)送指明所述第一請(qǐng)求消息與所述第二請(qǐng)求消息之間沖突的消息;以及從所述歸屬節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送消息,使所述第一對(duì)等節(jié)點(diǎn)向所述第二節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本。
21.如權(quán)利要求20所述的方法,其特征在于還包括從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本。
22.如權(quán)利要求21所述的方法,其特征在于還包括從所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送指明所述第二請(qǐng)求消息與所述第一請(qǐng)求消息之間沖突的消息。
23.如權(quán)利要求21所述的方法,其特征在于,從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊副本包括改變所述第一對(duì)等節(jié)點(diǎn)所保留的任何所述數(shù)據(jù)塊的狀態(tài)。
24.如權(quán)利要求20所述的方法,其特征在于,所述數(shù)據(jù)塊包括高速緩存行。
25.如權(quán)利要求20所述的方法,其特征在于,所述第一請(qǐng)求消息發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
26.如權(quán)利要求20所述的方法,其特征在于,所述第二請(qǐng)求消息發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
27.一種方法,包括從第一對(duì)等節(jié)點(diǎn)向第二對(duì)等節(jié)點(diǎn)、第三對(duì)等節(jié)點(diǎn)以及對(duì)應(yīng)于數(shù)據(jù)塊的歸屬節(jié)點(diǎn)發(fā)送第一請(qǐng)求消息以請(qǐng)求所述數(shù)據(jù)塊的副本,其中發(fā)往所述第三對(duì)等節(jié)點(diǎn)的所述消息被延遲;從所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)、第三對(duì)等節(jié)點(diǎn)以及所述歸屬節(jié)點(diǎn)發(fā)送第二請(qǐng)求消息以請(qǐng)求所述數(shù)據(jù)塊的副本,其中,在所述第三對(duì)等節(jié)點(diǎn)接收到所述延遲的第一消息之前,所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述第二請(qǐng)求消息;從所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送指明所述第一消息與所述第二消息之間沖突的消息;從所述第三對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本;從所述第二對(duì)等節(jié)點(diǎn)向所述歸屬節(jié)點(diǎn)發(fā)送指明所述第一請(qǐng)求消息與所述第二請(qǐng)求消息之間沖突的消息;以及從所述歸屬節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送消息,使所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本。
28.如權(quán)利要求27所述的方法,其特征在于還包括從所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本。
29.如權(quán)利要求27所述的方法,其特征在于,所述數(shù)據(jù)塊包括高速緩存行。
30.如權(quán)利要求27所述的方法,其特征在于,所述第一節(jié)點(diǎn)把所述第一請(qǐng)求消息發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
31.如權(quán)利要求27所述的方法,其特征在于,所述第二節(jié)點(diǎn)把所述第二請(qǐng)求消息發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
32.如權(quán)利要求27所述的方法,其特征在于,從所述第三對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊副本包括改變所述第一對(duì)等節(jié)點(diǎn)所保留的任何所述數(shù)據(jù)塊的狀態(tài)。
33.一種方法,包括從第一對(duì)等節(jié)點(diǎn)向第二對(duì)等節(jié)點(diǎn)以及向歸屬節(jié)點(diǎn)發(fā)送第一消息以請(qǐng)求數(shù)據(jù)塊副本;從第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)以及向所述歸屬節(jié)點(diǎn)發(fā)送對(duì)于所述數(shù)據(jù)塊副本的第二請(qǐng)求;從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送指明所述第一消息與所述第二消息之間沖突的消息;從所述第二節(jié)點(diǎn)向所述第一節(jié)點(diǎn)發(fā)送指明所述第二節(jié)點(diǎn)沒有所述數(shù)據(jù)塊的有效副本的消息;從所述歸屬節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本;以及從所述歸屬節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送消息,使所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本。
34.如權(quán)利要求33所述的方法,其特征在于還包括從所述第二對(duì)等節(jié)點(diǎn)向所述第一對(duì)等節(jié)點(diǎn)發(fā)送指明所述第二消息與所述第一消息之間沖突的消息。
35.如權(quán)利要求33所述的方法,其特征在于還包括從所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送指明所述第一對(duì)等節(jié)點(diǎn)沒有所述數(shù)據(jù)塊的有效副本的消息。
36.如權(quán)利要求35所述的方法,其特征在于還包括從所述第二對(duì)等節(jié)點(diǎn)向所述歸屬節(jié)點(diǎn)發(fā)送指明所述第一請(qǐng)求與所述第二請(qǐng)求之間沖突的消息。
37.如權(quán)利要求33所述的方法,其特征在于,所述數(shù)據(jù)塊包括高速緩存行。
38.如權(quán)利要求33所述的方法,其特征在于,所述歸屬節(jié)點(diǎn)以單個(gè)消息來發(fā)送所述數(shù)據(jù)塊的副本以及所述消息,使所述第一對(duì)等節(jié)點(diǎn)向所述第二對(duì)等節(jié)點(diǎn)發(fā)送所述數(shù)據(jù)塊的副本。
39.如權(quán)利要求33所述的方法,其特征在于,所述第一消息被發(fā)送給代表多個(gè)節(jié)點(diǎn)的代理。
40.如權(quán)利要求39所述的方法,其特征在于,所述第二消息被發(fā)送給代表多個(gè)節(jié)點(diǎn)的所述代理。
全文摘要
沖突解決技術(shù)提供一致性,使得如果每個(gè)節(jié)點(diǎn)在該節(jié)點(diǎn)已發(fā)出其自身請(qǐng)求之后監(jiān)測(cè)所有請(qǐng)求,則所有沖突可被沖突請(qǐng)求方中至少一個(gè)檢測(cè)到。如果行處于“獨(dú)占”、“已修改”或“轉(zhuǎn)發(fā)”狀態(tài),則沖突在保存唯一副本的節(jié)點(diǎn)上解決。沖突解決的勝方以及可能還有敗方向歸屬節(jié)點(diǎn)報(bào)告沖突,其中歸屬節(jié)點(diǎn)使沖突報(bào)告成對(duì),并發(fā)出轉(zhuǎn)發(fā)指令以確保所有請(qǐng)求節(jié)點(diǎn)最終接收到所請(qǐng)求數(shù)據(jù)。如果被請(qǐng)求高速緩存行是未高速緩存的或者僅存在于“共享”狀態(tài)中,則歸屬節(jié)點(diǎn)提供高速緩存節(jié)點(diǎn)的副本并解決沖突。在一個(gè)實(shí)施例中,在接收到確認(rèn)消息之前的所有響應(yīng)之后的封鎖期間允許所有沖突節(jié)點(diǎn)認(rèn)識(shí)到它們涉及的沖突。
文檔編號(hào)G06F15/16GK1849592SQ200380106550
公開日2006年10月18日 申請(qǐng)日期2003年11月26日 優(yōu)先權(quán)日2002年12月19日
發(fā)明者H·胡姆, J·古德曼, R·比爾斯, G·拉尼斯 申請(qǐng)人:英特爾公司