在這篇文章中,我們將重點介紹基本的連貫交易測試。我們使用術語“基本”來表示在進行更高級測試之前作為先決條件的東西。相干事務是 AXI/ACE 協議中用于執行加載和存儲操作的一組事務。這些事務中的每一個都有一組與互連不同的響應要求。此外,這些事務中的每一個都可以在多個配置中使用。我們需要驗證互連對于每種事務類型是否正常工作。我們將首先概述該協議,然后再進行這些協議的測試策略。
ACE 協議概述
ACE 協議為系統級一致性提供了一個框架。它可以在跨緩存共享數據時保持正確性。它還支持最大限度地重用緩存數據。該協議旨在支持不同的一致性協議,如 MESI、ESI、MEI 和 MOESI(其中 M 代表修改,O 代表擁有,E 代表獨占,S 代表共享,I 代表無效)。ACE 協議是使用以下方法實現的:
一個五狀態緩存模型,用于定義相干系統中任何緩存行的狀態,如下圖所示:
定義的狀態為:
– 有效,無效:無效時,緩存行不存在。如果有效,緩存行將存在于緩存中。
– 唯一,共享:當唯一時,緩存行僅存在于一個緩存中。共享時,緩存行可能存在于多個緩存中。
– 干凈、臟污:干凈后,緩存不負責更新主內存。當臟時,緩存行已相對于主內存進行了修改,并且此緩存必須確保主內存最終更新。
現有 AXI4 通道上的附加信令,允許傳輸新的事務和信息。
附加通道(稱為偵聽通道)使互連能夠訪問存儲在與其連接的主服務器緩存中的信息。
我們將通過一個來自可共享位置的加載操作和存儲操作的示例來更清楚地說明 ACE 協議。
執行加載操作
考慮下面給出的系統,其中兩個主設備連接到互連。兩個主節點都有一個緩存。互連也連接到主存儲器。考慮主控 1 需要讀取存儲在變量 u 中的值的情況。還假設此值已存儲在主 2 的緩存中。以下序列用于檢索 u 的值:
主站 1 在讀取地址通道上發出讀取事務 (1)
互連在主站2的偵聽地址通道上發出偵聽事務(2)
主站 2 返回偵聽響應和數據信息 (3a)
如果主站2未返回數據,互連將從主存儲器(3b)讀取數據。請注意,即使在收到對 snoop 事務的響應之前,也允許互連從主內存讀取
一旦收到數據,它就會通過其讀取數據通道(1)返回到主4。
ReadClean、ReadNotSharedDirty 或 ReadShared 事務用于從可共享位置執行加載操作。當啟動主節點不想承擔更新內存的責任時,將使用 ReadClean 事務。當主服務器想要加載數據并且可以接受除 SharedDirty 狀態之外的任何狀態的緩存行時,將使用 ReadNotSharedDirty 轉換。當主節點想要加載數據并且可以接受處于任何狀態的緩存行時,將使用 ReadShared 事務。如果不需要緩存副本,則使用 ReadOnce 事務。ReadNoSnoop 用于從不可共享的位置讀取。
執行存儲操作
在上面的系統中,假設主控 1 想要向變量 u 寫入一個新值。以下序列用于將新值存儲到 Master1 的緩存中:
Master 1 發出一個事務,指示它想要存儲 u 的緩存行的唯一副本。這是通過發送MakeUnique交易(1)來完成的。
互連將偵聽事務發送到主 2 以使其緩存行無效。這是通過發送 MakeInvalid 事務 (2) 來完成的。
失效完成后,Master 2 將在其偵聽響應通道 (3) 上做出響應。
互連現在響應主節點 1,指示所有其他主節點使變量 u (4) 的緩存行存儲值無效。
主 1 現在將 U 的新值寫入其緩存中。此時,緩存行對于主控服務器 1 處于唯一狀態,而主控服務器 2 中不存在此高速緩存行。
根據是否需要完整緩存行存儲或部分緩存行存儲,以及主服務器是否已具有緩存行的副本,存儲操作將使用 MakeUnique、CleanUnique 或 ReadUnique 事務。如果正在存儲的主節點沒有緩存,但希望寫入可共享的內存位置,則使用 WriteUnique 或 WriteLineUnique 事務。WriteNoSnoop 事務用于寫入不可共享的位置。
ACE 中使用的其他交易記錄
內存更新事務,用于將臟線寫入內存。WriteBack 或 WriteClean 用于此目的。
逐出事務由主服務器發出,以指示要從其本地緩存中逐出的緩存行的地址。
緩存維護事務用于訪問和維護系統中其他主組件的緩存。CleanShared、CleanInvalid 或 MakeInvalid 事務用于此目的。
屏障事務用于提供有關系統中事務的排序和觀察的保證。這將在后續帖子中詳細討論。
分布式虛擬內存 (DVM) 事務用于虛擬內存系統維護。
基本一致性事務測試
如上所述,ACE 中使用了許多不同的事務來保持一致性。由于這些事務類型中的每一個都有不同的響應和一致性要求,因此最好單獨測試每個事務類型,以確保互連滿足所有規范要求。我們將以 ReadShared 事務為例來描述這些事務類型的一般驗證要求。
下面是規范中的表,顯示了 ReadShared 事務的緩存行狀態更改:
在上表中,“開始狀態”是指在發出事務之前主服務器中緩存行的狀態。RRESP 是指互連對發起事務的主站給出的響應。預期結束狀態是指事務完成后緩存行的狀態。最后兩列根據是否存在窺探過濾器引用了其他可能的最終狀態,我們將在本文中詳細介紹這些狀態。第二個表指的是推測性閱讀。這表示甚至在主服務器讀取緩存行的狀態之前發出的事務。基本上,如果讀取事務的緩存已經具有該地址的條目,則不需要將其發送出主服務器。但是,為了提高性能,主服務器可能會選擇在獲取有關緩存行狀態的信息之前發送事務。如果事務是在這種狀態下發出的,則在第二個表中表示。
從上表可以看出,單個交易的驗證空間相當大。需要注意的一個重要方面是,激勵需要來自多個主站的流量。這是因為要覆蓋的狀態空間要求測試所有不同的響應類型和緩存狀態。僅當主節點具有相對于彼此處于特定緩存行狀態的緩存行時,才能在系統中創建不同的響應類型。例如,響應類型 (RRESP) 為 10 表示緩存行由另一個主服務器共享,這要求緩存行存在于互連偵聽的主節點中。下圖總結了測試此序列的關鍵要求:
在啟動特定類型的事務之前,序列必須將系統初始化為隨機但有效的狀態。這可確保執行所有不同的響應類型和緩存行狀態。
初始化必須確保也遵守緩存狀態的規則。例如,緩存行只能在一個緩存中是唯一的或臟的。如果兩個主節點中存在緩存行,并且兩個緩存行都是干凈的,則它們的數據應該是相同的。同樣,如果某個位置的所有緩存行都是干凈的,則緩存行的內容必須與內存的內容匹配。
序列必須具有配置感知能力:它必須知道系統中的主節點數量、這些主節點的接口類型等。使序列具有配置感知性可確保序列在具有不同拓撲的系統中可移植。
關鍵驗證點
主緩存之間的一致性:在任何給定時間點,所有主緩存都必須具有相同的數據視圖。
主緩存和內存之間的一致性:如果所有緩存行都是干凈的,則緩存行的內容必須與內存的內容匹配。
窺探交易:由主站發起的每個事務都有一個相應的窺探交易,該事務將由互連啟動。我們需要確保互連發出的窺探交易是正確的。
偵聽和相干事務之間的數據完整性:如果 Snoop 事務返回數據,則必須將相同的數據返回給通過其讀取數據通道請求數據的主服務器。
排序事務:訪問同一位置的事務具有互連的特定排序要求。這將在本系列的下一篇文章中詳細討論。
在這篇文章中,我們描述了測試策略和連貫交易測試的關鍵方面。在下一篇文章中,我們將重點介紹與訪問重疊地址相關的規范的一些細節。
審核編輯:郭婷
-
服務器
+關注
關注
12文章
9124瀏覽量
85331 -
ACE
+關注
關注
0文章
21瀏覽量
10651 -
AXI
+關注
關注
1文章
127瀏覽量
16622
發布評論請先 登錄
相關推薦
評論