cpu的緩存同步機制

 

cache同步機制之讀寫

 

1.概念解析

 

cache :這裏的cache可以指L1,L2,L3這種CPU緩存,也可以是內存,也可以是磁盤緩存,區別在於處於什麼場景下。

內存  :對於cache的後端存儲,總之是在cache之後。或是持久或是非持久的存儲。

cache hit :當從cache中讀取數據時,恰好命中,讀到數據,又稱緩存命中

cache miss: 對應cache hit ,在緩存中沒有讀到數據,需要到後端存儲讀取。

對應還有write miss , write hit , read miss ,read hit. 

 

2.寫同步

 

現在的CPU是由L1,L2,L3,內存,物理存儲五級存儲方式,訪問速度是越來越慢,那麼對於數據傳遞過程該如何定義呢?

 

2.1) write through cache :

每次刷新cache時,同時同步的將數據刷新到內存中。優點:簡單,缺點:相比較來說慢一些。

 

2.2) write back cache 

刷新數據到cache中,但是不立刻同步數據到內存,但標誌這些數據在內存中是髒數據,等到這些數據要會清理出緩存的時候(例如LRU算法),再將數據刷新到內存中,因爲很多場景下有些數據只是一些中間數據,並不是最終數據。優點:CPU效率高,但是實現複雜。還需要承擔在cache中數據未刷新到內存中的風險。

 

以上兩種方式是在走兩個極端,一個極端是有數據就立刻同步,另一個極端就是等有需要刪除數據時就同步數據(這個也是memcached服務端的實現策略)。那麼有沒有一種介於這兩者之間的傳遞數據方式呢?那就是post write 。

 

2.3) post write

cpu更新緩存時,把更新的數據寫入到一個更新緩存器中,在合適的時候更新數據到內存中,這個時機需要根據具體的業務場景來分析,可以是定時,也可以是某種觸發機制下,例如更新緩存器中數據達到多少的比例。簡單的話就是異步的方式同步數據。這種方式也面臨的問題就是寫數據在緩存中丟失的問題都需要去考慮容災。

 

3.讀同步

 

在第一個節點已經介紹可cache hit && cache miss .那麼在cache miss的情況下如何處理呢?有兩種:

讀取數據有兩種,一種是從後端存儲中讀到數據後直接放到CPU,這種稱之爲:read through,另一種就是讀取數據後,先放到cache中,再從cache中讀取數據。

 

cache hit && cache miss 的資料寫入

我們在cache中讀到數據,需要重寫回去,那麼就上面提到的三種寫策略

 

但是是針對寫入過程中原來數據已經不存在了的情況有以下兩種處理方式:

1.Write allocate:將寫入數據從內存中讀入緩存,然後採用write-hit(緩存命中寫入)操作。寫缺失操作與讀缺失操作類似。

2.No-write allocate:方式並不將寫入位置讀入緩存,而是直接將數據寫入存儲。這種方式下,只有讀操作會被緩存,因爲不會有新數據寫入緩存,都直接寫內存了。

 

同步以上的分析,我們大致知道了CPU是如何處理L1和內存之間的數據同步的,那麼我們在自己做緩存設計的時候也可以參考。

以上內容是自己摘取分析的成果,若有問題,歡迎指出!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章