mesi(快取一致性)
快取一致性,用於保證多個cpu cache之間快取共享資料的一致性。
mesi協議將cache line的狀態分為modify(修改),exclusive(獨佔),shared(共享),invalid(失效)。
modify:當前cpu cache擁有最新資料,其他cpu擁有失效資料(cache line的狀態是invalid),雖然當前cpu中的資料和主存是不一致的,但是以當前cpu的資料為準。
exclusive:只有當前cpu中有資料,其他cpu中沒有改資料,當前cpu的資料和主存中的資料是一致的。
shared:當前cpu和其他cpu中都有共同資料,並且和主存中的資料一致。
invalid:當前cpu中的資料失效,資料應該從主存中獲取,其他cpu中可能有資料也可能無資料,當前cpu中的資料和主存被認為是不一致的。
cache操作
mesi協議中,每個cache的控制器不僅知道自己的操作(local read和local write),通過監聽也知道其他cpu中cache的操作(remote read和remote write)。對於自己本地快取有的資料,cpu僅需要發起local操作,否則發起remote操作,從主存中讀取資料,cache控制器通過匯流排監聽,僅能夠知道其他cpu發起的remote操作,但是如果local操作會導致資料不一致性,cache控制器會通知其他cpu的cache控制器修改狀態。
local read(lr):讀本地cache中的資料;
local write(lw):將資料寫到本地cache;
remote read(rr):讀取主存中的資料;
remote write(rw):將資料寫通到主存。
狀態轉換和cache操作
mesi協議中cache line資料狀態有4種,引起資料狀態轉換的cpu cache操作也有4種,因此要理解mesi協議,就要將這16種狀態轉換的情況討論清楚。
初始場景:在最初的時候,所有cpu中都沒有資料,某乙個cpu發生讀操作,此時發生rr,資料從主存中讀取到當前cpu的cache,狀態為e(獨佔,只有當前cpu有資料,且和主存一致),此時如果有其他cpu也讀取資料,則狀態修改為s(共享,多個cpu之間擁有相同資料,並且和主存保持一致),如果其中某乙個cpu發生資料修改,那麼該cpu中資料狀態修改為m(擁有最新資料,和主存不一致,但是以當前cpu中的為準),並通知其他擁有該資料的cpu資料失效,其他cpu中的cache line狀態修改為i(失效,和主存中的資料被認為不一致,資料不可用應該重新獲取)。
總結
mesi協議為了保證多個cpu cache中共享資料的一致性,定義了cache line的四種狀態,而cpu對cache的4種操作可能會產生不一致狀態,因此cache控制器監聽到本地操作和遠端操作的時候,需要對位址一致的cache line狀態做出一定的修改,從而保證資料在多個cache之間流轉的一致性。
CPU多級快取與快取一致性
定義 cpu快取是位於cpu與記憶體之間的臨時儲存器,它的容量比記憶體小的多,但是交換速度卻比記憶體要快得多 為什麼需要cpu cache?cpu的頻率太快了,快到主存跟不上,這樣在處理器時鐘週期內,cpu常常需要等待主存,浪費資源。cache的出現,是為了緩解cpu和主存之間速度的不匹配問題 結構...
快取一致性
一般應用而言,追求的都是快取的最終一致性。一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。引起這個問題的主要原因還是高併發的時...
快取一致性
計算機體系結構量化研究方法 第五版 學習筆記 快取一致性 1 快取一致性的問題 2 儲存器一致性的概念 3 一致性的基本實現方案 大型 多級快取可以充分降低處理器對儲存頻寬的需求。採用對稱共享儲存器的計算機通常支援對共享資料與專用資料的快取。多處理器之間的通訊基本上是通過讀寫共享資料實現。為了降低訪...