ACE-CacheCoherent


參考博文:https://www.cnblogs.com/-9-8/p/6128413.html

ACE 基礎

  

1):5狀態的cache model(MOSEI)

2):關於coherency的additional signal

3):兩個cache master訪問shared cache的additional channel

4):支持Barrier transaction來保證transaction order

ACE推薦的最小的cache line的大小:min-------16B或者width of data bus,max----2048byte或者Burst 16的最大data bus 

Cache Coherent的控制有兩種方式,一種是SCU式集中的控制,另一種是ACE bus distribute的分散式的

Coherency model

每個master本地都有一個cache,通過cache interconnect連接到main memory

當store命令發生時,保證所有的cache中只有一個copy的cache存在。

store操作之后,允許一份cache有多個copy的對象。

在更新main memory時,也允許copy的cache存在,但是不推薦這樣做。

ACE bus可以實現cache copy是否唯一性的判斷,如果cache copy唯一,cache的修改都不需要notify其他的cache master;如果cache copy不唯一,cache的修改必須通過合適的transaction notify其他的cache master

Cache state model

以cache line為單位,可以分為:

Valid/Invalid:數據在當前cache中是否有效。

Unique/Shared:當前的cache line是否具有唯一性。

Clean/Dirty:clean不需要更新main memory,dirty需要更新main memory

當一個cache master得到一個新的copy cache line,其他的cache master可能也有一份該cache line的copy並且處於Unique狀態,

此時必須notify其他的cache master將cache line的狀態改為Shared

當一個cache master discard一個cache line時,不需要notify 其他的cache master,所以處於Shared State的cache line也可能是Unique狀態的。

當一個cache line相對於main memory被更新,且有多個copy時,必須只有一個cache中處於Dirty state

 

ACE相對於AXI4多的信號

Read address:ARDOMAIN[1:0]/ARSNOOP[3:0]/ARBAR[1:0]

                     domain信號表示:00---Non-Shareable,01---Inner Shareable,10---Outer Shareable,11---system

                     AxCACHE中的cache比特為0時,只能用11 level

                     AXCACHE中的[3:2]不為零時,不能用11 level

                     BAR信號表示:00---Normal access(respecting barrier),01---Memory barrier,10---Normal access(ignoring barrier),11---Synchronization barrier

                     Snoop信號表示:Non-snooping/Coherent/Memory update/Cache maintenance/Barrier這幾種transaction

                     

Write address:AWDOMAIN[1:0]/AWSNOOP[2:0]/AWBAR[1:0]/AWUNIQUE

                     

               AWUNIQUE信號,主要用在lower level的cache hierarchy操作中,像L3 cache。(支持WriteEvict操作的transaction才需要該信號)

               

Read data:RRESP[3:2]

                    RRESP[2]:PassDirty,從interconnect來,HIGH表示,initial master必須保證該cache line需要重新寫回main memo; Low表示,initial master沒有這樣的reponsibility

                    RRESP[3]:IsShared,從interconnect來,HIGH表示,另外還有copy,該cache line必須在Shared state; Low表示,沒有其他的copy,該Cache line處於Unique state

在write data和write resp中沒有增加信號。

 

ACE新增加的channel:

snoop address channel:針對snoop transaction,為cache master提供address和控制信號。

         ACVALID/ACREADY

         ACADDR/ACSNOOP[3:0]

         ACPROT[2:0]

snoop response channel:針對snoop transaction,提供response。

         CRVALID/CRREADY

         CRRESP[4:0]

snoop data channel:可有可無的信號,一般用在一個read clean cache的操作,返回cache中的數據。

         CDVALID/CDREADY

         CDDATA/CDLAST

 

從Shared location進行load操作

1):master component在read address發出一個read transaction

2):interconnect通過snoop transaction確定是否有其他的master hold copy,發出snoop address

3):snoop resp/snoop data傳到interconnect,interconnect將數據傳給initial master,或者interconnect發出一個到main memory的transaction,正常的read address得到數據,傳遞給initial master

4):master檢測到RACK信號,表示transaction結束 

如果其他的master中的是一個dirty的cache,那么在將數據傳遞給intial master的同時,interconnect也必須更新main memory     

 

從Shared location進行store操作當一個master進行store的操作時,會移除所有copy的cache line,來保證發生store操作時,只有一個unique的copy,新的數據只能在master接下來又發出read操作時,才能讀到cache line中。

store部分cache line中的數據:(必須先得到cache line的一份copy)

1):initial master在read address發出一個ReadUnique的命令,來將其他master的copy都移除。

2):interconnect通過snoop address channel將transaction傳遞給其他的cache

3):其他的cache master通過snoop response channel和snoop data channel將數據傳遞給interconnect

4):interconnect將數據數據和resp通過read data channel傳遞給initial master

      如果其他的cache line中沒有copy,則從main memory中讀取。

5):intial master發出store命令,通過RACK來表示transaction的結束。

如果本身的cache line是一個Unique的,那么不需要對其他cache進行broadcase

store完整的cache line中的數據:(cache本身是)

1):在read address發出一個MakeUnique的命令,來移除其他cache中的cache line

2):interconnect通過snoop address channel將transaction傳遞給其他的cache,

3):interconnect將其他master的resp返回給initial master,snoop data channel不需要。

4):initial master進行store操作

store操作的cache line是shared的:

1):initial master在read address channel發出CleanUnique的transaction,移除其他cache line中的copy或者dirty copy寫入main memory。

      此時不會返回cache line的數據到initial master

2):interconnect通過snoop address將transaction傳遞給其他的cache,Snoop master返回resp

      其他的cache line已經被移除。

      a dirty cache line已經寫入main memory

3):interconnect將resp通過read data channel傳遞給initial master

4):master發出store操作

Overlapping store 操作:

如果兩個master同時對一個shared location發出store操作,由interconnect決定order

 

ACE中支持的各種transaction:

1):Non-snooping transaction,不會引起snoop transaction,訪問的地址可以是Non-shareable/Device

       具體可以分為ReadNoSnoop和WriteNoSnoop

2):Coherency transactions,來訪問shareable address location

load:

   ReadClean,只接受read clean cache,如果master沒有接受dirty cache的能力時使用。

        ReadNotSharedDirty,只接受clean(unique/shared),unique dirty的cache

        ReadShared,接受任何類型cache

當cache為一個dirty cache line時,interconnect負責將dirty line寫入main memory

如果初始的cache line是一個Unique state,copy之后,需要將狀態修改為Shared state

建議,使用snoop channel中的rdata,將數據傳遞給initial master

store:

  ReadUnique,在partial cache line的store操作中,沒有copy的cache line存在,獲得cache line的copy,並且沒有copy存在

       CleanUnique,在partial cache line的store操作中,有copy的cache line存在,獲得cache line的copy,並將dirty cache寫入main memory,沒有copy cache line存在。

       MakeUnique,進行full cache line的store,invalid其他的copy的cache line

訪問Shared location但是no cache copy require

        ReadOnce,得到一份cache copy但是原Unique cache不需要從Unique變為Shared

        WriteUnique, 在write transaction之前移除所有的cache copy,在該命令之前必須保證dirty data已經都被寫入memory

        WriteLineUnique,只能寫入full cache line,其他與WriteUnique相同

3):Memory update transaction

       WriteBack,write a dirty line到main memory中,來free一個cache line

       WriteCLean,將dirty line寫入到main memory中,同時保存一個cache line copy

       WriteEvict,將cache line寫入一個lower level的cache中,不要求寫入main memory,並free一個cache line

       Evict,不寫任何東西到main memory中, 並free一個cache line

  這四種操作,並不會要求有snoop transaction的操作。

4):Cache maintenance transactions,master通過對系統中cache component的broadcast訪問,控制cache maintenance,稱為software cache maintenance

      CleanShared,如果有dirty cache line,在接收到該transaction之后,寫入main memory,並保存cache line的copy

      CleanInvalid,如果有dirty cache line,在接收到該transaction之后,寫入main memory,所有的copy cache line都被移除。

      MakeInvalid,所有的copy cache line被移除,dirty cache line也不會被寫入main memory

5):Snoop Transaction,通過snoop的三個channel來進行操作,是coherency和maintenance transaction的子集。

6):Barrier Transaction,保證系統中的order和observation transaction

       memory barrier,domain中的另一個master能夠觀察到所有的transaction

       synchronization barrier,在該barrier transaction之前所有的transaction都必須被某個domain內的master觀察到,甚至到達slave之后,該barrier才能結束。

     

 

Trasnaction的處理過程:

1):intial master發起一個transaction

2):根據address decode直接到slave(不需要coherency支持),

      或交給interconnect中的coherency支持模塊(需要coherency支持)。

3):coherency transaction與其他master的transaction的順序控制,order

4):interconnect發出snoop transaction

5):每個cache master收到snoop transaction,並提供resp,甚至data

6):interconnect決定是否需要進行main memory access

7):interconenct得到resp和data

8):initial master完成transaction

 

ACE中新增加的術語:

1):Domain,進行coherency/barrier操作時的master的集合。domain的定義是non-overlapping的。ACE定義了四種level的shareability domain:

  Non-shareable:包含一個master component

  Inner Shareable:包含額外的master component

  Outer Shareable:包含所有的Inner domain外,還包含master component

  System:包含系統中所有的master component  

  

  

2):barrier,包含一個address phase和一個resp,但是並沒有data transfer。

       master component必須在read address/write address發出一個barrier transaction。

 

軟件中的memory fence功能,主要是當前cpu的架構都是core內亂序執行,前后兩條指令並不完全是前后完成的。

  如果某些場合需要,前后的串行執行,就需要memory fence的功能;cpu core的亂序執行對單線程的處理,不會有問題,但是多線程的並發執行模型,就會有問題。

  

  如果flag先於*a = (int)rand()執行,那么consume的執行就會出錯。

  violate表示每次flag的值,都會被更新到主memory中。但是這不能阻止memory coherence的產生。

 

對於coherency transaction load操作,data來源:

  1) 可以從其他cache master的cache line拿到,

  2) 由interconnect中的buffer直接返回,或者interconnect發出的ReadNoSnoop transaction返回數據。

對於coherency transaction store操作,要求master:

  1) 該數據所在的cache line的狀態是unique;

  2) 指定的transaction type,來保證第一點。 

ACE所支持的coherency的協議是MOESI,也可以向下兼容MEI,MESI等,有的cpu處理器不支持SharedDirty(Owned)。

 

Axaddr channel增加的信號:

AxBar[1:0], 01------Memory Barrier,對DMB指令的翻譯。

      10-------Sync Barrier,對DSB指令的翻譯。

Axdomain[1:0],對於coherent trans,該信號,來指定snoop filter尋找cache copy的范圍

      inner-shareable一般是同一個cpu cluster之間的cache coherent查詢

      outer-shareable一般是所有的支持coherent的master,兩個cpu cluster之間的cache coherent查詢(如果只有一個outer-shareable domain)

      system,包括所有的master,但是對coherent的查詢,與outer-shareable相同

              對於barrier trans,該信號,來決定barrier trans,經過interconnect需要propagate的范圍,指定observer。

      inner-shareable,表示該domain的所有master到interconnect的slave port都需要observe。

      outer-shareable,表示所有cache-master到interconnect的slave port都需要observe。(如果只有一個outer-shareable domain)。

  由於目前都是cpu cluster內一個interconnect,鎖哥cpu cluster之間還有一個interconnect。所以inner-shareable是cluster內部的trans,outer-shareable包括所有的cache master。

Axsnoop[3:0],指定snoop trans的類型。

  

RESP channel增加的信號:

   RRESP[2],PassDirty,表示需要initial master來寫入main memory,當前的master的cache line必須是Dirty state。

   RRESP[3],IsShared,值為1,表示當前master的cache line的狀態必須是在Shared state。

               值為0,表示當前master的cache line的狀態可以在unique state.

  這兩bit,在所有的rdata beat中都必須保持相同。

 

針對unique類的操作和cache maintainance的操作,IsShared為0。

   ReadUnique,CleanUnique,MakeUnique。CleanInvalid,MakeInvalid.

針對read類操作,unique類操作,cache maintainance的操作,PassDirty為0。

   ReadOnce,ReadClean。CleanUnique,MakeUnique。CleanShared,CleanInvalid,MakeInvalid。

不是coherent類型的操作,NoSnoop,Barrier,DVM,這倆bit必須為0。ReadClean,ReadNotSharedDirty,ReadShared,返回的PassDirty,Isshared,可以根據情況toggle。

 

Read Ack signal:在RLAST之后,由master發出,表示該筆coherency 操作已經結束。

Write Resp signal,沒有變化。

Write Ack signal:在Bvalid和Bready之后,由master發出。

 

1----coherency transaction:

coherency transaction可以分為幾個transaction group:

1) NoSnoop----------Write/Read

2) Coherent----------Write/Read

Read,分為兩大類,ReadOnce(No alloc),ReadShared / ReadClean / ReadNotSharedDirty(alloc)

Unique類的trans,ReadUnique(PE沒有該cache line,partial cache line store),CleanUnique(PE有該cache line,partial),MakeUnique(full cache line)。

Write,WriteUnique(partial store),WriteLineUnique(full cache store)

 

3) cache mantenance--------Read,Clean類型的trans,CleanShared,CleanInvalid,MakeInvalidcache clean,表示將dirty cache data寫入main memory;

cache invalid,表示將cache copy,invalid掉,之后的讀寫只能從main memory來拿數據。

 

4) Barrier-------------Write/Read,

 

5) Memory update-------Write,WriteClean(alloc),WriteBack(No alloc),WriteEvict,都是no snoop的trans

 

對於read類型的snoop操作,主要是區分是否alloc,可以讀取何種類型的cache line來區分。

對於write類型的snoop操作,主要分為unique類型的trans和write coherent類型的trans。

  1) unique類型的trans,只是將該master下的cache line state置為UniqueDirty,使之滿足store的條件。之后會通過memory update操作來更新memory

  ReadUnique,CleanUnique,MakeUnique,只是invalid其他master中的cache line。這個過程可以由cache master實現,也可以由interconnect來實現。

  2) Write coherent類型的trans,相當於執行了CleanUnique以及WriteBack等操作。WriteUnique = ReadUnique+writeBack。

 

各個操作過程中對initial master和其他cache master的影響

memory update類型的前后cache state變化:

  WriteBack,state從Dirty-------Invalid;

  WriteClean,state從Dirty--------Clean;

 

cache maintanance前后的cache state變化:

  CleanShared,initial master的state不變,其他master中的該cache變為invalid或者clean

     CleanInvalid,initial master的state不變,其他master中的該cache變為invalid。一般initial master的state也是invalid

  MakeInvalid,initial master的state不變,其他master中的該cache變為invalid。dirty不會更新main memory

 

Read類型的snoop trans:

  ReadClean,ReadNotShareDirty,ReadShared,initial master的state一般是invalid----UC/UD/SC等。具體的state變化,主要看其他master的處理,interconnect的處理,以及interconnect返回給initial master的resp

  ReadOnce,initial master的state一般是invalid------invalid,一般是intiial master本身沒有cache,拿過來之后也不會alloc新的cache

 

Unique類型的snoop trans:

   ReadUnique,initial state一般從Invalid------UC/UD,其他master的該cache line變為invalid、

   CleanUnique,initial state一般從SC/SD------UC/UD,其他master的該cache line變為invalid、  這兩種unique,通常與partitial store配合使用

   MakeUnique,總是與full cache line store一起使用。兩個操作之后,initial state一般從Invalid/SC/CD------UD,其他master的該cache line變為invalid、

 

Write類型的snoop trans:

  WriteUnique,initial master的state從Invalid/UC/SC-----Invalid/SC/SC,其他cache master中的cache line的state變為invalid。在收到transaction的resp之后,cache line中的值必須變為新的值。進行partitial的store

  WriteLineUnique,initial master的state從invalid/UC/SC------Invalid/SC/SC,其他cache master中的cache line的state變為invalid。在收到transaction的resp之后,cache line中的值必須變為新的值,進行full cache line store

 

no snoop的操作:

  WriteBack,UD/SD-------Invalid。

  WriteClean,UD/SD---------UC/SC,這兩個操作都是在cache line已經dirty的情況下做的操作。

  WriteEvict,UC/UD--------Invalid,只有在支持snoop filter的cache master中才支持。       

  ReadNoSnoop/WriteNoSnoop,表示更新一段non-shareable的main memory,cache state,可以是Invalid/UC/UD-------Invalid/UC/UD 

 

2----snoop transaction:針對shareable-cacheable-memory屬性的memory訪問。

snoop transaction是指從interconnect到cache master的一組transaction的統稱:cache master包括(擁有cache或者支持做DVM的master)

address channel:

  interconnect的輸出信號有:ACVALID,ACADDR,ACSNOOP,ACPROT。

  cache master的輸出信號有:ACREADY。

address channel中並沒有size,length,id這些信號。因為snoop transaction的size與CDDATA size相同。

  一個snoop的length必須是一個cache line的大小。最后一個beat的數據通過last來表征。

ACPROT[1]信號用來表征secure,non_secure world,cache coherent是區分secure與non_secure world

ACSNOOP信號的值,從coherency transaction到snoop transaction也有約束:

1),首先不支持no-snoop的trans,如ReadNoSnoop,WriteNoSnoop,WriteBack,WriteClean,Evict,是不會進行snoop的

2),WriteUnique,被映射為其他cache master的CleanInvalid。(推薦)

  WriteLineUnique,被映射為其他cache master的MakeInvalid。(推薦)

  MakeUnique,被映射為其他cache master的MakeInvalid。(推薦)

  CleanUnique,被映射為其他cache master的CleanInvalid。(推薦)

3),像ReadOnce,WriteUnique的操作,interconnect需要內部將不是cache line size的操作進行轉換組裝。

 

snoop resp channel:

  interconnect的輸出信號,CRREADY。

  Master的輸出信號,CRRESP,CRVALID。

 

CRRESP,共有5bit:

  [0]:是否傳輸data,一般的原則是

    1:Read snoop trans,必須傳輸data,ReadOnce,ReadClean,ReadNotShareDirty,ReadShared,ReadUnique.

    2:對於一些非read操作,如果cache 為dirty,傳輸data。cache state為clean時,可傳可不傳。

  [1]:Error bit,表征當前cache master內部的cache line數據是錯誤的。

  [2]:PassDirty bit,除了MakeInvalid,所有cache state為dirty的cache master都必須在resp中將該位置1:表征,寫入main memory必須由interconnect或者RN cache master來完成

    ReadNotSharedDirty,ReadShared,ReadUnique,寫入main memory可以傳給RN cache master。

    ReadClean,必須由interconnect來完成寫入main memory。

    其他的snoop trans,可以implement defined。

  [3]:is shared bit,表示RN cache master獲得一個cache line的copy

  [4]:is unique bit,表示cache line在snoop訪問之前的state是unique狀態

 

snoop data channel:

  interconnect的輸出信號,CDREADY。

  cache master的輸出信號,CDVALID,CDDATA,CDLAST。

  CDDATA不支持byte strobe的功能,只能由interconnect返回需要的正確的data個數。

snoop channel中的ready和valid的依賴關系與AXI中的相同。

 

arm建議的coherency transaction到snoop transaction的mapping 關系:

  

一個coherency transaction可以被mapping為多種snoop trans(如ReadUnique),但是還是建議,保留多種,這樣簡便master處理。

 

3-----snoop transaction於coherency transaction之間的關系:

1) non-blocking,同一個master在自己的coherency trans和interconnect發過來的snoop trans之間的前后關系:

  1, master必須完成所有的snoop trans,在AR channel的操作和AWchannel的WriteUnqiue,WriteLineUnique,之前

  2. 在完成port上的snoop trans之前,master可以在等待WriteNoSnoop,WriteBack,WriteClean,Evict等操作。不能等aw channel的WriteUnique,WriteLineUnique完成。

       總結起來,AR channel的trans可以等AC channel的trans,AC channel的trans可以等AW channel的trans(除了寫Unique)

      

2) overlapping write在一個shareable memory中,兩個master同時相同一個cache line進行store操作

  由interconnect來保證Write操作的sequence order。

  WriteUnique,WriteLineUnique,一般都用在master是non-cache的情況下,如果用在cache master中,必須保證此時可以處理所有的snoop transaction。而且,WriteBack,WriteClean,必須和WriteUnique,WriteLineUnique完全隔離開來,一組完成之后,另一組才可以開始執行。

  WriteClean,WriteBack,過程中收到snoop trans,會掛住該snoop,直到自己的trans結束,snoop response必須PassDirty deassert,IsShared assert。主要涉及的三個snoop transaction是ReadUnique,CleanInvalid,MakeInvalid

  

  當前發出snoop trans,但仍未完成的master稱為Master2,由interconnect發到Master2的snoop trans的發送者,稱為Master1。

  Master2,發出ReadUnique,Master1經Interconnect發出的是三個中的任何一個:

    在自己的snoop port收到snoop trans的Master2,必須先完成該snoop trans;自己有cache copy必須invalid。之后interconnect將最新的data返回給Master2,Master2完成自己的partitial/full store。   

  Master2,發出MakeUnique,Master1經Interconnect發出的是三個中的任何一個:

    在自己的snoop port收到snoop trans的Master2,必須先完成該snoop trans;自己有cache copy必須invalid。

    之后interconnect將最新的data返回給Master2,Master2完成自己的partitial store。

  Master2,發出CleanUnique,Master1經Interconnect發出的是三個中的任何一個:

    在自己的snoop port收到snoop trans的Master2,必須先完成該snoop trans;自己有cache copy必須invalid。

    之后interconnect返回resp(unique操作並沒有完成,因為Master2本身沒有alloc 該cache line),

  Master2重新發送ReadUnique,之后Master2完成自己的full cache line store

 

4------CCI的interconnect的幾部分主要工作:

1) sequenceing自己收到的coherency trans和snoop trans,

  每個cache master可以發送多個outstanding req,並同時接受多個snoop transaction,其中對於同一個cache line的順序由interconnect決定,arb method需要自己實現。

  其中arm 規定的rule:

  1. master發出coherent trans但是還沒有收到resp,此時收到針對該cache line的snoop trans的訪問,snoop trans規定為ordered first

  2. master發出coherent trans並且已經收到resp,之后在收到該line的snoop trans,coherent trans規定為ordered first。

       對於同一個cache line,coherent trans必須等到ACK信號給出之后,interconnect才能發snoop trans。snoop trans必須等到CRRESP信號給出之后,interconnect才能給coherent trans的resp。

 

2) 自己根據initial master的trans,發送snoop trans,並正確返回resp給initial master。

  interconnect發出snoop trans,是根據自己內部的directory,加coherent trans的類型來定義自己發出的snoop trans類型和個數。多個snoop trans之間一般是順序的。

  1. ReadNoSnoop,WriteNoSnoop,WriteBack,WriteClean,Evict是不會讓interconnect發出snoop trans的。

  2. ReadOnce,ReadClean,ReadNotSharedDirty,ReadShared對directory中有cache copy的master發送snoop trans

             (1) 有一個master的CRRESP返回CRRESP[4],wasunique,則所有master的snoop trans結束

        (2) 拿到一個cache copy。

        (3) 所有的cache copy被遍歷。

  3. Unique trans, cache maintance, Write trans對directory中有cache copy的master發送snoop trans

    (1) 有一個master返回CRRESP[4],wasunique,則所有master的snoop trans結束。

    (2) 所有的cache copy被遍歷。

     (3) 針對CleanShared trans,如果CRRESP[2]返回PassDirty,所有master的snoop trans結束

 針對Unique和cache maintance的trans,如果CRRESP返回PassDirty,interconnect對其他的cache master可以發送MakeInvalid snoop trans

    

interconnect回給initial master的resp:

ARchannel的IsShared

  1. snoop trans的IsShared置位,一般給initial master的IsShared 置位。

  2. 如果snoop trans的Data Transfer assert,一般給initial master的IsShared不會置位。

  3. snoop trans的WasUnique被置位,1不滿足的情況下,IsShared不會置位。

ARchannel的PassDirty

  1. 置位的coherent trans,主要是ReadNotSharedDirty,ReadShared,ReadUNique。

 如果snoop trans的CRRESP中的PassDirty置位,則需要interconnent更新main memory或者返回PassDirty給initial master

 

3) interconnect跟main memory之間的讀寫:

  Read:在Read coherent trans在shared cache master中沒有找到data的情況下,interconnect需要發出main memory read。

               main memory read可以等所有的snoop trans完成之后在發出,也可以與snoop trans一起發出

               如果read trans在snoop trans沒完成之前就發出:1. snoop trans給出data,main memory中的數據丟棄。

       對同一地址cache line的read和WriteBack,WriteClean的coherent trans必須是有序的。

  Writeinterconnect必須保證所有的寫操作都是有序的,無論cache line是否重疊。通過返回PassDirty的順序來控制。

    1. 對於partitial cache line write,如果snoop trans返回dirty data,需要interconnect進行merge。

    2. 對於ReadOnce/Clean/Shared/NotSharedDirty CleanUnique/Shared/Invalid,需要interconnect自己進行main memory更新。

    如果interconnect沒有收到PassDirty的CRRESP,一定不可以寫main memory。arm建議interconnect盡量不進行write操作,盡量傳遞PassDirty。

4) interconnect還需要實現對不同cache line size的轉換。

 

5------cache maintenance trans的應用:

只有在所有outstanding trans都結束之后,才能發送cache maintenance trans,而且還有兩點state要求

 1. 對於CleanShared,CleanInvalid,在發出trans之前,該cache line的狀態必須是clean的

  如果dirty,必須先發WriteBack,WriteClean操作。在兩個操作之前,需要發Unique trans。

 2. 對於CleanInvalid,MakeInvalid,在發出trans之前,該cache line的狀態必須是invalid的

 

cache maintenance trans一般穿插在coherent domain和non-coherent agents access之間。

因為coherent與non-coherent的交織,可能導致cache中的新的數據,non-coherent的agent讀不到

這樣的訪問的sequence:

    

    non-coherent之前采用cache clean操作來更新main memory

    non-coherent之后采用cache invalid來使得之后的讀寫直接讀取main memory

 

6------Barrier trans的應用:

Barrier主要針對domain之間的memory-base communicate,可以分為Read Barrier,Write Barrier

 1. 任何address channel中比Barrier先issue的trans,都稱為Before Barrier trans(比某個address channel的Barrier先issue就可以)

  在Read Barrier,Write Barrier兩個resp之后issue的trans,都稱為After Barrier trans

  Barrier trans必須在兩個channel中都issue,沒有data傳輸,resp必須是0。

  2. AxBar信號,一共兩bit,低位表示區分memory Barrier,Sync Barrier。

             高位表示該trans是否受到Barrier trans的影響。

 3. AxDomain信號,區分inner shareable domain,outer shareable domain。

  一個system,一般包括domain boundariers和bi-section boundaries(不清楚不做介紹)。

  domain boundary是domain中的所有master公用的一個downstream的interface。即同一個inner domain中訪問一個地址,多個master也只能用這一個interface

  domain boundary與interconnect能返回barrier resp有關:memory barrier與non-system的Sync barrier,可以在domain boundary上或者更加downstrream的地方返回resp。

 

針對system的Sync barrier,必須等到end point才能返回resp。

    4. Barrier trans的resp,由interconnect返回,與system中interconnect的位置有關,interconnect的實現方式有:

   (1) interconnect block掉其他所有的trans,然后不斷向下發送Barrier trans,最后將所有barrier的resp merge在一起,之后,返回給initial master barrier resp,並去掉所有的block。

   (2) interconnect block掉所有的trans,並等待所有的trans,都返回resp之后,在給initial master返回Barrier resp,並移除block。

   (3) interconnect block掉所有的與Barrier地址有重疊部分的trans,之后給initial master提供barrier resp

  5. memory barrier,由dmb指令來實現,memory sync barrier,由dsb指令來實現,

   ARM中的ISB指令,並不直接映射到某一個bus trans中,只是將處理器流水線停掉,來保證之后的指令從cache或者memory中讀取。

  6. 發送barrier的master需要保證,barrier的id與其他正常trans的id不同,這樣方便區分返回的resp。

   Barrier trans發送出去,但是resp回來之前的trans,是不保證順序的,不受Barrier影響。這些trans都是當前domain之外的trans。

      

   由於Barrier trans發出之后,之后的trans就會被interconnect block住,所以當Read,Write有前后的約束的時候,必須最后才發相應的barrier。

   比如需要mmu進行table walk,那就不能在之前發Read barrier。否則總線會被鎖死

   對於有cache的master,如果load必須在barrier之后,則master不能發出coherent trans從Valid cache中讀取,必須等到barrier的resp。

               如果store必須在barrier之后,則master不能發出coherent trans向Unique cache中寫入,必須等到barrier的resp

 

7------Exclusive trans的應用:

用來實現多核之間的同步,類似於軟件實現mutex和semaphore。多核之間cache coherence可以保證一部分的多核同步,bus上根本不會出現exclude trans。

每個master內部實現一個local monitor來snoop其他master的exclude trans,保證一個core exclude load之后,另一個core不能exclude store

但是在存在non-cached master時,bus上會出現exclusive trans。通過interconnect上的PoS的monitor,來保證同一memory,對多個exclusive store trans的同步

 

Exclusive的實現都是通過Exclusive sequence的形式來實現的,先進行LDREX指令,在執行STREX指令。

  Exclusive Load,根據cache狀態來分:

  Invalid,必須通過ReadClean,ReadShared,先拿到cache中的數據,不能使用ReadUnique,ReadNotSharedDirty,這樣會invalid掉其他的cache中的數據。

  with ARLOCK asserted。

  SharedClean,Unique state,master的exclusive load可以不需要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM