CPU多級快取與快取一致性

2021-09-24 20:26:39 字數 2103 閱讀 5521

定義

cpu快取是位於cpu與記憶體之間的臨時儲存器,它的容量比記憶體小的多,但是交換速度卻比記憶體要快得多

為什麼需要cpu cache?

cpu的頻率太快了,快到主存跟不上,這樣在處理器時鐘週期內,cpu常常需要等待主存,浪費資源。cache的出現,是為了緩解cpu和主存之間速度的不匹配問題(結構:cpu->cache>memory)

cpu cache有什麼意義?

1、時間區域性性:如果某個資料被訪問,那麼在不久的將來它很可能被再次訪問;

2、空間區域性性:如果某個資料被訪問,那麼與它相鄰的資料很快也可能被訪問;

cpu多級快取-快取一致性(mesi)

用於保證多個cpu cache之間快取共享資料的一致,也可以通過給匯流排加lock鎖的方式來保證快取一致性

每個快取行有如下m、e、s、i 四種狀態

m(modified):被修改,該快取行只被快取在該cpu的快取中,並且是被修改過的,目前與主存的資料不一致,即該快取需要在未來的某個時間點(並且允許其他cpu讀取該主存中相應記憶體之間)寫回主記憶體,當被寫回主存之後,該快取行的狀態會變成獨享(exclusive)狀態

e(exclusive):獨享的,該快取行只被快取在該cpu的快取中,它是未被修改過的,與主存中的資料一致。該狀態可以在任何時刻當有其它cpu讀取該記憶體時變成共享狀態。同樣地,當cpu修改該快取行中內容時,該狀態可以變成modified狀態

s(shared):共享的,該狀態意味著該快取行可能被多個cpu快取,並且各個快取中的資料與主存資料一致,當有乙個cpu修改該快取行時,其他cpu中對該快取行的快取可以被作廢,變為無效狀態(invalid)

i(invalid):該快取時無效的

從cpu讀寫角度來說:

cpu讀請求:快取處於m、e、s狀態都可以被讀取,i狀態cpu只能從主存中讀取資料

cpu寫請求:快取處於m、e狀態才可以被寫。對於s狀態的寫,需要將其他cpu中快取行置為無效才可寫

典型的例子如下:

在乙個典型系統中,可能會有幾個快取(在多核系統中,每個核心都會有自己的快取)共享主存匯流排,每個相應的cpu會發出讀寫請求,而快取的目的是為了減少cpu讀寫共享主存的次數。

乙個快取除在invalid狀態外都可以滿足cpu的讀請求,乙個invalid的快取行必須從主存中讀取(變成s或者 e狀態)來滿足該cpu的讀請求。

乙個寫請求只有在該快取行是m或者e狀態時才能被執行,如果快取行處於s狀態,必須先將其它快取中該快取行變成invalid狀態(也既是不允許不同cpu同時修改同一快取行,即使修改該快取行中不同位置的資料也不允許)。該操作經常作用廣播的方式來完成,例如:request for ownership (rfo)

快取可以隨時將乙個非m狀態的快取行作廢,或者變成invalid狀態,而乙個m狀態的快取行必須先被寫回主存。

乙個處於m狀態的快取行必須時刻監聽所有試圖讀該快取行相對就主存的操作,這種操作必須在快取將該快取行寫回主存並將狀態變成s狀態之前被延遲執行。

乙個處於s狀態的快取行也必須監聽其它快取使該快取行無效或者獨享該快取行的請求,並將該快取行變成無效(invalid)。

乙個處於e狀態的快取行也必須監聽其它快取讀主存中該快取行的操作,一旦有這種操作,該快取行需要變成s狀態。

​ 對於m和e狀態而言總是精確的,他們在和該快取行的真正狀態是一致的。而s狀態可能是非一致的,如果乙個快取將處於s狀態的快取行作廢了,而另乙個快取實際上可能已經獨享了該快取行,但是該快取卻不會將該快取行公升遷為e狀態,這是因為其它快取不會廣播他們作廢掉該快取行的通知,同樣由於快取並沒有儲存該快取行的copy的數量,因此(即使有這種通知)也沒有辦法確定自己是否已經獨享了該快取行。

快取一致性的核心思想為(以多核cpu為例):

當cpu寫資料時,如果發現操作的變數是共享變數,即在其他cpu中也存在該變數的副本,會發出訊號通知其他cpu將該變數的快取行置為無效狀態,因此當其他cpu需要讀取這個變數時,發現自己快取中的快取該變數的快取行是無效的,那麼它就會重新從記憶體中讀取。

既然有快取一致性了,為什麼還要有volatile?

CPU多級快取 快取一致性

mesi 快取一致性 快取一致性,用於保證多個cpu cache之間快取共享資料的一致性。mesi協議將cache line的狀態分為modify 修改 exclusive 獨佔 shared 共享 invalid 失效 modify 當前cpu cache擁有最新資料,其他cpu擁有失效資料 ca...

快取一致性

一般應用而言,追求的都是快取的最終一致性。一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。引起這個問題的主要原因還是高併發的時...

快取一致性

計算機體系結構量化研究方法 第五版 學習筆記 快取一致性 1 快取一致性的問題 2 儲存器一致性的概念 3 一致性的基本實現方案 大型 多級快取可以充分降低處理器對儲存頻寬的需求。採用對稱共享儲存器的計算機通常支援對共享資料與專用資料的快取。多處理器之間的通訊基本上是通過讀寫共享資料實現。為了降低訪...