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