天天看點

CACHE的一些基本概念

Allocation

         在CACHE中發現一個位置,并把新的cache資料存到這個位置的過程。這個處理過程可能包括evicting(驅逐)cache中已存在的資料,進而為新的資料騰出空間。

Associativity

         指每個Set(集)裡包含的line frames(行幀)數。也就是cache的way(路)數。

Capacity miss容量失效

         因為cache的容量限制,導緻不能包括一個程式的整個working set(工作集),進而造成cache失效。這是三個cache失效原因(容量、強制、沖突)之一。

Clean幹淨

         一個有效的cache行,它的内容沒有被更高層記憶體或CPU修改寫過,我們稱這個cache行是“幹淨”的,顯然相反狀态是dirty(“髒”)

Coherence一緻性

         如果讀記憶體任意位址的資料傳回的總是這個位址的資料最近的更新,我們說記憶體系統是一緻的。存取指CPU和EDMA等的存取。

Compulsory miss強制失效

         有時稱為首次引用失效。強制失效是一種肯定發生的一種失效,因為資料事先從沒有使用過也就沒有機會被cache。但有些情況也被稱為強制失效,盡管它們不是第一被引用的資料,比如對非寫定位的cache進行同一位置的重複寫,以及對一個不被cache記憶體區域的存取。這是三個cache失效原因(容量、強制、沖突)之一。

Conflict miss 沖突失效

         由于Associativity的限制導緻的而非容量限制造成的cache失效。

Direct-mapped cache直接映射cache

         直接映射cache映射低層記憶體的每個位址到cache的一個單一位置。這樣低層記憶體的多個位址可能被映射到cache中的同一位置上。它相當于1-way set-associative cache。

Dirty髒

         對writeback回寫cache,寫到達多級存儲結構的某一層,并更新這一層内容,但并不更新更低層的記憶體,這樣,當一個cache行有效并包含更新後的資料,但卻不更新下一更低層的記憶體,我們說這個cache是“髒”的,顯然一個有效行的相反狀态是“幹淨”。

DMA直接記憶體存取

         直接記憶體存取,通常一個DMA操作copy一個記憶體塊從一個區域到另一個區域,或在外設和記憶體之間傳輸資料。對C64x DSP,DMA傳輸使用EDAM,這些DMA傳輸與程式執行是并行的。從cache一緻性角度,EDMA的存取可以看成是另外一個并行處理器。

Eviction驅逐

         從cache移出一個line進而為新的資料騰出空間的過程我們成為Eviction。Eviction可以由使用者發出的writeback-invalidate産生,被驅逐的line我們稱為victim line。當victim line是dirty(“髒”)的時候,資料必須回寫道下一級存儲器中以維持記憶體的一緻性。

Execute packet執行包

         在一個周期裡并行執行的一個指令塊,一個執行包可以包含1-8個指令。

Fetch packet取指包

         1個周期裡存取的包含8條指令的指令塊。顯然一個取指包可以包含多個執行包,這樣可能消耗多個周期。

First-reference miss首次引用失效

         是強制失效的一種形式。見強制失效。

Fully-associative cache全關聯cache

         任何記憶體位址都可以被存儲在cache的任何位置。這樣的cache非常靈活,但通常硬體上不可實作。這種cache同直接映射cache和集關聯cache形成鮮明對比,這兩種cache在定位政策方面都有更多的限制,全關聯cache隻具有概念上的意義,當分析直接映射cache和集相關cache性能時對區分沖突失效和容量失效是有用的,全關聯cache等價于這樣一個集關聯cache:它有line frame個way,僅有一個set。

Higher-level memory高層記憶體

在多級記憶體系統中,距離CPU較近的記憶體稱為高層記憶體。在C64x系統中,最高層記憶體通常是L1層CACHE,這一層的記憶體直接同CPU相連。較高層記憶體通常充當較低層記憶體的CACHE。

Hit命中

         當請求的記憶體位址的資料在cache中,我們說cache命中。命中的反義詞是miss(失效)。Cache的命中使cpu的阻塞時間最短,因為才cache中去資料要比從原始位置取更快。在某一層記憶體的“失效”可能在較低層“命中”。

Invalidate無效

         将一個有效的行标記為無效行的過程。這相當于廢棄了這一行的内容,但并不回寫任何更新的資料。當與writeback組合時,會先将dirty資料更新到儲存有這個位址的下一層記憶體。這通常用于維持記憶體的一緻性。

Least Recently Used(LRU)allocation

         對于set-associative和fully-associative cache,最近最少使用原則被用來一個set裡選擇一個line frame作為被驅逐的line,用來儲存新的cache資料。

Line行

         是cache處理的最小機關塊。顯然一個cache行的尺寸要比CPU或高層記憶體存取的資料尺寸要大。例如盡管CPU可以進行單位元組的存取,但如果發生一次讀失效,則cache會将整個cache行的資料讀入。

Line frame行幀

         Cache的一個位置,包含被cache的資料(一行)、一個關聯的tag位址,這個行的狀态資訊。狀态資訊包括這一行是否valid(有效)、dirty(髒)、LRU狀态

Line size行尺寸

         一個行的尺寸,機關位元組。

Load through

         當CPU請求在第一級和第二級cache中都失效時,資料從外部記憶體獲得,同時會存儲在第一級和第二級記憶體中,如果一個cache,它儲存資料并同時把資料送到高一層cache中,這種cache我們稱之為load-through cache。相對于那種首先存儲資料到低層然後第二步再把資料送到高層的cache,這種cache可以減少阻塞時間。

Long-distance access長距離存取

         CPU對不被cache記憶體區域資料的存取。顯然,由于這種存取,不會影響cache的狀态,但速度會比較慢。

Lower-level memory 低層記憶體

         在多級記憶體系統中,距離CPU較遠的記憶體稱為低層記憶體。在C64x系統中,最低層記憶體包括L2以下的外部系統記憶體和記憶體映射的外設。

LRU

         表示cache line的最近最少使用的狀态資訊。

Memory ordering記憶體通路排序

    定義在記憶體裡以什麼樣的順序看記憶體操作的結果,有時稱為consistency(連貫性)。在分級結構的特定層的強記憶體通路排序表示在這一層上不可能以不同與程式序的順序來觀察記憶體存取的結果。松散記憶體通路排序允許記憶體分級體系結構以不同的順序看記憶體操作的結果,注意強排序并不要求系統記憶體以程式序順序操作,而僅僅是使操作的結果在其它請求者看來是與程式序一緻的。

Miss失效

         當請求的記憶體位址的資料不在cache中,就是說發生了cache失效。一個cache失效,會引起阻塞請求者直到line frame被定位,資料從低層記憶體中獲得為止。在某些情況下,比如CPU對L1D出現寫失效,阻塞CPU是不必要的。Cache失效通常分為三種類型:強制失效、沖突失效和容量失效。

Miss pipelining

         服務單一的cache失效的過程需要多個流水周期。如果對連續的失效處理進行流水線操作,顯然就增加對失效處理的效率,降低了阻塞周期。

Read allocate

讀失效cache是僅在發生讀失效時才在cache中定位空間并把資料讀入。寫失效發生時不會産生資料讀入到cache中,而是直接把寫資料送到下一層cache中。

Set集

         Line frames的一個集合。直接映射的cache一個set包含一個line frame,N-way set-associative cache每個set包含N個line frame。Full-associative cache僅有一個set,這個唯一的set包含所有的line frames。

Set-associative cache集相關cache

         一個set-associative cache包含多個line frames用于cache低層記憶體。當為一個新的line資料定位一個空間時,選擇哪個line frame是基于cache的定位政策的。C64x是基于LRU政策的。

Snoop偵測

         是lower-level memory(低層記憶體)查詢higher-level memory(高層記憶體)以确定高層記憶體是否包含給定位址的資料的一種方法。Snoop的主要目的是通過允許低層記憶體請求高層記憶體進行資料更新來維持記憶體的一緻性,snoop操作可以觸發writeback(回寫),或更普通的writeback-invalidate(回寫并無效),觸發writeback-invalidate(回寫并無效)操作的snoop有時又稱為snoop-invalidates。

Tag标簽

         位址高位作為一個Tag存儲在line中,在決定cache是否命中的時候,cache控制器會查詢Tag。

Thrash

         當存取操作引起cache性能遭受嚴重損壞,我們說thrash cache了。Thrash的原因可以有很多:一個可能是算法在短時間存取太多的資料而很少或根本不重複使用。也就是說working set太大。這樣的算法将引起非常嚴重的容量失效。另一種情況是算法重複存取一小組不同位址的資料,這些資料映射到cache的相同set,這樣就人為造成嚴的沖突失效。

Touch

         對一個給定位址的存儲器操作,我們稱之為touch那個位址。Touch也可以指讀數組元素或存儲器位址的其它範圍,定位它們在一個特定層cache的唯一目的。一個CPU中心環用作touch一個範圍的記憶體是為了定位它到cache經常被引用作為一個touch環。Touching一個數組是軟體控制預取資料的一種形式。

Valid有效

         當一個cache line儲存從下一級記憶體取的資料,那麼這個line frame就是有效的。無效狀态發生在line frame不儲存任何資料,或者說還沒有被cache的資料,或先前cache的資料由于某種原因(記憶體一直性要求、程式要求等)被無效。有效的狀态并不表示資料是否已經被修改(其實這有另外的狀态來表示,即dirty或clean)。

Victim

從cache移出一個line進而為新的資料騰出空間的過程我們成為Eviction。Eviction可以由使用者發出的writeback-invalidate産生,被驅逐的line我們稱為victim。當victim line是dirty(“髒”)的時候,資料必須回寫到下一級存儲器中以維持記憶體的一緻性。

Victim Buffer

         儲存victim直到它們背回寫的特殊buffer。Victim lines被移到victim buffer,這樣位新的資料騰出空間。

Victim Writeback

         當victim line是dirty(“髒”)的時候,資料必須回寫道下一級存儲器中以維持記憶體的一緻性。我們稱這個過程為Victim Writeback

Way

         對set-associative cache,每個set包含多個line frames。每個set包含的line frames數被稱為way。以set做為行,line frame作為列,那麼一列的line frames集合稱為一個way。例如,一個4-way set-associative cache有4個way,每個set有4個關聯的line frames,結果,對于一個可cache的記憶體位址,在cache中有4個可能的映射位置。

Working Set

         程式或算法就是資料和指令代碼的集合。在一個特定時間内被引用的這個集合我們稱為working set(工作集)。通常,對于一個算法,我們需要考慮高層記憶體的工作集,對于整個程式我們需要考慮底層記憶體的工作集。

Write allocate

         對于一個write allocate cache,如果發生寫失效,就會定位一個空間并将失效的資料讀入到cache中。空間定位按照LRU原則。一旦資料被讀入到cache中,就進行寫操作,對write allocate cache,僅更新目前層的記憶體,寫的資料并不立刻送到下一層更低的記憶體。

Writeback回寫

         将一個有效的但為髒的cache line回寫到較低層記憶體的過程。回寫後的這個cache line我們稱之為clean(“幹淨”)。回寫後的cache line狀态依然為有效。

Writeback cache回寫cache

         回寫cache僅修改它自己的寫命中的資料,它不會立刻更新下一級較低層記憶體的内容。資料在将來某時被回寫,如:當這個cache line被驅逐時,或當低層記憶體向高層記憶體snoop這個位址時,當然也可以直接通過程式發送writeback指令。一個寫命中,會引起對應的line被标記為dirty(“髒”),也就是說資料被更新了,但還沒來得及更新低層記憶體。

Writeback-invalidate回寫後使無效

将一個有效的但為髒的cache line回寫到較低層記憶體并置這些cache line為無效狀态的過程。對C64x,對一組cache line進行Writeback-invalidate時,僅回寫那些有效且為髒的cache lines,但卻置那一組中的所有cache lines為無效。

Write merging

         Write merging是組合多個獨立的寫操作成一個、位寬更大的寫操作。顯然這可以改善了記憶體系統的性能。例如,對C64x CPU,L1D寫緩沖在某些情況下(如果它們是對同一個雙字位址的寫)能合并多個寫。

Write-through cache

         對于一個write-through cache,能把所有的寫直接旁路到較低層記憶體。Cache中永遠不包含更新的資料,這樣做的結果是cache line永遠不會是dirty。C64x的cache并不使用這種cache。

繼續閱讀