就硬體而言,cpu、晶元、處理器、記憶體、匯流排、磁碟等等,構成了一台電腦,當電腦執行乙個程式的時候,需要從磁碟讀到主記憶體,主記憶體再到快取,最後交由cpu執行。
隨著現在的多核處理器的發展,運算的速度是越來越快,但是在運算的同時,也要遇到快取一致性的問題,簡單來說,多核處理器,每個核上有個多個處理器,每個處理器上又有著cache快取記憶體,c0,c1,c2, 從主記憶體當中讀取乙個變數,如果c0更改了這個變數,c1,c2,不能及時的去更新當前的值,就會使用一開始從主記憶體讀取的變數進行運算,結果就會導致髒資料。因此,出現了mesi快取一致性進行控制
目預處理器基本上都遵循這個協議,先大概解釋下mesi,
狀態描述
m(modified)
這行資料有效,資料被修改了,和記憶體中的資料不一致,資料只存在本cache中
e(exclusive)
這行資料有效,資料和記憶體中的資料一致,資料只存在雲本cache中
s(share)
這行資料有效,資料和記憶體中的資料一致,資料存在很多的
cache中
i(invalid)
在很多的cache中,這行資料無效
m (modified) 和 e (exclusive) 狀態的cache line,資料是獨有的,不同點在於m狀態的資料是dirty的(和記憶體不一致),e狀態的資料是clean的(記憶體一致).
s (shared) 狀態的cache line,資料和其他的cache共享。只有clean的資料才能被多個cache共享
i (invalid)表示這個cache line無效。
e 狀態示例如下:
只有c0訪問變數x,它的cache line狀態為e(exclusive)
s 狀態示例如下:
3個core都訪問變數x,它們對應的cache line為s (shared)的狀態
m狀態和 i 的狀態示例如下:
core0修改了x的值之後,這個cache line變成了m(modified)狀態,其他core對應的cacheline變成了i(invalid)狀態
在mesi協議中,每個cache的cache控制器不僅知道自己的讀寫操作,而且也監聽到(snoop)其他cache的讀寫操作。每個cache line所處的狀態根據本該和其他核的讀寫操作在4個狀態間進行遷移
Cache與一致性
3 知識點摘記 3.2 編譯屏障和記憶體屏障 參考文獻 對於cache cache一致性 記憶體一致性 記憶體屏障 原子操作等話題,涉及到很多處理器體系結構的細節,比較難懂。本文不會系統的分析這些問題,一是水平有限,二是工作量太大,三是目前已經有相關的高質量書籍和網路資料。所以本文著力收集一些相關話...
快取一致性
一般應用而言,追求的都是快取的最終一致性。一般的快取系統,都是按照key去快取查詢,如果不存在對應的value,就應該去後端系統查詢 比如db 如果key對應的value是一定不存在的,並且對該key併發請求量很大,就會對後端系統造成很大的壓力。這就叫做快取穿透。引起這個問題的主要原因還是高併發的時...
快取一致性
計算機體系結構量化研究方法 第五版 學習筆記 快取一致性 1 快取一致性的問題 2 儲存器一致性的概念 3 一致性的基本實現方案 大型 多級快取可以充分降低處理器對儲存頻寬的需求。採用對稱共享儲存器的計算機通常支援對共享資料與專用資料的快取。多處理器之間的通訊基本上是通過讀寫共享資料實現。為了降低訪...