在這篇文章中,我將討論規范中與訪問重疊地址相關的一些細微差別。由于多個主站可能共享同一位置,并且數據可以分布在不同主站的緩存中,因此這是驗證相干系統的重要組成部分。互連在維護此類訪問的一致性方面起著非常重要的作用。
相對于對重疊事務的訪問,互連應注意三個關鍵方面。
對事務進行排序
窺探訪問的時間相對于對連貫事務的響應
如果從內存讀取的數據可能與所有相關 snoop 事務完成后讀取的數據不同,則從內存中“重新獲取”數據
對事務進行排序
請考慮以下示例:
在這里,主站 1 和主 2 希望寫入同一位置,并將其大致同時存儲在其本地緩存中。為此,主節點 1 和主節點 2 發送 MakeUnique 事務(如圖 1a 和 2a 表示)。讓我們暫時考慮一下互連不正確的行為模式的影響。假設互連發送主站 1 和主 2 MakeInvalid 偵聽事務(由 1b 和 2b 表示),分別對應于它從主站 2 和主 1 收到的 MakeUnique 事務。一旦主站響應 snoop 響應(由 1c 和 2c 表示),互連將響應發送回主站(由 1d 和 2d 表示)。當事務在主服務器 1 和主服務器 2 中完成時,兩個主服務器都會將緩存更新為唯一狀態。這違反了協議,因為緩存行只能由主節點保持唯一狀態。此外,每個主節點可能會在其本地緩存中存儲不同的值,而兩個主節點都錯誤地認為它們具有緩存行的唯一副本。顯然,未正確排序的影響是不連貫的,如圖所示,其中兩個主節點對數據有兩種不同的視圖。為了解決這個問題,規范要求對重疊地址的此類訪問進行排序。規范指出:
“互連有責任確保有一個定義的順序,可以發生到同一緩存行的事務,并且所有組件的定義順序都是相同的。如果兩個主站幾乎同時向同一緩存行發出事務,則互連將確定哪些事務首先排序,哪個事務最后排序。互連使用的仲裁方法未由協議定義。互連通過對事務響應和對主節點的偵聽事務進行排序來指示到同一緩存行的事務順序。排序規則如下:
? 如果主服務器向緩存行發出事務,并且在收到對其發出的事務的響應之前,它在同一緩存行接收偵聽事務,則偵聽事務定義為優先排序。
? 如果主服務器向緩存行發出事務,并且在收到到同一緩存行的偵聽事務之前收到對該事務的響應,則主服務器發出的事務被定義為優先排序。
在上面的例子中,讓我們假設互連優先于主站1。如果是這樣,它必須向主站1發送一個窺探事務(2b),等待窺探響應(1c)并將響應發送回主站1(1d)。在此序列結束時,主 1 的緩存行將處于唯一狀態,并可能在其緩存中寫入值。然后,互連可以對主站 2 進行排序,并可以將偵聽事務 (2b) 發送到主站 1,這將使主站 1 中的緩存行無效,等待偵聽響應 (2c) 并將響應發送回主站 2 (2d)。在此序列結束時,主 1 的緩存行無效,主 2 的緩存行將分配給唯一狀態。
Snoop 訪問的時間相對于對連貫事務的響應
該規范規定了對同一緩存行的一致性事務和偵聽事務的響應順序的一些規則。這些給出如下:
“互連必須確保以下幾點:
? 如果互連為主站提供對事務的響應,則在收到來自該主站的相關 RACK 或 WACK 響應之前,它不得將該主站發送偵聽事務到同一緩存行
? 如果互連將偵聽事務發送到主站,則在收到來自該主站的相關 CRRESP 響應之前,它不得向該主站提供對同一緩存行事務的響應。
與協議的這一方面相比,需要注意的重要一點是,此要求不適用于 WriteBack 和 WriteClean 事務,盡管規范中沒有明確說明。將上述規則應用于 WriteBack 和 WriteClean 事務可能會導致死鎖。這是因為允許接收到緩存行的偵聽事務的主服務器將其停止,直到它啟動或即將啟動到同一緩存行的任何掛起的寫回或 WriteClean 事務完成。換句話說,必須允許此主服務器接收對 WriteBack 或 WriteClean 事務的響應,然后才能允許傳入的窺探繼續(即響應它)。如果上述規則應用于 WriteBack 或 WriteClean 事務,則互連將無法向 WriteBack 或 WriteClean 事務發送響應,因為偵聽事務已發送到主服務器。因此,此規則不適用于寫回和寫清理事務非常重要。
從內存中重新獲取數據
在某些情況下,可能必須從內存中重新獲取數據。例如,假設主 1 發出 ReadShared 事務,而具有緩存行臟副本的主 2 發出寫回事務。假設互連發出從主內存讀取 ReadShared 事務。發送到主內存的讀取事務完成后,讓我們假設寫回有進展。在此之后,互連發送的任何窺探事務都不會返回數據,因為寫回會使主 2 中的緩存行無效。但是,如果互連使用先前讀取內存中接收的數據,則該互連將過時,因為 WriteBack 事務在發出讀取內存后更新了內存。因此,有必要從內存中重新獲取數據,并使用該數據來響應主 1。我們如何檢測與此相關的問題?這些可以通過一致性檢查來檢測。在上面的示例中,ReadShared 事務將傳遞干凈的數據,其內容應與內存的內容匹配。如果沒有,則可能意味著互連使用了過時的數據來響應 ReadShared 事務。
測試對重疊地址的訪問
測試與訪問重疊地址相關的所有方案可能會讓人不知所措。給定一個系統,有多個不同接口類型的端口可以將事務發送到重疊的地址。但是,并非所有訪問給定地址的主節點組合都有效,因為某些主節點可能只允許訪問某些地址空間,而一組主節點可能只訪問一組有限的地址空間,而這些主節點組形成一個可共享性域。除此之外,對于給定地址的緩存行,具有不同初始狀態的主節點可以啟動許多不同的事務類型。隨機化和配置感知序列的強大功能可以滿足這些要求。對此進行測試的序列可以執行以下操作:
根據用戶給出的可共享性域,在該域中隨機選擇兩個主節點
根據這些主節點的接口類型,為每個主節點選擇一個隨機交易類型
將緩存行初始化為一組地址的有效隨機狀態
同時從兩個主服務器發送交易
審核編輯:郭婷
-
測試
+關注
關注
8文章
5331瀏覽量
126758 -
服務器
+關注
關注
12文章
9233瀏覽量
85628 -
內存
+關注
關注
8文章
3034瀏覽量
74137
發布評論請先 登錄
相關推薦
評論