CPU多級快取

2021-09-22 18:51:27 字數 1785 閱讀 7868

l1 cache是cpu第一級快取,分為資料快取和指令快取.以幫伺服器cpu的l1快取的容量通常在21-4906kb.

l2 cache由於l1級快取記憶體容量限制,為了再次提高cpu的運算速度在cpu外部放置已高速儲存器,即二級快取。

l3 cache現在都是內建的,而他可以進一步降低記憶體延遲,同時提高大資料量計算的處理器效能(其作用是進一步降低記憶體的延遲,同時提公升海量資料量計算時的效能)。具有加大l3快取的處理器提供更有效的檔案系統快取行為,即較短訊息佇列長度。一般是多核共享乙個l3級快取。

cpu讀取資料順序:l1–>l2–>l3–>記憶體–>外部儲存器

快取同步協議(mesi協議)

mesi協議它規定每條快取都有個狀態為,同時定義了下面的四個狀態

**修改態(modified)**該條資料是在cpu的快取中,並且是被修改過的,與主記憶體裡面的資料不一致,這條資料是要在某個的時間點回寫到主記憶體當中,這個時間點是允許其他cpu讀取主內相應的記憶體之前,當值被回寫到主記憶體後快取狀態被修改為e.

**專有態(exclusive)**該條資料是沒有被修改過的,內容同於主記憶體,但不出現在其他cache中,這條資料可以在任何時刻,其他cpu讀取後狀態修改為s,當cpu修改內容後狀態就會變為m.

**共享態(shared)**這條資料內容同於主記憶體當也出現在其他cpu中(也就是可以被多個cpu進行快取),當有乙個cpu修改快取時,其他cpu從該快取行是可以被作廢的,狀態就會變為i.

**無效態(invalid)**這個快取是無效的,可能是其他cpu修改了該快取。

多處理器時,單個cpu對快取中的資料進行了改動,需要通知給其他cpu,也就意味著cpu處理要控制自己的讀寫操作,還要監聽其他cpu發出的通知,從而保證最終一致。

指令重排

場景

當cpu寫快取時發現快取區塊正被其他cpu占用,為了提高cpu的處理效能,可能講後面的讀快取命令優先執行。

as-if-serial

不管cpu怎麼重排序,程式(單執行緒)的執行結果不能被改變。編譯器、runtime和處理器都必須遵守as-if-serial,也就是說編譯器和處理器不會在資料依賴關係操作重排序。

同樣cpu在執行過程中會面臨兩個問題:

1. 快取記憶體下,快取中的資料於主資料並不是實時同步的,各cpu(或cpu核心)間快取的資料也不是實時同步。在同乙個時間點各個cpu看到的同一記憶體位址的資料可能不一致。

2. cpu執行指令重排序優化時,雖然遵守as-if-serial語義,但只能保證在單cpu自己執行的情況下保證結果正確。多核執行緒中,指令邏輯無法分辨因果關聯。可能出現亂序,導致執行結果錯誤。

記憶體屏障

處理器提供了兩個指令(memory barrier)用於解決上述問題

讀記憶體屏障(load memory barrier) 在指令執行前插入load memory barrier 可以讓快取記憶體中的資料失效強制從主記憶體載入資料,強制讀取主記憶體內容讓cpu快取與主記憶體保持一致,避免了快取導致一致性的問題。

寫記憶體屏障(store memory barrier)在指令後插入store barrier,能讓快取中最新的資料寫入到主記憶體中,讓其他執行緒可見。強制寫入主記憶體,這種顯示呼叫,cpu就不會因為效能考慮,而去對指令重拍。

CPU多級快取 快取一致性

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

CPU多級快取與快取一致性

定義 cpu快取是位於cpu與記憶體之間的臨時儲存器,它的容量比記憶體小的多,但是交換速度卻比記憶體要快得多 為什麼需要cpu cache?cpu的頻率太快了,快到主存跟不上,這樣在處理器時鐘週期內,cpu常常需要等待主存,浪費資源。cache的出現,是為了緩解cpu和主存之間速度的不匹配問題 結構...

自構建多級快取

一 背景說明 準備使用責任鏈模式,構建多級快取鏈,依次逐級向下取值,直到取到值為止。將取到的值再逐級賦值給未取到值的快取級。二 定義多級list 鏈路介面類chain public inte ce chain快取公用介面 public inte ce cacheclient快取實現類 public ...