專利名稱:用于在一個分布式存儲器、高速緩存相干的多處理器系統(tǒng)中把有序的輸入/輸出事務(wù)流水 ...的制作方法
背景技術(shù):
1.領(lǐng)域本發(fā)明的一個實施例涉及包含分布式存儲器的計算機系統(tǒng)領(lǐng)域,尤其涉及一種用于在這樣的系統(tǒng)中流水線處理輸入/輸出事務(wù)的方法。
2.相關(guān)技術(shù)的討論某些輸入/輸出(I/O)總線,諸如外圍設(shè)備部件互連(PCI)總線,具有嚴(yán)格的事務(wù)次序要求。在其中在這樣一個I/O總線和存儲器之間僅僅具有一個路徑的計算機系統(tǒng)中,流水線處理來自I/O總線的有序請求是相對容易的。對于具有非分布式存儲器體系結(jié)構(gòu)的系統(tǒng)這個方法運行良好,因為在該I/O總線和存儲器之間存在單個路徑。
然而,對于具有一個分布式存儲器體系結(jié)構(gòu)的系統(tǒng),其在一個I/O總線和存儲器之間有多個路徑,由于在多個路徑上保持事務(wù)次序涉及的復(fù)雜度,一般慣例是不流水線處理來自I/O總線的有序請求。使用一種非流水線的方法,一個I/O橋接器在發(fā)布下一個I/O總線請求之前完成到存儲器的第一個I/O總線請求。這樣一種方法能夠限制用于面向分布式存儲器的事務(wù)能達(dá)到的I/O吞吐量。這可能導(dǎo)致總體系統(tǒng)性能損失或者需要非尋常的軟件修改來避免限制能達(dá)到的I/O吞吐量。
附圖簡要說明本發(fā)明通過示例進(jìn)行說明且不局限于附圖中的圖表,其中類似的參考號指示類似的單元,而且附圖包含
圖1是一個示范性的分布式存儲器、高速緩存相干的、多處理器系統(tǒng)的框圖,在該系統(tǒng)中依據(jù)一個實施例,有序的I/O事務(wù)可以被有效地流水線處理。
圖2一個實施例中的輸入/輸出橋接器的框圖,該輸入/輸出橋接器提供用于有序I/O事務(wù)的有效流水線處理而且可以在圖1中的系統(tǒng)中使用。
圖3是一個流程圖,說明了圖2中的預(yù)取引擎的操作。
圖4是一個流程圖,說明了圖2中的退出引擎的操作。
圖5是一個流程圖,說明了一個用于流水線處理有序I/O事務(wù)的實施例的一種方法。
詳細(xì)說明描述了一種用于在一個分布式存儲器、高速緩存相干系統(tǒng)中流水線處理有序輸入/輸出(I/O)事務(wù)的方法和裝置。在下面說明中,為了說明起見描述了特定類型的集成電路、系統(tǒng)與電路配置。然而,將要理解其它實施例適用于其它類型的集成電路,以及以另一種方式配置的電路和/或系統(tǒng)。
對于一個實施例,響應(yīng)于來自一條輸入/輸出總線、指向一個分布、相干存儲器的第一事務(wù),一個預(yù)取引擎從一個分布、相干存儲器中預(yù)取數(shù)據(jù)。一個相干高速緩存緩沖器接收該預(yù)取的數(shù)據(jù)并且和該分布、相干存儲器以及在該系統(tǒng)中的其它相干高速緩存存儲器保持相干。
圖1是一個框圖,顯示一個其中可以有利地使用本發(fā)明的一個實施例的示例計算機系統(tǒng)100。計算機系統(tǒng)100是一個分布式存儲器、高速緩存相干、多處理器系統(tǒng)。該示例系統(tǒng)100包含處理結(jié)點105和110,這些結(jié)點可以被包含在大量處理結(jié)點當(dāng)中。在系統(tǒng)100中還包含一個互連網(wǎng)絡(luò)115和一個輸入/輸出(I/O)節(jié)點120。
每一個處理結(jié)點105和110都包含一個或多個處理器125來處理指令、分別包含一個或多個芯片組部件130和135、以及分別包含一個或多個本地存儲器140和145。芯片組部件130和135可以執(zhí)行諸如,例如用于相應(yīng)節(jié)點的存儲器控制、多路處理支持和/或高速緩存相干性維護(hù)的功能。一個或多個處理器125可以每個都包含或者與一個高速緩沖存儲器147相連。用于一個實施例的高速緩存存儲器147是互相相干的,而且在這個示例中,具有由存儲器140和145實現(xiàn)的分布、相干存儲器。
一個實施例中的存儲器140和145一起操作作為一個分布、相干主存儲器。每一個存儲器140和145可以是一個同樣包含非相干區(qū)域的大存儲器的一部分或者一個區(qū)域。對于一個實施例,使用眾所周知的MESI(修改、排它、共享或者無效)狀態(tài)協(xié)議結(jié)合相干系統(tǒng)互連總線160、165和/或170,保持在高速緩存存儲器147和存儲器140和145之間的相干性。相干系統(tǒng)互連總線160、165和170經(jīng)由互連網(wǎng)絡(luò)115在處理結(jié)點105和110以及I/O節(jié)點120之間通信信息,以便在各個存儲器140、145和在I/O節(jié)點120中的相干高速緩存緩沖器之間保持相干性,將在下面對該I/O節(jié)點120進(jìn)行更詳細(xì)的描述。對于一個實施例,依據(jù)在處理結(jié)點和I/O節(jié)點之間的通信事務(wù),相干系統(tǒng)互連總線160、165和170是沒有次序限制的點到點互連。
可以提供互連網(wǎng)絡(luò)115來在該I/O節(jié)點120和諸如處理結(jié)點105和110的處理結(jié)點之間通信消息。對于一個實施例,互連網(wǎng)絡(luò)115沒有保持在該I/O節(jié)點120和一個或多個處理結(jié)點105和110之間通信的信息當(dāng)中的次序。
該I/O節(jié)點120包含一個I/O橋接器150來把一個或多個I/O總線155,諸如,例如一個外圍設(shè)備部件互連(PCI)總線,和處理結(jié)點105和110接口。下面參見圖2對一個實施例中的I/O橋接器120的更多細(xì)節(jié)進(jìn)行描述。
就其它實施例來說,可以以其它方式配置系統(tǒng)100。例如,芯片組和/或存儲器可以被包含在一個或多個處理器125內(nèi),和/或互連網(wǎng)絡(luò)115可以不被包含在內(nèi)。此外,可以依據(jù)不同的協(xié)議和/或使用不同類型的互連方法維持存儲器的相干性。其中在I/O總線和存儲器之間不止一條路徑的其它類型的系統(tǒng)配置也在各種實施例的范圍內(nèi)。
圖2是I/O橋接器250的框圖,該I/O橋接器250可以用于一個實施例以實現(xiàn)圖1中的I/O橋接器150。I/O橋接器250包含一個或多個I/O高速緩存緩沖器205、一個或多個I/O事務(wù)請求緩沖器210、一個預(yù)取引擎215和一個退出引擎220。還可以包含其它電路,諸如其它I/O事務(wù)處理、緩存和控制電路(未顯示)。
如以下更詳細(xì)描述得那樣,高速緩存緩沖器205包含地址、數(shù)據(jù)和狀態(tài)字段,而且被用來響應(yīng)于一個或多個I/O事務(wù)請求存儲預(yù)取的數(shù)據(jù),以便于I/O事務(wù)請求的流水線操作。地址字段指示在相應(yīng)數(shù)據(jù)字段中的數(shù)據(jù)保存在存儲器中那個位置的地址。保持一個實施例中的高速緩存緩沖器205與其中包含I/O橋接器250的系統(tǒng)中的其它相干存儲器的相干。例如,在I/O橋接器250被包含在圖1的系統(tǒng)100中的場合,保持高速緩存緩沖器205與分布式的相干存儲器140和145、以及相干高速緩沖存儲器147相干。因此,I/O高速緩存緩沖器205中的狀態(tài)字段被用于指示在相應(yīng)數(shù)據(jù)字段中的數(shù)據(jù)的相干性狀態(tài)(例如,用于一個其中使用了MESI協(xié)議的實施例的M(修改)、E(排它的)、S(共享)或者I(無效))。
提供了I/O事務(wù)請求緩沖器210(在此也被稱為I/O請求緩沖器),以存儲從一條或多條I/O總線255送往根據(jù)圖1描述的分布式的相干存儲器的事務(wù)請求。另一方面,這種請求在此可以被稱為入站相干請求或者入站相干I/O請求。
就一個實施例來說,I/O事務(wù)請求緩沖器210可以用來存儲所有的1/O事務(wù)請求,不管它們是否被送往相干的存儲器區(qū)域。沒有被送往相干存儲器的I/O請求在此被稱為非相干的事務(wù)請求,而且可以包含,例如I/O端口訪問、配置訪問、中斷、和/或諸如鎖定之類的特定事務(wù)。此外,甚至某些被送往相干存儲器區(qū)域的I/O事務(wù)可以被分類為非相干的事務(wù)。例如,在鎖定序列期間對相干存儲器的存儲器訪問可以被分類為非相干的事務(wù)。
所希望的相干高速緩存緩沖器和/或輸入/輸出請求緩沖器的大小可以通過均衡所希望的對存儲器的延遲和I/O吞吐量相對于用于緩沖器的可用空間來確定。
此外,就某些實施例來說,對寫或者讀多行存儲器的一個I/O事務(wù)請求可以作為單個事務(wù)被保存在I/O事務(wù)請求緩沖器210中,但是作為多個單線事務(wù)在存儲器行邊界處由預(yù)取和退出引擎進(jìn)行處理。就這樣一個實施例來說,這些單線事務(wù)中每一個的處理是依據(jù)如下所述的用于單個單線事務(wù)的方法進(jìn)行的。
一個實施例中的I/O事務(wù)請求緩沖器210包含地址、數(shù)據(jù)和控制字段。地址字段指示與請求有關(guān)的地址,諸如一個將被訪問的存儲器地址。數(shù)據(jù)字段提供了在寫請求時將被寫入到存儲器中、或是在讀請求時將被寫入到用于返回數(shù)據(jù)的位置的相應(yīng)數(shù)據(jù),而控制字段可以用來指示相對指令排序信息、請求類型和/或與I/O事務(wù)請求有關(guān)的附加信息。
在I/O請求緩沖器210存儲了來自I/O總線255的相干和非相干的I/O事務(wù)請求的場合,事務(wù)的類型可以由與該事務(wù)有關(guān)的地址、請求類型和/或在控制字段中的控制信息來確定。
就一個實施例來說,I/O橋接器250為每條連接到I/O橋接器250的不同I/O總線255包含一個類似于I/O請求緩沖器210的單獨的I/O請求緩沖器。就另一個實施例來說,提供了單個I/O請求緩沖器210,以暫時地存儲從連接到I/O橋接器250的所有I/O總線255接收的I/O事務(wù)請求。就這個實施例來說,I/O事務(wù)請求緩沖器210的控制字段還可以指示從其接收事務(wù)的那條總線。就一個替換實施例來說,I/O橋接器250可以包含不同數(shù)目的類似于I/O事務(wù)請求緩沖器210的I/O事務(wù)請求緩沖器,其中一個或多個緩沖器由多條I/O總線255共享。
類似地,高速緩存緩沖器205可以包含多個高速緩存緩沖器或者單個高速緩存緩沖器。
預(yù)取引擎215和退出引擎220可以使用兩個單獨的電路塊來實現(xiàn),或者它們可以被組合起來以提供如下所述的功能。
在操作中,來自一條或多條I/O總線255的入站I/O事務(wù)請求被暫時地保存在I/O事務(wù)請求緩沖器210中。就一個實施例來說,I/O事務(wù)請求緩沖器210被實現(xiàn)為一個先進(jìn)先出(first-in-first-out,F(xiàn)IFO)緩沖器,以便使輸入的事務(wù)以它們從I/O總線255中接收的順序被保存在緩沖器中,而且事務(wù)排序不需要被另外指示。就另一個實施例來說,可以在例如控制字段中指示相對的事務(wù)順序。
預(yù)取引擎215然后操作用于允許把事務(wù)請求流水線處理到相干存儲器。預(yù)取引擎通過執(zhí)行與在I/O事務(wù)請求緩沖器210中的事務(wù)有關(guān)的數(shù)據(jù)的非匯集預(yù)取、然后把預(yù)取的數(shù)據(jù)存儲在I/O高速緩存緩沖器205中,這樣進(jìn)行操作??梢栽诹硪粋€事務(wù)正被處理的同時,或者在等待對前一預(yù)取操作的響應(yīng)的同時,執(zhí)行這個數(shù)據(jù)預(yù)取。此外,預(yù)取引擎215可以預(yù)取與在I/O事務(wù)請求緩沖器中的任何相干事務(wù)請求有關(guān)的數(shù)據(jù),而不考慮它被接收的順序。以這種方法,啟用了流水線操作。結(jié)合圖2和3更詳細(xì)地描述一個實施例中預(yù)取引擎215的操作。
如圖3的塊305所示,預(yù)取引擎215首先從I/O事務(wù)請求緩沖器210中選擇一條相干請求。可以使用多種方法中的任何一種來選擇將被預(yù)取引擎215進(jìn)行操作的待處理相干請求。例如,預(yù)取引擎215可以僅僅選擇在緩沖器210中的下一條待處理請求。如果有多個I/O事務(wù)請求緩沖器,則預(yù)取引擎215可以使用例如一種時間分割方法,以選擇在一個緩沖器中的下一條待處理相干請求。做為選擇,由對在其上進(jìn)行操作的下一條待處理相干請求的預(yù)取引擎進(jìn)行的選擇可以是任意的。然而,無論使用了什么方法,預(yù)取引擎215都不需要遵守在選擇待處理請求或者在執(zhí)行預(yù)取操作中的排序要求。
此外,就一個實施例來說,如果例如另外預(yù)取引擎215是空轉(zhuǎn)的(例如,在I/O事務(wù)請求緩沖器210中沒有待處理的事務(wù)請求),則預(yù)取引擎215可以推測地預(yù)取數(shù)據(jù)。就這個實施例來說,預(yù)取引擎215可以使用多種方法中的任何一種,以確定將被推測性地預(yù)取用于一個預(yù)期的I/O事務(wù)的數(shù)據(jù)。例如,預(yù)取引擎215可以預(yù)取繼剛好被預(yù)取的數(shù)據(jù)之后的下一存儲器行或者多行。以這種方法,如果一個即將到來的入站I/O事務(wù)請求指示順序地繼前一請求之后的數(shù)據(jù),則該數(shù)據(jù)將會是立即可用的。其它用以確定數(shù)據(jù)以推測性地預(yù)取的方法在各種在判定塊310,確定所選擇的相干請求是讀請求還是寫請求。如果例如預(yù)取引擎215正對一條待處理讀請求進(jìn)行操作,則在塊315,預(yù)取引擎215確定所請求的存儲器行的有效拷貝在I/O高速緩存緩沖器205中是否可用。如果是這樣的話,則預(yù)取引擎在塊320繼續(xù)確定在I/O事務(wù)請求緩沖器210中是否有更多的待處理請求,而且可以在塊305繼續(xù)預(yù)取與在I/O事務(wù)請求緩沖器210中的其它待處理請求有關(guān)的數(shù)據(jù)。
在判定塊315處,如果該請求存儲器行的一個有效拷貝不在該本地I/O高速緩存緩沖器205中可用,然后,在塊325處,預(yù)取引擎215在相干系統(tǒng)互連270上發(fā)布一個讀取請求以預(yù)取要被讀取的存儲器請求行。在該I/O橋接器250被包含在一個類似于圖1中的系統(tǒng)100的系統(tǒng)中的地方,在相干系統(tǒng)互連270上發(fā)布的讀取請求,經(jīng)由與各個系統(tǒng)處理結(jié)點相連的相干系統(tǒng)互連總線,通過互連網(wǎng)絡(luò)傳遞到該系統(tǒng)的分布式、相干存儲器處。在包含I/O橋接器250的系統(tǒng)以一種不同的方式被配置的地方,在該相干系統(tǒng)互連上發(fā)布的讀取請求可以經(jīng)由一種不同的路由達(dá)到分布式、相干存儲器。
這個預(yù)取操作,以及由一個實施例的預(yù)取引擎215執(zhí)行的其它預(yù)取操作,是一個非匯集的預(yù)取操作。在這個環(huán)境中的非匯集意思指,如果經(jīng)由相干系統(tǒng)互連270從在該系統(tǒng)中的某些其它存儲器/高速緩存代理接收一個進(jìn)來的探聽請求,而且這個探聽請求命中在該I/O高速緩存緩沖器205中的一行,則遵循用于分布式、相干存儲器的存儲器/高速緩存相干協(xié)議(用于一個實施例的MESI協(xié)議)。因此,在相應(yīng)事務(wù)請求的預(yù)取操作和退出之間,保存在I/O高速緩存緩沖器205中的預(yù)取存儲器行可以是無效的及/或I/O高速緩存緩沖器205可以失去該行的所有權(quán)。根據(jù)退出引擎220的操作在下面更詳細(xì)地討論解決這個問題的方法。
繼續(xù)參見圖2和3,在從該相干系統(tǒng)互連等待著一個響應(yīng)的同時,預(yù)取引擎215可以在塊320處繼續(xù)進(jìn)行以確定在該I/O事務(wù)請求緩沖器210中是否有更多的等待請求或者是否推測地預(yù)取附加的數(shù)據(jù)。預(yù)取引擎能因此響應(yīng)于在I/O事務(wù)請求緩沖器210中的其它等待請求,以如上所述的方法繼續(xù)預(yù)取數(shù)據(jù)或者推測地預(yù)取數(shù)據(jù)。
在塊330處,當(dāng)經(jīng)由該相干系統(tǒng)互連170接收請求的數(shù)據(jù)時,預(yù)取引擎215在I/O高速緩存緩沖器205中把這個數(shù)據(jù)指定到一個共享狀態(tài)中。這通過在該I/O高速緩存緩沖器205的地址字段中指示與該數(shù)據(jù)有關(guān)的存儲器地址、在相應(yīng)的數(shù)據(jù)字段中指示請求的數(shù)據(jù),以及在相應(yīng)狀態(tài)字段中指示高速緩存相干性狀態(tài)(在這種情況中為共享),來完成。
回過來參考判定塊310,如果選擇的請求代之以一個寫請求,則在塊335處,預(yù)取引擎215確定該I/O高速緩存緩沖器205是否擁有對應(yīng)于該寫請求的存儲器行的一個排它拷貝(例如,利用MESI協(xié)議,這個所有權(quán)由一個E或者M(jìn)狀態(tài)指示)。如果是這樣的話,則在塊320處,如先前描述的那樣,預(yù)取引擎215可以如上所述,繼續(xù)預(yù)取對應(yīng)于其它待定請求的數(shù)據(jù)或者推測地預(yù)取數(shù)據(jù)。
如果,在判定塊335處,I/O高速緩存緩沖器205不擁有與該寫請求有關(guān)的特定存儲器行的一個排它拷貝,則在塊340處,預(yù)取引擎215發(fā)布一個請求以經(jīng)由該相干系統(tǒng)互連270預(yù)取該存儲器行的所有權(quán)。對于一個實施例,取決于該寫請求是否是一個部分行寫請求或者全行寫請求,那請求的形式可以不同。例如,對于一次全行寫請求,預(yù)取引擎可以發(fā)布一個無效請求以無效該存儲器行的其它拷貝而沒有讀取該存儲器行的內(nèi)容,同時對于一個部分行寫請求,預(yù)取引擎可以發(fā)布一個所有權(quán)讀取請求,其使該存儲器行的其它拷貝無效并且返回該存儲器行的內(nèi)容。
類似于讀取請求,在等待在互連270上的探聽響應(yīng)的同時,預(yù)取引擎215可以繼續(xù)預(yù)取與其它待處理I/O事務(wù)請求有關(guān)的數(shù)據(jù)。
在塊345處,當(dāng)接收到一次探聽響應(yīng)時,預(yù)取引擎在I/O高速緩存緩沖器205中把請求的存儲器行指定到一個排它狀態(tài)中(即,例如,根據(jù)MESI協(xié)議的“E”狀態(tài))。一個實施例的方法則在塊320處繼續(xù)進(jìn)行以確定是否有更多的待處理I/O請求要在其上面進(jìn)行操作。
并行于預(yù)取引擎215進(jìn)行的上述動作,一旦事務(wù)請求已經(jīng)完成了,則退出引擎220進(jìn)行操作以按次序從I/O事務(wù)請求緩沖器210中退出I/O事務(wù)請求。參見圖2和4對一個實施例的退出引擎215的操作進(jìn)行描述。
在塊405處,退出引擎220從I/O事務(wù)請求緩沖器210中按次序選擇下一個事務(wù)來退出。對于一個實施例,退出引擎220可以嚴(yán)格地以它們從一條特定I/O總線接收的次序退出事務(wù)請求。對于另一個實施例,退出引擎220可以依據(jù)為偏離該事務(wù)被接收的次序而準(zhǔn)備的特定排序規(guī)則退出事務(wù)請求。對于一個實施例,這些次序要求可以在該事務(wù)本身中指定,然后依據(jù)一個狀態(tài)機,例如,在退出引擎220中處理。
例如,對于一個實施例,具有可在該I/O高速緩存緩沖器205中得到的相應(yīng)數(shù)據(jù)的一個讀取事務(wù)請求可以在一個較早接收的、讀取事務(wù)請求之前退出,因此一個后續(xù)的讀取請求有效地超越一個未完成的、先前讀取請求。對于這個相同的實施例,然而,一個讀取請求可以不在一個較早接收的寫請求之前被退出??梢栽谠撏顺鲆嫔厦媸┘悠渌愋偷呐判蛞?guī)則以保證不從該系統(tǒng)中任何存儲器中寫入錯誤數(shù)據(jù)或者從中讀出錯誤數(shù)據(jù)。退出指令以防止錯誤讀取或者寫入事務(wù)的次序在此被稱為程序次序。
此外,如上所述,對于一個實施例,I/O事務(wù)請求緩沖器210還可以存儲非相干的I/O事務(wù)請求。對于這樣一個實施例,由退出引擎220保持的退出次序還包含按次序退出非相干的I/O事務(wù)請求。
在塊410處,一旦已經(jīng)選擇了要被退出的I/O事務(wù)請求,則退出引擎220在塊415處確定該事務(wù)是否是一個讀取事務(wù)或者寫入事務(wù)。如果該事務(wù)是一個讀取事務(wù),則在塊420處,退出引擎220確定與該事務(wù)有關(guān)的存儲器行是否在該I/O高速緩存緩沖器205中存在和有效。如果是這樣的話,則在塊425處,來自I/O高速緩存緩沖器205的相應(yīng)數(shù)據(jù)經(jīng)由I/O總線255中的相應(yīng)一條返回到請求的I/O代理。
如果,在判定塊420處,確定相應(yīng)存儲器行在I/O高速緩存緩沖器205中不存在或者是無效的(如上所述,可能由于在該系統(tǒng)中另一個高速緩存代理的探聽請求),則在塊440處,退出引擎在相干系統(tǒng)互連270上發(fā)布一個讀取請求以取出對應(yīng)于該事務(wù)請求的存儲器行。一旦請求的數(shù)據(jù)已經(jīng)經(jīng)由相干系統(tǒng)互連270返回到I/O橋接器250,則在塊425處把該數(shù)據(jù)提供到請求I/O代理。
在塊430處,一旦已經(jīng)為該I/O事務(wù)請求進(jìn)行了服務(wù),則從該I/O事務(wù)請求緩沖器210中刪除它。這可以以許多方式中的任何一種完成。對于一個實施例,例如,刪去在該I/O事務(wù)請求緩沖器210中的條目。對于另一個實施例,通過僅僅使用一個標(biāo)記或者另一種方法,可以使在該緩沖器210中的該行可用于一個后續(xù)的條目以便它被改寫。
回過來參見判定塊415,如果要被退出的I/O事務(wù)請求代之以是一個寫請求,則在判定塊445處,確定I/O高速緩存緩沖器205是否擁有在一個排它狀態(tài)中的相應(yīng)存儲器行(即,依據(jù)MESI協(xié)議的一個M或者E狀態(tài))。如上所述,即使該存儲器行的所有權(quán)被先前預(yù)取了,I/O高速緩存緩沖器205也可以在存儲器行被預(yù)取的時間和事務(wù)請求被退出的時間之間已經(jīng)失去了該行的所有權(quán)。這可以是因為,例如,來自在該系統(tǒng)中的另一個高速緩存代理的一個中間探聽操作命中在該I/O高速緩存緩沖器205中請求的高速緩存行。
如果I/O高速緩存緩沖器205擁有在一個排它狀態(tài)中的存儲器行,則在塊450處,依據(jù)寫入請求在I/O高速緩存緩沖器205中更新與存儲器行有關(guān)的數(shù)據(jù)而且該行的狀態(tài)被標(biāo)記為修改了。(要被寫入到符合該寫入請求存儲器行中的數(shù)據(jù)可以,例如,在寫到在該I/O高速緩存緩沖器205中的存儲器行中之前,已經(jīng)被暫時地保存在一個寫入緩沖器(沒有顯示)中)。
如果該寫入請求是一個全行寫入請求,則整行數(shù)據(jù),依據(jù)該寫入請求,被簡單地寫到在I/O高速緩存緩沖器205中的相應(yīng)條目的數(shù)據(jù)字段中。如果,代之以,寫入請求是一個部分行寫入請求,則要被寫入的數(shù)據(jù)可以以本技術(shù)領(lǐng)域技術(shù)人員眾所周知的方式與當(dāng)前在該I/O高速緩存緩沖器205相應(yīng)行中的數(shù)據(jù)合并。
對于一個實施例,為了允許更好地跟蹤I/O高速緩存緩沖器205的狀態(tài),如果例如響應(yīng)于任何取出、預(yù)取或者獲得所有權(quán)操作,作為添加新條目替換在該I/O高速緩存緩沖器205中修改了的行,則該I/O橋接器250經(jīng)由相干系統(tǒng)互連270發(fā)送一個請求來恰當(dāng)?shù)馗略谠摲植即鎯ζ髦械男?。如果例如響?yīng)于一次預(yù)取操作替換在該I/O高速緩存緩沖器205中的一個干凈行(即,當(dāng)前沒有數(shù)據(jù)被保存在那個高速緩存行中),則I/O橋接器250經(jīng)由相干系統(tǒng)互連270發(fā)送一個探聽請求來向跟蹤在該系統(tǒng)中的高速緩存緩沖器狀態(tài)的實體指示這個動作。可以例如,通過包含在該I/O橋接器(沒有顯示)內(nèi)的其它相干性控制邏輯發(fā)送這些探聽請求。這個其它相干性控制邏輯還可以響應(yīng)于其它動作類型執(zhí)行諸如探聽的功能,及/或解釋與在該系統(tǒng)中的I/O高速緩存緩沖器205和/或其它高速緩存代理有關(guān)的相干性狀態(tài)。
繼續(xù)參考圖2和4,在判定塊445處,如果該I/O高速緩存緩沖器205不擁有對應(yīng)于在一個排它狀態(tài)中的寫入請求的存儲器行,則在塊455處,退出引擎220以類似于上述描述相應(yīng)預(yù)取操作的方式、經(jīng)由該相干系統(tǒng)互連請求和獲取該存儲器行的所有權(quán)。退出引擎然后也以如上所述在塊450處繼續(xù)進(jìn)行,以對于每個被退出的寫入請求更新在高速緩存緩沖器205中的數(shù)據(jù)。
在塊430處,一旦已經(jīng)完成了該請求,則從該I/O事務(wù)請求緩沖器210中刪除該請求。
在判定塊435處,確定在I/O事務(wù)請求緩沖器210中是否有更多的待定請求。如果是這樣的話,則以一種類似的方式處理和退出它們。
使用上述方法,有可能在一個在I/O總線和存儲器之間有多條路徑的系統(tǒng)中(例如,在一個具有分布式、相干存儲器的系統(tǒng)中)流水線處理有序的I/O事務(wù)請求。通過一個響應(yīng)于來自一條或多條I/O總線的相干存儲器訪問請求而執(zhí)行非匯集、無序預(yù)取操作的預(yù)取引擎部分地便于這個流水線處理。另外,上述本地I/O高速緩存緩沖器通過存儲該預(yù)取操作的結(jié)果,同時保持和剩余分布式存儲器子系統(tǒng)和高速緩存存儲器的相干性,來幫助該流水線操作。同在一個多處理器、分布式的存儲器、高速緩存相干系統(tǒng)中處理I/O事務(wù)的先前方法相比,允許I/O請求流水線處理可以提高I/O吞吐量,而且因此提高了總體系統(tǒng)性能。
圖5是一個流程圖,說明了一個用于流水線處理有序I/O事務(wù)的實施例中的一種方法。在塊505處,從一條I/O總線送往一個分布式相干存儲器的I/O事務(wù)為緩存。在塊510處,響應(yīng)于第一個緩存的輸入/輸出事務(wù)從該分布式、相干存儲器中預(yù)取數(shù)據(jù),并且在塊515處暫時地把數(shù)據(jù)存儲。在塊520處,在該預(yù)取數(shù)據(jù)和保存在該分布式、相干存儲器及其它高速緩存存儲器中的數(shù)據(jù)之間保持相干性,并且在塊525處,按次序退出緩存的I/O事務(wù)。將要理解對于其它實施例,該方法可以僅僅包含如上所述的某些動作或者可以包含沒有在上面所述的附加動作。此外,這些動作中的一個或多個可以以一種不同于上面所述的次序執(zhí)行或者和上面所述的另一個動作同時執(zhí)行。
在上述說明中,已經(jīng)結(jié)合其中的具體實施例對本發(fā)明進(jìn)行了描述。然而,可以理解可以在這里進(jìn)行各種修改和變化,而沒有背離由附加權(quán)利要求書所闡述的、本發(fā)明更為廣泛的精神和范圍。因此,說明書和附圖只是說明性的,而沒有限制意義。
權(quán)利要求
1.一個裝置,包含一個響應(yīng)于從一條輸入/輸出總線送往一個分布式、相干存儲器的第一事務(wù)從該分布式、相干存儲器中預(yù)取數(shù)據(jù)的預(yù)取引擎;以及一個接收該預(yù)取的數(shù)據(jù)的輸入/輸出相干高速緩存緩沖器,該相干高速緩存緩沖器和該分布式相干存儲器以及在一個包含該輸入/輸出相干高速緩存緩沖器的系統(tǒng)中的其它高速緩存存儲器相干。
2.如權(quán)利要求1所述的裝置,其特征在于由該預(yù)取引擎執(zhí)行的預(yù)取操作是一次非匯集的預(yù)取操作,因此由該相干高速緩存緩沖器接收的預(yù)取數(shù)據(jù)可以由在該分布式相干存儲器中的存儲器改變。
3.如權(quán)利要求2所述的裝置,其特征在于第一事務(wù)請求是一個存儲器讀取請求而且該預(yù)取引擎響應(yīng)于該第一事務(wù)請求發(fā)布一個讀取請求來從該分布式、相干存儲器中預(yù)取要讀取的數(shù)據(jù)。
4.如權(quán)利要求2所述的裝置,其特征在于第一事務(wù)請求是一個存儲器寫入取請求而且該預(yù)取引擎發(fā)布一個請求來預(yù)取在該分布式、相干存儲器中的一個存儲器行的所有權(quán),該存儲器行由第一事務(wù)請求所指示。
5.如權(quán)利要求1所述的裝置,進(jìn)一步包含一個暫時地存儲從輸入/輸出總線接收,送往分布式、相干存儲器的事務(wù)請求的輸入/輸出事務(wù)請求緩沖器。
6.如權(quán)利要求5所述的裝置,其特征在于該預(yù)取引擎響應(yīng)于保存在輸入/輸出事務(wù)請求緩沖器中的事務(wù)請求預(yù)取數(shù)據(jù)。
7.如權(quán)利要求6所述的裝置,其特征在于該預(yù)取引擎響應(yīng)于保存在輸入/輸出事務(wù)請求緩沖器中的事務(wù)請求,而不考慮該事務(wù)請求從輸入/輸出總線接收的次序,預(yù)取數(shù)據(jù)。
8.如權(quán)利要求5所述的裝置,進(jìn)一步包含一個在事務(wù)請求已經(jīng)完成了之后以程序次序退出保存在該事務(wù)請求緩沖器中的輸入/輸出事務(wù)請求的退出引擎。
9.如權(quán)利要求8所述的裝置,其特征在于該退出引擎進(jìn)一步檢查該輸入/輸出相干高速緩存緩沖器以確定與要被退出的一個輸入/輸出事務(wù)請求有關(guān)的數(shù)據(jù)以一種有效狀態(tài)是否存在于輸入/輸出相干高速緩存中。
10.如權(quán)利要求1所述的裝置,其特征在于使用MESI協(xié)議在輸入輸出相干高速緩存和該分布式、相干存儲器之間保持相干性。
11.一種方法,包含響應(yīng)于從一條輸入/輸出總線接收并且送往一個分布式、相干存儲器的第一輸入/輸出事務(wù)請求,預(yù)取數(shù)據(jù);臨時地存儲該預(yù)取的數(shù)據(jù);以及在預(yù)取的數(shù)據(jù)和保存在該分布式、相干存儲器中的數(shù)據(jù)以及保存在其它高速緩存存儲器中的數(shù)據(jù)之間保持相干性。
12.如權(quán)利要求11所述的方法,進(jìn)一步包含緩存從輸入/輸出總線接收,送往分布式、相干存儲器的輸入/輸出事務(wù)請求。
13.如權(quán)利要求12所述的方法,進(jìn)一步包含響應(yīng)于第二和第三緩存的輸入/輸出事務(wù)預(yù)取數(shù)據(jù),其中響應(yīng)于第一、第二和第三緩存的輸入/輸出事務(wù)預(yù)取數(shù)據(jù)可以以任何次序執(zhí)行。
14.如權(quán)利要求12所述的方法,進(jìn)一步包含緩存的輸入/輸出事務(wù)由輸入/輸出總線發(fā)布的次序退出。
15.如權(quán)利要求14所述的方法,其特征在于退出包含檢查臨時存儲的、預(yù)取的數(shù)據(jù),以確定對應(yīng)于要被退出的事務(wù)請求的有效數(shù)據(jù)是否被臨時存儲了。
16.如權(quán)利要求11所述的方法,其特征在于保持相干性包含使用一個MESI協(xié)議保持相干性。
17.如權(quán)利要求11所述的方法,其特征在于預(yù)取包含響應(yīng)于第一事務(wù)請求發(fā)布一條數(shù)據(jù)請求;以及接收請求的數(shù)據(jù)。
18.如權(quán)利要求17所述的方法,其特征在于響應(yīng)于從輸入/輸出總線接收并且送往該分布式、相干存儲器的第二輸入/輸出事務(wù)請求預(yù)取數(shù)據(jù)出現(xiàn)在發(fā)布該請求和接收請求的數(shù)據(jù)之間。
19.一個計算機系統(tǒng),包含每個都包含至少一個處理器和至少一個高速緩存代理的第一和第二處理結(jié)點;一個分布式相干存儲器,其中該分布式相干存儲器中的部分被包含在每一個第一和第二處理結(jié)點內(nèi);以及一個與第一和第二處理結(jié)點相連的輸入/輸出節(jié)點、該輸入/輸出節(jié)點包含一個響應(yīng)于從第一條輸入/輸出總線送往該分布式、相干存儲器的第一事務(wù),從該分布式、相干存儲器中預(yù)取數(shù)據(jù)的預(yù)取引擎;以及一個接收該預(yù)取的數(shù)據(jù)的輸入/輸出相干高速緩存緩沖器,該相干高速緩存緩沖器和該分布式相干存儲器以及高速緩存代理相干。
20.如權(quán)利要求19所述的計算機系統(tǒng),進(jìn)一步包含一個相干系統(tǒng)互連以把每一個第一和第二處理結(jié)點連接到輸入/輸出節(jié)點,該相干系統(tǒng)互連來傳遞信息以保持該分布式,相干存儲器的相干性以及保持在該輸入/輸出相干高速緩存緩沖器和該分布式相干存儲器之間的相干性。
21.如權(quán)利要求20所述的計算機系統(tǒng),其特征在于依據(jù)一個MESI協(xié)議保持相干性。
22.如權(quán)利要求19所述的計算機系統(tǒng),進(jìn)一步包含一個互連網(wǎng)絡(luò),以在第一和第二處理結(jié)點以及輸入/輸出節(jié)點之間傳遞信息。
23.如權(quán)利要求19所述的計算機系統(tǒng),進(jìn)一步包含一個連接在第一和第二處理結(jié)點以及多個輸入/輸出總線之間的輸入/輸出橋接器,多個輸入/輸出總線包含第一輸入/輸出總線,該輸入/輸出橋接器包含預(yù)取引擎和輸入/輸出相干高速緩存緩沖器。
24.如權(quán)利要求22所述的計算機系統(tǒng),其特征在于該輸入/輸出橋接器進(jìn)一步包含至少一個輸入/輸出事務(wù)請求緩存器,來臨時地存儲從多個輸入/輸出總線接收、送往該分布式、相干存儲器的輸入/輸出事務(wù)請求。
25.如權(quán)利要求24所述的計算機系統(tǒng),其特征在于該預(yù)取引擎響應(yīng)于保存在輸入/輸出事務(wù)請求緩沖器中的事務(wù)請求,而不考慮該事務(wù)請求被存儲的次序,預(yù)取數(shù)據(jù)。
26.如權(quán)利要求24所述的計算機系統(tǒng),其特征在于該輸入/輸出橋接器進(jìn)一步包含一個退出引擎,為對應(yīng)于要被退出的一個事務(wù)請求的有效數(shù)據(jù)進(jìn)一步檢查輸入輸出相干高速緩存緩沖器,該退出引擎以程序次序退出保存在輸入/輸出事務(wù)請求緩存器中的事務(wù)請求。
全文摘要
一種用于在一個分布式存儲器、高速緩存相干、多處理器系統(tǒng)中把有序的輸入/輸出事務(wù)流水線處理到相干存儲器的方法。一個預(yù)取引擎響應(yīng)于一個來自一條輸入/輸出總線、送往一個分布式、相干存儲器的事務(wù)從該分布式、相干存儲器中預(yù)取數(shù)據(jù)。一個輸入/輸出相干高速緩存緩沖器接收該預(yù)取的數(shù)據(jù)并且保持和該分布式相干存儲器以及在該系統(tǒng)中的其它高速緩存代理相干。
文檔編號G06F12/08GK1470019SQ01817309
公開日2004年1月21日 申請日期2001年8月14日 優(yōu)先權(quán)日2000年8月21日
發(fā)明者K·克雷塔, L·羅伊, A·庫馬, M·哈雷, K 克雷塔 申請人:英特爾公司