在多核系統或復雜SoC(System on Chip)中,不同處理器核心或IP(Intellectual Property)模塊之間需要保持數據的一致性。常用的是ACE協議or CHI。? 先對ACE協議進行學習
ACE協議(Advanced Microcontroller Bus Architecture Coherency Extension)是一種高級的緩存一致性協議,它允許系統中的主組件(如處理器或其他設備)判斷緩存行是否是某個特定內存位置的唯一副本,或者是否可能存在其他副本。根據這些信息,主組件可以相應地采取不同的操作來維護數據的一致性。
①檢查緩存行的唯一性:當主組件想要修改一個緩存行時,ACE協議首先通過監聽機制來檢查該緩存行是否是系統中的唯一副本。主組件的監聽過濾器會與其他緩存進行通信,以確定緩存行是唯一的還是共享的。
②修改唯一緩存行:如果確定緩存行是唯一的(Unique狀態,包括UniqueClean和UniqueDirty),主組件可以直接修改緩存行的值,而無需通知系統中的其他主組件。這是因為沒有其他副本需要更新或失效。
③修改共享緩存行:如果緩存行可能也存在于另一個緩存中(Shared狀態,包括SharedClean和SharedDirty),主組件必須啟動一個適當的事務來通知其他緩存。這通常涉及到發送一個緩存一致性請求到其他緩存,要求它們更新或失效對應的緩存行,以確保系統中所有緩存的數據保持一致。
通過這種方式,ACE協議確保了在多個主組件訪問共享數據時,數據的一致性和正確性得到維護。這對于多核處理器系統、SoC(System on Chip)或其他需要緊密協作的多主設備環境尤為重要。
1. cacheline狀態
valid: 該cacheline在cache中存在
invalid:該cacheline在cache中不存在,對該cacheline的訪問需要去主存中或者其他cache中
unique:該cacheline只在這一個cache中存在,因為core可以隨意對它進行操作而無需擔心一致性問題(因為在其他cache中就不存在)
shared:該cacheline存在于一個或多個cache中,當cacheline處于shared狀態下時,core對它進行修改時需要確保其他cache中狀態得到適當的更新,以維護數據的一致性。
clean:表示緩存中的數據與主內存中的數據是一致的。緩存不承擔更新主內存的責任。在這種情況下,如果主組件讀取緩存行,它可以直接使用緩存中的數據,而不需要從主內存中重新獲取。(這個說法不太嚴謹,clean不一定代表緩存中的數據與主內存一致,比如shared clean,只是不需要承擔更新主存的責任而已~)
dirty:表示緩存中的數據已經被修改,與主內存中的數據不一致。擁有臟緩存行的主組件必須確保最終將更新后的數據寫回到主內存中,以保持數據的一致性。
當一個core想要寫入一個cacheline時,它首先需要檢查該cacheline的狀態。如果是unique dirty的cachelie,那么可以直接進行寫操作。但如果是shared dirty的cacheline,core則需要通過發送一致性請求來通知其他cache,確保它們能夠更新或invalid對應的緩存行。這樣的機制有助于避免數據沖突,并確保所有處理器都能訪問到最新和一致的數據。
2. cacheline狀態轉換規則
①獲取新副本時必須通知其他cache
當一個cache獲取一個cacheline的新副本時,其他擁有該cacheline的cache必須被通知,即使這些cache當前可能將該cacheline作為唯一狀態持有,它們也必須被通知將其更改為共享狀態!!
②丟棄副本時無需通知其他cache
當一個cache準備丟棄一個cacheline時,不需要通知其他也擁有相同cacheline的cache,所以一個是shared狀態的cacheline可能實際上只被一個cache所擁有!!
③相對于主內存更新
相對于主內存更新的cacheline必須處于dirty狀態,需要最終將更改寫回主內存
④多個緩存中的更新緩存行
如果一個相對于主內存已經被更新的緩存行存在于多個緩存中,那么它必須只在其中一個緩存中處于臟狀態。這意味著雖然多個緩存可能擁有該緩存行的副本,但只有一個緩存負責維護最新的數據,并確保最終與主內存同步。
3.?通道信號增加:
ACE協議在現有的AXI4通道的基礎上進行了擴展,并定義了專門的ACE通道以及確認信號,以支持復雜的緩存一致性操作。以下是ACE協議中定義的通道和信號的概述:
ACE協議在現有的AXI4通道上增加了一些新的信號,以支持緩存一致性操作。這些信號包括:
讀取地址通道(Read Address Channel):
ARDOMAIN[1:0]:由主設備提供,用于指示讀取事務的共享屬性。
ARSNOOP[3:0]:由主設備提供,用于指定讀取事務的監聽類型。
ARBAR[1:0]:由主設備提供,用于指示讀取事務是否需要遵守內存屏障(memory barrier)
寫入地址通道(Write Address Channel):
AWDOMAIN[1:0]:由主設備提供,用于指示寫入事務的共享屬性。
AWSNOOP[2:0]:由主設備提供,用于指定寫入事務的監聽類型。
AWBAR[1:0]:由主設備提供,用于指示寫入事務是否需要遵守內存屏障(memory barrier)。
AWUNIQUE:此信號僅由支持WriteEvict事務的組件所需。WriteEvict事務用于從緩存中逐出數據,而無需寫回主內存。
4. ACE特定通道
ACE協議定義的這三個額外通道是為了增強緩存一致性管理和優化多處理器系統中的數據交互。下面是對這三個通道的詳細解釋:
監聽地址通道(AC channel):它提供了snoop transactions的地址和相關的控制信息。
通過這個通道,緩存主設備可以接收來自系統總線或其他緩存的監聽請求,并根據請求中的地址信息確定是否擁有對應的緩存行。
監聽響應通道(CR channel):它提供了對snoop transaction的響應。
監聽數據通道(CD channel):這是一個可選的輸出通道,用于從主設備傳遞監聽數據。
當發生讀或清理監聽事務時,如果被監聽的主設備擁有請求的數據副本,那么這個通道就會被用來返回這些數據。
5.確認信號(Acknowledge signaling)
ACE協議使用確認信號來表示一個事務已經被成功接收和處理。這些信號包括:
讀確認信號(Read Acknowledge Signal) - RACK:
當主設備完成一次讀事務時,它會發出RACK信號。這個信號表明讀操作已經成功完成,并且數據已經從緩存或其他存儲介質中讀取出來,準備供請求者使用。RACK信號通常在最后一個數據拍(beat)之后發出,以指示整個讀操作的結束。
寫確認信號(Write Acknowledge Signal) - WACK:
在完成寫事務時,主設備會發出WACK信號。這個信號表明寫入操作已經成功完成,并且數據已經被寫入到指定的緩存行或存儲位置中。與RACK類似,WACK信號也通常在最后一個數據拍之后發出,確認寫操作的完成。