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 frameway,僅有一個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包含Nline frameFull-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的數據由於某種原因(內存一直性要求、程序要求等)被無效。有效的狀態並不表示數據是否已經被修改(其實這有另外的狀態來表示,即dirtyclean)。

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。


免責聲明!

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



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