專利名稱:容忍多處理器數(shù)據(jù)處理系統(tǒng)中不可恢復(fù)差錯(cuò)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)領(lǐng)域,更具體地,是涉及一個(gè)容忍多處理器系統(tǒng)中數(shù)據(jù)差錯(cuò)的數(shù)據(jù)結(jié)構(gòu)和方法。
多處理計(jì)算機(jī)系統(tǒng)通常包含兩個(gè)或更多的可以被用來完成計(jì)算任務(wù)的處理器??梢栽谝粋€(gè)處理器上完成一個(gè)具體的計(jì)算任務(wù),其它的處理器同時(shí)完成無關(guān)的處理任務(wù)。可選地,一個(gè)具體任務(wù)的各組成部分可以被分布在多個(gè)處理器上以便減少完成計(jì)算任務(wù)所需的時(shí)間。概括地講,處理器是一種被用來對一或多個(gè)操作數(shù)進(jìn)行操作以產(chǎn)生一個(gè)結(jié)果的設(shè)備。根據(jù)處理器執(zhí)行的一個(gè)指令來完成操作。
具有單個(gè)基地址和相關(guān)(coherent)高速緩存的多處理器系統(tǒng)提供了一種靈活并且強(qiáng)有力的計(jì)算環(huán)境。單個(gè)基地址和相關(guān)高速緩存共同緩解了數(shù)據(jù)分區(qū)和動態(tài)負(fù)載平衡的問題。單個(gè)基地址和相關(guān)高速緩存還為并行編譯器,標(biāo)準(zhǔn)操作系統(tǒng)和多程序提供了較好的支持,從而允許更靈活和有效地利用機(jī)器。
多處理計(jì)算機(jī)系統(tǒng)的一種結(jié)構(gòu)是分布存儲器體系結(jié)構(gòu)。分布存儲器體系結(jié)構(gòu)通常包含多個(gè)結(jié)點(diǎn),其中每個(gè)結(jié)點(diǎn)均具有一或多個(gè)處理器和一個(gè)存儲器。各結(jié)點(diǎn)被連接到一個(gè)網(wǎng)絡(luò)以允許在結(jié)點(diǎn)之間進(jìn)行通信。當(dāng)被當(dāng)成一個(gè)整體時(shí),所有結(jié)點(diǎn)的存儲器組合構(gòu)成一個(gè)可以被各個(gè)結(jié)點(diǎn)訪問的“共享存儲器”。通常,用目錄來標(biāo)識哪些結(jié)點(diǎn)具有對應(yīng)于一個(gè)具體地址的數(shù)據(jù)的副本。通過檢查目錄并確定數(shù)據(jù)狀態(tài)來維護(hù)數(shù)據(jù)的相關(guān)性。
上述示意性的并且已經(jīng)出現(xiàn)的基于目錄的高速緩存相關(guān)體系結(jié)構(gòu)包含高速緩存相關(guān)非統(tǒng)一存儲器訪問(CC-NUMA)和唯高速緩存存儲器體系結(jié)構(gòu)(COMA)。CC-NUMA和COMA體系結(jié)構(gòu)均具有一個(gè)分布存儲器,一個(gè)可伸縮互連網(wǎng)絡(luò),和基于目錄的高速緩存相關(guān)。分布存儲器和可伸縮互連網(wǎng)絡(luò)提供所需的可伸縮存儲器帶寬,而基于目錄的方案提供了高速緩存相關(guān)。與CC-NUMA體系結(jié)構(gòu)相反,COMA體系結(jié)構(gòu)把一個(gè)每結(jié)點(diǎn)(per-node)主存儲器轉(zhuǎn)換成一個(gè)也被稱作吸引(attraction)存儲器(AM)的大的第二或第三高速緩存。通過在主存儲器數(shù)據(jù)的高速緩存線大小分區(qū)中加入標(biāo)簽來進(jìn)行轉(zhuǎn)換。結(jié)果,系統(tǒng)中數(shù)據(jù)項(xiàng)的位置與數(shù)據(jù)項(xiàng)的物理地址隔離開來,并且根據(jù)一個(gè)存儲器索引模式在主存儲器中自動遷移或復(fù)制數(shù)據(jù)項(xiàng)。
不幸的是,在COMA和NUMA體系結(jié)構(gòu)中,數(shù)據(jù)可能會被破壞,從而導(dǎo)致存儲器中的差錯(cuò)。由于存儲器作為電子存儲設(shè)備會返回不同于最初存儲的內(nèi)容的信息,所以會發(fā)生這種差錯(cuò)。一般情況下,通常會在一個(gè)存儲器系統(tǒng)中發(fā)生兩種差錯(cuò)可重復(fù)(硬)差錯(cuò)和瞬時(shí)(軟)差錯(cuò)。一個(gè)硬差錯(cuò)通常是一個(gè)硬件故障的結(jié)果,并且由于是始終如一并且可重復(fù)的,所以易于診斷和糾正。當(dāng)一個(gè)位僅一次讀出錯(cuò)誤數(shù)值并且后續(xù)操作均正確時(shí),就發(fā)生了一次軟差錯(cuò)。
對存儲器差錯(cuò)的唯一防護(hù)是使用存儲器檢錯(cuò)或糾錯(cuò)協(xié)議。某些協(xié)議可以只檢測一個(gè)八位數(shù)據(jù)字節(jié)的一個(gè)位中的差錯(cuò),其它協(xié)議可以自動檢測多于一個(gè)位中的差錯(cuò)。別的協(xié)議可以檢測并糾正單位和/或多位存儲器問題。
一般的差錯(cuò)檢測/糾正機(jī)制包含奇偶校驗(yàn),糾錯(cuò)碼(ECC),等等。本領(lǐng)域中眾所周知的是使用奇偶校驗(yàn)和糾錯(cuò)碼(ECC)確認(rèn)在一個(gè)中央處理單元(CPU)和一個(gè)存儲器,編程輸入/輸出(PIO)設(shè)備或其它設(shè)備之間傳送的數(shù)據(jù)的可靠性。并且,ECC被用來恢復(fù)存儲器中的某些數(shù)據(jù)差錯(cuò)。
當(dāng)允許奇偶校驗(yàn)檢查時(shí),每當(dāng)一個(gè)字節(jié)被寫到存儲器中時(shí),一個(gè)被稱作奇偶校驗(yàn)生成器/檢查器的邏輯電路檢查該字節(jié)并且確定數(shù)據(jù)字節(jié)具有偶數(shù)或奇數(shù)個(gè)一。如果有偶數(shù)個(gè)一,則第九(奇偶校驗(yàn))位被設(shè)成一,否則被設(shè)成零。這樣,無論在最初的八個(gè)數(shù)據(jù)位被有多少個(gè)位被設(shè)成一,九個(gè)位加起來總有奇數(shù)個(gè)一。這種機(jī)制被稱作奇校驗(yàn)。當(dāng)從存儲器讀出數(shù)據(jù)時(shí),奇偶校驗(yàn)電路充當(dāng)一個(gè)差錯(cuò)檢查器。該電路讀出所有九個(gè)位并且再次確定有偶數(shù)還是奇數(shù)個(gè)一。如果有偶數(shù)個(gè)一,則這些位中的一個(gè)很可能有差錯(cuò)。當(dāng)檢測到一個(gè)奇偶差錯(cuò)時(shí),奇偶校驗(yàn)電路產(chǎn)生一個(gè)中斷,該中斷指示處理器暫停運(yùn)行以保證不正確的存儲器不會破壞正在執(zhí)行或可執(zhí)行的進(jìn)程。
奇偶校驗(yàn)檢查提供了單位差錯(cuò)檢測,但不校正存儲器差錯(cuò)。并且,奇偶校驗(yàn)檢查僅僅確定一個(gè)差錯(cuò)的存在,并不能校正差錯(cuò)。ECC不僅檢測單位和多位差錯(cuò),而且可以校正單位或多位差錯(cuò)。ECC使用一個(gè)特殊的算法對一個(gè)位塊中的信息進(jìn)行編碼,這個(gè)編碼包含足夠的細(xì)節(jié)從而允許恢復(fù)受保護(hù)數(shù)據(jù)中的一個(gè)單位或多位差錯(cuò)。是校正單位差錯(cuò)還是校正多位差錯(cuò)取決于所使用的ECC算法。當(dāng)ECC檢測到一個(gè)不可校正的差錯(cuò)時(shí),便產(chǎn)生一個(gè)中斷,該中斷指示系統(tǒng)關(guān)機(jī)以避免數(shù)據(jù)被破壞。
常規(guī)差錯(cuò)檢測/校正機(jī)制的一個(gè)問題是系統(tǒng)中斷頻率比期望的要高。根據(jù)故障性質(zhì)和系統(tǒng)的軟件性能,中斷可以導(dǎo)致系統(tǒng)或處理器復(fù)位。由于導(dǎo)致系統(tǒng)停機(jī),丟失數(shù)據(jù)和損失效率,中斷是不期望的。
因而需要一種能夠檢測差錯(cuò)并且使系統(tǒng)中斷最少的結(jié)構(gòu)和技術(shù)。系統(tǒng)應(yīng)當(dāng)能夠檢測單位或多位差錯(cuò)并且即使如此仍然能夠避免系統(tǒng)中斷。
概括地講,本發(fā)明提供了一個(gè)適于檢測數(shù)據(jù)差錯(cuò)并且在檢測到差錯(cuò)時(shí)能夠確定系統(tǒng)內(nèi)是否有數(shù)據(jù)的一個(gè)有效副本可用的方法和系統(tǒng)。
在本發(fā)明的一個(gè)方面,提供了一個(gè)在基于目錄的數(shù)據(jù)處理系統(tǒng)中傳數(shù)據(jù)的方法。該方法包括的步驟有通過請求方設(shè)備訪問與該請求方設(shè)備相關(guān)的一個(gè)本地存儲器中包含的數(shù)據(jù);確定數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài);在存在一個(gè)差錯(cuò)狀態(tài)的情況下,從一個(gè)遠(yuǎn)端存儲器請求該數(shù)據(jù)。在一個(gè)實(shí)施例中,從一個(gè)遠(yuǎn)端存儲器請求數(shù)據(jù)包括首先訪問一個(gè)目錄以確定數(shù)據(jù)的狀態(tài)。如果狀態(tài)指示遠(yuǎn)端存儲器中的數(shù)據(jù)可用,則在一個(gè)連接請求方設(shè)備和遠(yuǎn)端存儲器的互連上放置一個(gè)請求。
在本發(fā)明的另一方面,一個(gè)數(shù)據(jù)處理系統(tǒng)包含一個(gè)第一結(jié)點(diǎn),一個(gè)第二結(jié)點(diǎn)和一個(gè)連接第一結(jié)點(diǎn)和第二結(jié)點(diǎn)的互連,其中第一結(jié)點(diǎn)具有一個(gè)第一處理器,一個(gè)第一存儲器和一個(gè)目錄,第二結(jié)點(diǎn)具有一個(gè)第二處理器和一個(gè)第二存儲器。數(shù)據(jù)處理系統(tǒng)適于執(zhí)行一個(gè)包括以下操作的過程由第一處理器訪問第一存儲器中包含的數(shù)據(jù);確定數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài);在存在一個(gè)差錯(cuò)狀態(tài)的情況下,從第二存儲器請求數(shù)據(jù)。
在本發(fā)明的另一個(gè)方面,提供一個(gè)基于目錄的數(shù)據(jù)處理系統(tǒng),該系統(tǒng)具有一個(gè)分布共享存儲器。數(shù)據(jù)處理系統(tǒng)包括一個(gè)第一結(jié)點(diǎn),該結(jié)點(diǎn)至少包含一個(gè)第一處理器,一個(gè)第一存儲器,一個(gè)第一存儲器控制器和一個(gè)包含第一存儲器的一或多個(gè)存儲器模塊的狀態(tài)數(shù)據(jù)的第一目錄;一個(gè)第二結(jié)點(diǎn),該結(jié)點(diǎn)至少包含一個(gè)第二處理器,一個(gè)第二存儲器,一個(gè)第二存儲器控制器和一個(gè)包含第二存儲器的一或多個(gè)存儲器模塊的狀態(tài)數(shù)據(jù)的第二目錄;和一個(gè)連接第一結(jié)點(diǎn)和第二結(jié)點(diǎn)的互連。第一存儲器控制器被用來訪問第一存儲器中包含的數(shù)據(jù)并且確定數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài),如果存在一個(gè)差錯(cuò)狀態(tài),則在互連上放置一個(gè)數(shù)據(jù)請求。
本領(lǐng)域的技術(shù)人員通過下面的詳細(xì)描述和附圖會理解本發(fā)明的這些和其它特性和目標(biāo)。
圖1是一個(gè)本發(fā)明可以在其中找到應(yīng)用的多處理器系統(tǒng)的模塊圖。
圖2是圖1的一個(gè)結(jié)點(diǎn)的詳細(xì)模塊圖。
圖3是本發(fā)明的方法的一個(gè)簡化邏輯流程圖。
圖4是示出圖3的方法的其它細(xì)節(jié)的邏輯流程圖。
圖5是另一個(gè)示出圖4的一個(gè)可選邏輯流程的邏輯流程圖。
概括地講,本發(fā)明提供了一個(gè)方法和系統(tǒng),該方法和系統(tǒng)適于在多處理系統(tǒng)中檢查數(shù)據(jù)差錯(cuò)并且在檢測到一個(gè)差錯(cuò)的情況下確定系統(tǒng)中是否有一個(gè)可用的有效數(shù)據(jù)副本。如果有一個(gè)數(shù)據(jù)的有效副本,則在不需要產(chǎn)生一個(gè)中斷的情況下數(shù)據(jù)被提供給請求數(shù)據(jù)的設(shè)備(例如處理器和/或存儲器控制器)。通過只在沒有請求的存儲器模塊的遠(yuǎn)端副本的情況下才產(chǎn)生一個(gè)系統(tǒng)中斷,本發(fā)明較好地提高了系統(tǒng)可用性。
在一個(gè)實(shí)施例中,一個(gè)請求方設(shè)備(例如一個(gè)存儲器控制器)提交一個(gè)存儲器讀請求,表明期望得到一個(gè)指定存儲器位置上存儲的數(shù)據(jù)。存儲器控制器確定在一個(gè)相關(guān)存儲器中是否駐留被請求的存儲器模塊的一個(gè)有效副本。相關(guān)存儲器可以是高速緩存存儲器或非高速緩存存儲器(例如主存儲器)。如果存儲器模塊駐留并且有效,則存儲器控制器相應(yīng)向請求方處理器提供被請求數(shù)據(jù)模塊的一個(gè)副本。否則請求存儲器模塊的一個(gè)遠(yuǎn)端副本。
一個(gè)請求方存儲器控制器可以接收一個(gè)存儲器模塊并且執(zhí)行所有必需的差錯(cuò)檢測和校正指令。當(dāng)在接收的存儲器模塊內(nèi)出現(xiàn)不可恢復(fù)差錯(cuò)時(shí),請求方存儲器控制器請求存儲器模塊的一個(gè)遠(yuǎn)端副本。在一個(gè)實(shí)施例中,相關(guān)的請求方處理器則在確定是否存在一個(gè)不可恢復(fù)差錯(cuò)狀態(tài)之前開始處理遠(yuǎn)端存儲器模塊。
盡管這里參照了諸如NUMA和COMA的具體系統(tǒng)體系結(jié)構(gòu),但本發(fā)明并不僅限于一個(gè)具體的體系結(jié)構(gòu)。對具體體系結(jié)構(gòu)的參考只是示例性的。通常,本發(fā)明可以應(yīng)用于任何基于目錄的多處理器系統(tǒng)。
圖1是可以應(yīng)用本發(fā)明的諸如NUMA系統(tǒng)的一個(gè)通用多處理器系統(tǒng)10的簡要模塊圖。一個(gè)系統(tǒng)互連12連接多個(gè)諸如Node0-Nodei的結(jié)點(diǎn)14,每個(gè)結(jié)點(diǎn)均包含至少一個(gè)諸如P0-Pi的處理器。每個(gè)處理器P0-Pi均有一個(gè)可以包含任意數(shù)量的高速緩存級別的高速緩存存儲器24與之關(guān)聯(lián)。系統(tǒng)10還包含一個(gè)I/O適配器18和各種I/O設(shè)備20??梢允褂酶鞣N本領(lǐng)域中已知和未知的高速緩存相關(guān)模式來保證數(shù)據(jù)的最近有效副本被任意的處理器P0-Pi所使用。
圖2還提供了與系統(tǒng)互連12相連的結(jié)點(diǎn)14的細(xì)節(jié)。一個(gè)網(wǎng)絡(luò)接口21提供把結(jié)點(diǎn)14連接到互連12所需的電路。結(jié)點(diǎn)14還包含至少一個(gè)與高速緩存24關(guān)聯(lián)的處理器22(對應(yīng)于圖1的一個(gè)處理器Pi),其中高速緩存24可以包含主或板上高速緩存和一或多個(gè)片外或低級高速緩存。本發(fā)明并不受限于特定的高速緩存體系結(jié)構(gòu)。結(jié)點(diǎn)14還包含一個(gè)可以象在NUMA系統(tǒng)中那樣被用作主存儲器或象在COMA系統(tǒng)中那樣被用作吸引存儲器的存儲器26。一個(gè)存儲器控制器28支持通信高速緩存相關(guān)功能以及對結(jié)點(diǎn)14的差錯(cuò)檢查。盡管在圖中分別示出,可以理解在其它實(shí)施例中存儲器控制器28和處理器22可以被認(rèn)為是一個(gè)集中處理單元,該單元被用來完成存儲器控制功能和數(shù)據(jù)處理。
如存儲器模塊30所示,存儲器26被排列成存儲器模塊。每個(gè)結(jié)點(diǎn)14均包含一個(gè)目錄29,對于每個(gè)與互連12相連的結(jié)點(diǎn)14,該目錄均包含存儲器26的存儲器模塊的入口(entry)。在使用NUMA類型的體系結(jié)構(gòu)的情況下,目錄29包含一個(gè)狀態(tài)字段32和一個(gè)數(shù)據(jù)字段34。數(shù)據(jù)字段34對應(yīng)于存儲器26內(nèi)的一個(gè)唯一地址模塊(例如存儲器模塊30)。狀態(tài)字段32包含關(guān)于數(shù)據(jù)字段34中的數(shù)據(jù)是否最新,數(shù)據(jù)是駐留在請求數(shù)據(jù)的特定結(jié)點(diǎn)14中(即,是一個(gè)本地副本)還是駐留在其它結(jié)點(diǎn)14中(即,是一個(gè)遠(yuǎn)端副本)的信息。正如這里所使用的,一個(gè)遠(yuǎn)端副本是指位于一個(gè)不同于請求數(shù)據(jù)的結(jié)點(diǎn)的結(jié)點(diǎn)14的存儲器中的數(shù)據(jù)。遠(yuǎn)端數(shù)據(jù)可以駐留在任何形式的,可以被請求數(shù)據(jù)的本地存儲器設(shè)備訪問的存儲器設(shè)備中。例如,遠(yuǎn)端數(shù)據(jù)可以駐留在另一個(gè)與互連12相連的結(jié)點(diǎn)14的一個(gè)處理器的高速緩存或主存儲器中。
在使用COMA類型的體系結(jié)構(gòu)的情況下,目錄29還包含一個(gè)地址字段。為體系結(jié)構(gòu)提供了地址字段35,其中在任意指定時(shí)間可以把許多數(shù)據(jù)片段映射到一個(gè)具體的存儲器模塊30上。結(jié)果,有必要維護(hù)目錄29中的一個(gè)地址字段35以便跟蹤數(shù)據(jù)的位置。
在一個(gè)實(shí)施例中,通過一種MESI協(xié)議可以確定一個(gè)高速緩存的“狀態(tài)”。MESI協(xié)議中的一個(gè)高速緩存數(shù)據(jù)塊具有四個(gè)狀態(tài)“M”(被修改),“E”(獨(dú)占),“S”(共享)或“I”(無效)中的一個(gè)狀態(tài)。在MESI協(xié)議下,每個(gè)高速緩存入口(例如一個(gè)32字節(jié)扇區(qū))具有兩個(gè)附加位,這兩個(gè)附加位從四個(gè)可能狀態(tài)中指示出入口的狀態(tài)。根據(jù)請求方處理器尋找的入口的狀態(tài)和訪問類型,狀態(tài)可以被改變,并且為請求方處理器的高速緩存中的入口設(shè)置一個(gè)具體的狀態(tài)。例如,當(dāng)一個(gè)扇區(qū)處于被修改狀態(tài)時(shí),被尋址的扇區(qū)只有在具有該被修改扇區(qū)的高速緩存中才是有效的,并且被修改的值未被回寫到系統(tǒng)存儲器中。當(dāng)一個(gè)扇區(qū)處于獨(dú)占狀態(tài)時(shí),該扇區(qū)只在被標(biāo)記的扇區(qū)中出現(xiàn),并且與系統(tǒng)存儲器是一致的。如果一個(gè)扇區(qū)處于共享狀態(tài),這個(gè)扇區(qū)在該高速緩存和在至少另一個(gè)高速緩存中是有效的,其中所有的共享扇區(qū)均與系統(tǒng)存儲器一致。最終,當(dāng)一個(gè)扇區(qū)處于無效狀態(tài)時(shí),這表明被尋址的扇區(qū)未駐留在高速緩存中。如果一個(gè)扇區(qū)處于被修改,共享,獨(dú)占或無效狀態(tài)中的任何一個(gè)狀態(tài),根據(jù)具體的總線處理事務(wù)該扇區(qū)可以在狀態(tài)之間切換。雖然一個(gè)處于獨(dú)占狀態(tài)的扇區(qū)可以切換到任何其它狀態(tài),但一個(gè)扇區(qū)只在首先處于無效狀態(tài)的情況下才可以變成獨(dú)占的。MESI協(xié)議是眾所周知的,但參考在這里被引用的共同轉(zhuǎn)讓的美國專利第5,946,709號可以有進(jìn)一步的理解。另外,本發(fā)明并不特定于一個(gè)具體的協(xié)議,MESI只是說明一個(gè)可以被利用的協(xié)議。
圖3是示出本發(fā)明使用的一個(gè)過程300的流程圖。在步驟302,過程300開始并且有關(guān)的處理器22提交一個(gè)存儲器請求(即一個(gè)讀或取數(shù))指令。在步驟306,存儲器控制器28訪問并檢查被用來跟蹤存儲器26中各個(gè)存儲器模塊30的狀態(tài)的目錄29。在步驟308,存儲器控制器確定所請求的數(shù)據(jù)在本地是否有效。即,確定本地?cái)?shù)據(jù)(即,與請求方處理器關(guān)聯(lián)的存儲器中包含的數(shù)據(jù))是否有效。“有效”意味著數(shù)據(jù)沒有被一個(gè)不同的結(jié)點(diǎn)14上的另一個(gè)處理器修改。如果所請求的數(shù)據(jù)有效并且本地可用,則方法前進(jìn)到訪問本地?cái)?shù)據(jù)的步驟312。
如果所請求的數(shù)據(jù)無效或本地不可用,則過程前進(jìn)到步驟310。在步驟310中,存儲器控制器28提交一個(gè)遠(yuǎn)端取數(shù)請求以得到數(shù)據(jù)的一個(gè)遠(yuǎn)端副本。在步驟314中,方法300查詢是否已經(jīng)接收到數(shù)據(jù)。過程300繼續(xù)通過步驟314直到已經(jīng)接收到遠(yuǎn)端數(shù)據(jù)。一旦在步驟314中接收到遠(yuǎn)端數(shù)據(jù),則方法300沿著邏輯線路328前進(jìn),該線路指示在步驟320中把數(shù)據(jù)發(fā)送到處理器22。在步驟324完成操作。
可選地,當(dāng)在步驟314中接收到數(shù)據(jù)之后,可以在步驟316中更新本地存儲器目錄(數(shù)據(jù)可以被寫到主存儲器或吸引存儲器中)。接著在步驟318中完成過程300。接著相同存儲器控制器/處理器對數(shù)據(jù)的后續(xù)請求可以在本地訪問數(shù)據(jù)(步驟312)。
在一個(gè)實(shí)施例中,當(dāng)在步驟320中把遠(yuǎn)端副本發(fā)送到處理器之后可以進(jìn)行差錯(cuò)檢查。這樣,如果在步驟314確定已經(jīng)接收到數(shù)據(jù),則在步驟320中把數(shù)據(jù)發(fā)送到處理器并且隨著處理器開始進(jìn)行處理,方法300繼續(xù)執(zhí)行。如果一個(gè)奇偶校驗(yàn)檢查器確定接收到的數(shù)據(jù)有一個(gè)奇偶校驗(yàn)錯(cuò),則可以執(zhí)行一個(gè)數(shù)據(jù)校正算法。如果接收數(shù)據(jù)中沒有差錯(cuò),則數(shù)據(jù)被傳遞到處理器中的執(zhí)行單元。相應(yīng)地,存儲器控制器提供的接收數(shù)據(jù)被確定為有效的并且直接把數(shù)據(jù)傳送到執(zhí)行單元而不需要如已知系統(tǒng)的存儲器控制器中所通常具有的與奇偶校驗(yàn)和ECC操作相關(guān)的等待時(shí)間。
如果在步驟312執(zhí)行一次本地存儲器訪問,則在步驟322進(jìn)行一次差錯(cuò)確定。如果沒有出現(xiàn)一個(gè)差錯(cuò)狀態(tài)(或者可以被諸如ECC的常規(guī)裝置校正),則在步驟312中把數(shù)據(jù)提供給處理器22,并且在步驟314完成操作。
如果本地?cái)?shù)據(jù)包含一個(gè)不能被常規(guī)方法校正的差錯(cuò)狀態(tài),則方法300前進(jìn)到步驟330并且查詢數(shù)據(jù)的一個(gè)遠(yuǎn)端副本是否可用。在一個(gè)使用MESI協(xié)議的實(shí)施例中,方法300會確定數(shù)據(jù)狀態(tài)是否共享狀態(tài)。如果在一個(gè)遠(yuǎn)端位置上數(shù)據(jù)可用,則方法300前進(jìn)到步驟310,在該步驟中提交一個(gè)取數(shù)請求以檢索數(shù)據(jù)的遠(yuǎn)端副本。如果數(shù)據(jù)沒有遠(yuǎn)端駐留(步驟330),則在步驟332產(chǎn)生一個(gè)機(jī)器檢查中斷并且在運(yùn)行診斷程序或類似程序的同時(shí)停止數(shù)據(jù)處理。這樣,本發(fā)明確定是否發(fā)生一個(gè)數(shù)據(jù)差錯(cuò),并且在有一個(gè)不可校正的數(shù)據(jù)差錯(cuò)時(shí)從其它地方得到數(shù)據(jù)的一個(gè)可用副本。
本發(fā)明也可以包含附加的,如下面參照圖4和5描述的數(shù)據(jù)差錯(cuò)識別功能。在圖3的模塊334內(nèi)可以分別執(zhí)行圖4和5的方法400和500。一旦接收到請求的數(shù)據(jù),模塊334沿著邏輯線路338從步驟314開始前進(jìn),并且當(dāng)在具有一個(gè)共享狀態(tài)的本地?cái)?shù)據(jù)中出現(xiàn)一個(gè)差錯(cuò)狀態(tài)時(shí)沿著邏輯線路336從步驟330開始前進(jìn)。在一個(gè)實(shí)施例中,方法300通過從邏輯線路328引出的步驟沿著邏輯線路336和338并行前進(jìn)。相應(yīng)地,如上所述,在確定一個(gè)差錯(cuò)之前可以處理通過步驟310提交的遠(yuǎn)端取數(shù)接收的數(shù)據(jù)。并且,在方法400,500中使用奇偶校驗(yàn)和ECC只是為了說明。應(yīng)當(dāng)理解,本發(fā)明不要求使用奇偶校驗(yàn),ECC或任何其它的特定檢測機(jī)制;所需的只是一個(gè)數(shù)據(jù)差錯(cuò)的某種指示。
首先參照圖4,邏輯線路336(從步驟330)前進(jìn)到步驟402,該步驟查詢系統(tǒng)是與NUMA類型相反的COMA類型系統(tǒng)還是其它系統(tǒng)。如果系統(tǒng)是COMA類型的系統(tǒng),則在步驟404中把存儲器模塊標(biāo)成對本地處理器禁用或無效的。步驟404是一個(gè)可選的步驟,在具有能夠動態(tài)再分配數(shù)據(jù)的硬件的唯高速緩存系統(tǒng)中可以執(zhí)行該步驟。步驟404提供了一種更高速硬件部件可以用來監(jiān)視無效數(shù)據(jù)的機(jī)制。在任意情況下,方法繼續(xù)到步驟406,在該步驟中系統(tǒng)記錄差錯(cuò)以便被一個(gè)服務(wù)處理器用來確定失效的字段替代單元(FRU)。在知道失效位的情況下系統(tǒng)可以確定一個(gè)失效的卡或DIMM。在一個(gè)實(shí)施例中,通過比較失效本地?cái)?shù)據(jù)(所有數(shù)據(jù)位和奇偶校驗(yàn)或ECC位)和在步驟310通過可選路徑338根據(jù)遠(yuǎn)端取數(shù)請求接收的好數(shù)據(jù)來確定失效位。本地?cái)?shù)據(jù)中包含的、與通過遠(yuǎn)端取數(shù)得到的假定良好的數(shù)據(jù)不匹配的位被認(rèn)為是失效的。通常不知道因一個(gè)不可校正差錯(cuò)(UE)造成的失效位;因而在一個(gè)數(shù)據(jù)分布在多個(gè)卡或存儲器模塊上的已知系統(tǒng)中通常不能隔離系統(tǒng)中的一個(gè)失效卡/存儲器模塊。
一旦在步驟406中記錄了這種差錯(cuò)數(shù)據(jù),則在步驟408通知操作系統(tǒng)以便允許操作系統(tǒng)處理差錯(cuò)。例如,操作系統(tǒng)可以能夠在一個(gè)致命差錯(cuò)發(fā)生之前結(jié)束訪問存儲器的失效區(qū)域的當(dāng)前任務(wù)。
圖5的方法為模塊334提供了一個(gè)可選方法。在步驟502中,請求方結(jié)點(diǎn)專門確定在步驟312中訪問的哪些位是損壞的。在一個(gè)實(shí)施例中,以圖4的步驟406所述的方式實(shí)現(xiàn)步驟502。即,處理器/存儲器控制器比較在步驟312中接收的失效本地?cái)?shù)據(jù)(所有數(shù)據(jù)位和差錯(cuò)檢測位,例如奇偶校驗(yàn)或ECC位)和在步驟310通過遠(yuǎn)端取數(shù)請求接收的好數(shù)據(jù)。本地?cái)?shù)據(jù)中包含的與通過遠(yuǎn)端取數(shù)得到的假定良好的數(shù)據(jù)不匹配的位被認(rèn)為是失效的。在步驟504中,存儲器控制器向有壞數(shù)據(jù)的地址寫入通過步驟310的遠(yuǎn)端取數(shù)得到的假定良好的數(shù)據(jù)。在步驟506,存儲器控制器從剛被寫入的地址讀取數(shù)據(jù)并且在步驟508進(jìn)行差錯(cuò)檢測。如果沒有檢測到差錯(cuò),則方法前進(jìn)到指示差錯(cuò)已經(jīng)被校正的步驟510,并且記錄在步驟512已經(jīng)發(fā)生的一個(gè)可校正差錯(cuò)。
如果在步驟508檢測到一個(gè)差錯(cuò),則存儲器控制器在步驟514確定差錯(cuò)是否是不可校正的。一個(gè)不可校正的差錯(cuò)表明數(shù)據(jù)中包含的差錯(cuò)不可改變或已經(jīng)惡化。如果差錯(cuò)是不可校正的,則過程以參照圖4所述的方式繼續(xù)進(jìn)行。這樣,步驟402確定系統(tǒng)是否是一個(gè)COMA類型的系統(tǒng),并且在是的情況下在步驟404中標(biāo)記存儲器模塊。無論系統(tǒng)體系結(jié)構(gòu)如何,方法500均在步驟406中記錄差錯(cuò)數(shù)據(jù),在步驟408中通知操作系統(tǒng),并且在步驟410中完成操作。
步驟514檢測到的一個(gè)可校正差錯(cuò)表明通過步驟502-506已經(jīng)校正了至少一部分的失效位,并且在步驟508檢測到的剩余失效位的數(shù)量等于或小于通過存儲器控制器的校正機(jī)制可以校正的位的數(shù)量。相應(yīng)地,在校正剩余的失效位之后,方法500可以結(jié)束。
但在圖5所示的實(shí)施例中,方法500確定任何部分在步驟508發(fā)現(xiàn)失效的位是否源于硬差錯(cuò),即相同的位是否重復(fù)失效。在步驟516,方法500確定哪些位是損壞的。即,把通過步驟506接收的數(shù)據(jù)與通過在步驟310提交的遠(yuǎn)端數(shù)據(jù)取數(shù)接收的數(shù)據(jù)相比較。包含在通過步驟506接收的數(shù)據(jù)中但不包含在遠(yuǎn)端數(shù)據(jù)中的那些位被假定是損壞的位。
接著,在步驟518進(jìn)行比較以確定在步驟516中明確的任何損壞數(shù)據(jù)位是否與任何原始損壞數(shù)據(jù)位,即在步驟502確定的損壞位匹配。如果失效位不匹配,則在步驟508確定的一或多個(gè)失效位不同于那些在步驟322確定失效的位,這表明發(fā)生了一個(gè)軟差錯(cuò)。接著方法500繼續(xù)到步驟512以記錄已經(jīng)發(fā)生的一個(gè)可校正差錯(cuò)。
如果在步驟518確定數(shù)據(jù)位匹配,則步驟520注明故障是一個(gè)硬差錯(cuò)。即,故障源于因步驟322上的初始差錯(cuò)狀態(tài)而失效的位上的一個(gè)差錯(cuò),并且沒有被步驟502-504校正。在一個(gè)實(shí)施例中,如步驟522所示,存儲器控制器執(zhí)行一個(gè)引導(dǎo)操作(如果在系統(tǒng)中支持)以替換因硬差錯(cuò)而失效的位。引導(dǎo)操作使用一個(gè)冗余數(shù)據(jù)位,該數(shù)據(jù)位被選擇用來替換在一個(gè)存儲器操作期間檢測到的一個(gè)失效數(shù)據(jù)位。在一個(gè)位被引導(dǎo)后,執(zhí)行一個(gè)引導(dǎo)清除操作。一個(gè)引導(dǎo)清除操作使用原始數(shù)據(jù)位獲取數(shù)據(jù),使用ECC校正數(shù)據(jù)并且接著使用冗余數(shù)據(jù)位把校正的數(shù)據(jù)回寫到相同的地址上。相應(yīng)地,引導(dǎo)操作減少了因硬失效位導(dǎo)致后續(xù)差錯(cuò)的可能性。盡管引導(dǎo)操作是優(yōu)選的,但本發(fā)明也能使用其它的校正機(jī)制來減少后續(xù)差錯(cuò)的可能性。接著方法500前進(jìn)到記錄一個(gè)可校正差錯(cuò)的出現(xiàn)的步驟512。
雖然前面的描述針對的是本發(fā)明的最優(yōu)實(shí)施例,但在不偏離本發(fā)明的基本范圍的前提下可以導(dǎo)出本發(fā)明其它和進(jìn)一步的實(shí)施例,并且根據(jù)下面的權(quán)利要求書來確定本發(fā)明的范圍。
權(quán)利要求
1.一個(gè)在基于目錄的數(shù)據(jù)處理系統(tǒng)中向一個(gè)請求方設(shè)備傳送數(shù)據(jù)的方法,其中包括的步驟有a)通過請求方設(shè)備訪問與該請求方設(shè)備相關(guān)的一個(gè)本地存儲器中包含的數(shù)據(jù);b)確定數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài);c)在存在一個(gè)差錯(cuò)狀態(tài)的情況下,訪問一個(gè)目錄以確定數(shù)據(jù)在一個(gè)遠(yuǎn)端存儲器上是否可用;d)如果遠(yuǎn)端存儲器中的數(shù)據(jù)可用,則從遠(yuǎn)端存儲器請求數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其中還包括的步驟有e)從遠(yuǎn)端存儲器接收數(shù)據(jù);f)向請求方設(shè)備提供數(shù)據(jù)。
3.如權(quán)利要求1所述的方法,其中步驟d)包括在一個(gè)連接請求方設(shè)備和遠(yuǎn)端存儲器的互連上放置一個(gè)請求。
4.如權(quán)利要求1所述的方法,其中還包括在步驟b)確定沒有差錯(cuò)狀態(tài)存在的情況下向請求方設(shè)備提供數(shù)據(jù)的步驟。
5.如權(quán)利要求1所述的方法,其中從一個(gè)存儲器控制器,一個(gè)處理器和其任意組合中選擇一個(gè)作為請求方設(shè)備。
6.如權(quán)利要求1所述的方法,其中還包括用從遠(yuǎn)端存儲器接收的數(shù)據(jù)更新本地存儲器的步驟。
7.如權(quán)利要求1所述的方法,其中還包括在確定存在一個(gè)差錯(cuò)狀態(tài)之后記錄一個(gè)數(shù)據(jù)差錯(cuò)的步驟。
8.如權(quán)利要求1所述的方法,其中還包括在步驟a)之前確定數(shù)據(jù)狀態(tài)的步驟。
9.如權(quán)利要求8所述的方法,其中確定數(shù)據(jù)狀態(tài)包括訪問目錄。
10.如權(quán)利要求1所述的方法,其中步驟c)包括確定數(shù)據(jù)狀態(tài)。
11.如權(quán)利要求10所述的方法,其中確定數(shù)據(jù)狀態(tài)的步驟包括確定數(shù)據(jù)是否處于一個(gè)共享狀態(tài)。
12.如權(quán)利要求10所述的方法,其中還包括的步驟有e)識別位于含有數(shù)據(jù)的本地存儲器的一個(gè)地址上的一或多個(gè)失效位;f)用來自遠(yuǎn)端存儲器的一或多個(gè)位重寫該地址上的一或多個(gè)位;g)從該地址讀取數(shù)據(jù)。
13.如權(quán)利要求12所述的方法,其中還包括的步驟有h)識別在步驟g)讀出的數(shù)據(jù)中包含的一或多個(gè)失效位;i)確定在步驟h)識別的任意一或多個(gè)失效位是否與在步驟e)識別的一或多個(gè)失效位匹配。
14.如權(quán)利要求13所述的方法,其中e)和h)包括把本地存儲器中包含的數(shù)據(jù)與從遠(yuǎn)端存儲器接收的數(shù)據(jù)相比較。
15.如權(quán)利要求12所述的方法,其中還包括的步驟有h)用來自遠(yuǎn)端存儲器的數(shù)據(jù)重寫本地存儲器中一個(gè)地址上的數(shù)據(jù);i)從該地址讀取數(shù)據(jù);j)確定在步驟i)從上述地址讀出的數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài);k)如果在步驟j)存在一個(gè)差錯(cuò)狀態(tài),確定在步驟b)得到的數(shù)據(jù)中包含的一或多個(gè)失效位是否與在步驟i)得到的數(shù)據(jù)中包含的一或多個(gè)失效位匹配。
16.如權(quán)利要求15所述的方法,其中還包括記錄差錯(cuò)數(shù)據(jù)的步驟。
17.一個(gè)數(shù)據(jù)處理系統(tǒng),其中包括一個(gè)第一結(jié)點(diǎn),一個(gè)第二結(jié)點(diǎn)和一個(gè)連接第一結(jié)點(diǎn)和第二結(jié)點(diǎn)的互連,其中第一結(jié)點(diǎn)具有一個(gè)第一處理單元,一個(gè)第一存儲器和一個(gè)目錄,第二結(jié)點(diǎn)具有一個(gè)第二處理單元和一個(gè)第二存儲器;第一處理單元被用來執(zhí)行以下步驟a)訪問第一存儲器中包含的數(shù)據(jù);b)確定數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài);c)在存在一個(gè)差錯(cuò)狀態(tài)的情況下,訪問目錄以確定數(shù)據(jù)是否可能駐留在系統(tǒng)中的另一個(gè)益上。
18.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中第一處理單元包含一個(gè)執(zhí)行步驟a)-c)的存儲器控制器。
19.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中第一結(jié)點(diǎn)和第二結(jié)點(diǎn)是一個(gè)體系結(jié)構(gòu)的部件,該體系結(jié)構(gòu)是從一個(gè)非統(tǒng)一存儲器訪問(NUMA)體系結(jié)構(gòu)和一個(gè)唯高速緩存存儲器體系結(jié)構(gòu)(COMA)中選擇出的一個(gè)體系結(jié)構(gòu)。
20.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中第一處理單元被用來確定在步驟c)中確定數(shù)據(jù)狀態(tài)。
21.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中第一處理單元被用來在步驟a)之前訪問目錄以確定數(shù)據(jù)是否位于第一存儲器之中。
22.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中第一處理單元包括一個(gè)處理器和一個(gè)存儲器控制器,存儲器控制器被用來執(zhí)行步驟a)-c)并且執(zhí)行以下步驟d)在不存在差錯(cuò)狀態(tài)的情況下向處理器提供數(shù)據(jù)。
23.如權(quán)利要求17所述的數(shù)據(jù)處理系統(tǒng),其中第一結(jié)點(diǎn)和互連中至少一個(gè)被用來執(zhí)行以下步驟d)在數(shù)據(jù)可能駐留在系統(tǒng)中另一個(gè)位置上的情況下從第二結(jié)點(diǎn)請求數(shù)據(jù)。
24.如權(quán)利要求23所述的數(shù)據(jù)處理系統(tǒng),其中第一結(jié)點(diǎn)和互連中至少一個(gè)被用來執(zhí)行以下步驟e)接收數(shù)據(jù);f)用從第二結(jié)點(diǎn)接收的數(shù)據(jù)更新第一存儲器。
25.如權(quán)利要求24所述的數(shù)據(jù)處理系統(tǒng),其中第一處理單元包括一個(gè)適于執(zhí)行步驟a)-c)并且還適于將在第一存儲器中訪問的數(shù)據(jù)與從第二結(jié)點(diǎn)接收的數(shù)據(jù)相比較以確定從第一存儲器請求的數(shù)據(jù)的一或多個(gè)失效位的存儲器控制器。
26.如權(quán)利要求23所述的數(shù)據(jù)處理系統(tǒng),其中第一結(jié)點(diǎn)和互連中至少一個(gè)被用來執(zhí)行以下步驟e)從第二結(jié)點(diǎn)接收數(shù)據(jù);f)向第一處理單元提供從第二結(jié)點(diǎn)接收的數(shù)據(jù);g)用從第二結(jié)點(diǎn)接收的數(shù)據(jù)更新第一存儲器;h)如果在步驟b)存在一個(gè)差錯(cuò)狀態(tài),向第一處理單元提供數(shù)據(jù)。
27.如權(quán)利要求26所述的數(shù)據(jù)處理系統(tǒng),其中第一處理單元被用來在步驟a)之前訪問目錄以確定數(shù)據(jù)是否位于第一存儲器之中。
28.一個(gè)具有分布共享存儲器的基于目錄的數(shù)據(jù)處理系統(tǒng),其中包括a)一個(gè)第一結(jié)點(diǎn),其中第一結(jié)點(diǎn)包含一個(gè)第一處理器,一個(gè)第一存儲器,一個(gè)第一存儲器控制器和一個(gè)第一目錄,第一目錄包含第一存儲器的一或多個(gè)存儲器模塊的狀態(tài)數(shù)據(jù);b)一個(gè)第二結(jié)點(diǎn),其中第二結(jié)點(diǎn)包含一個(gè)第二處理器,一個(gè)第二存儲器,一個(gè)第二存儲器控制器和一個(gè)第二目錄,第二目錄包含第二存儲器的一或多個(gè)存儲器模塊的狀態(tài)數(shù)據(jù);c)一個(gè)連接第一結(jié)點(diǎn)和第二結(jié)點(diǎn)的互連;其中第一存儲器控制器被用來訪問第一存儲器中包含的數(shù)據(jù)并且確定數(shù)據(jù)中是否存在一個(gè)差錯(cuò)狀態(tài),在存在一個(gè)差錯(cuò)狀態(tài)的情況下在互連上放置一個(gè)數(shù)據(jù)請求。
29.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中第一結(jié)點(diǎn)和第二結(jié)點(diǎn)是一個(gè)體系結(jié)構(gòu)的部件,該體系結(jié)構(gòu)是從一個(gè)非統(tǒng)一存儲器訪問(NUMA)體系結(jié)構(gòu)和一個(gè)唯高速緩存存儲器體系結(jié)構(gòu)(COMA)中選擇出的一個(gè)體系結(jié)構(gòu)。
30.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中第一存儲器控制器適于在訪問數(shù)據(jù)之前訪問第一目錄以確定第一存儲器中包含的數(shù)據(jù)的狀態(tài)。
31.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中第一存儲器控制器適于在把請求放置到互連上之前訪問目錄以確定第一結(jié)點(diǎn)是否包含數(shù)據(jù)的一個(gè)有效副本。
32.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中在存在一個(gè)差錯(cuò)狀態(tài)的情況下,第一結(jié)點(diǎn),第二結(jié)點(diǎn)和互連中的一或多個(gè)被用來確定第二結(jié)點(diǎn)中是否包含數(shù)據(jù),并且在包含的情況下向第一結(jié)點(diǎn)提供數(shù)據(jù)。
33.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中第一存儲器控制器還被用來確定差錯(cuò)狀態(tài)是一個(gè)不可校正差錯(cuò)還是一個(gè)可校正差錯(cuò)。
34.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中第一存儲器控制器還被用來識別第一存儲器中含有的數(shù)據(jù)中有哪些位包含一個(gè)數(shù)據(jù)差錯(cuò)。
35.如權(quán)利要求28所述的基于目錄的數(shù)據(jù)處理系統(tǒng),其中第一存儲器控制器還被用來比較第一存儲器中包含的數(shù)據(jù)和根據(jù)放置在互連上的請求而接收的數(shù)據(jù)。
全文摘要
一個(gè)基于目錄的多處理器計(jì)算機(jī)系統(tǒng)被提供了一個(gè)機(jī)制,該機(jī)制通過提供檢查數(shù)據(jù)差錯(cuò),并且在檢測到一個(gè)差錯(cuò)時(shí)確定系統(tǒng)中是否有另一個(gè)數(shù)據(jù)有效副本的能力來容忍差錯(cuò)。如果另一個(gè)數(shù)據(jù)副本可用,則在不需要產(chǎn)生一個(gè)中斷的情況下向請求數(shù)據(jù)的處理器/存儲器控制器提供數(shù)據(jù)。
文檔編號G06F12/08GK1319807SQ01103370
公開日2001年10月31日 申請日期2001年2月2日 優(yōu)先權(quán)日2000年2月3日
發(fā)明者法南茨·蒙尼斯-圖塞, 小尼古拉斯·A·普萊查克 申請人:國際商業(yè)機(jī)器公司