“ 本文的參考文章是2022年HOT 34上Intel Rob Blakenship關于CXL緩存一致性的一篇介紹。”
馮諾依曼說,數據應該存在這里,這里變成了存儲器;
馮諾依曼說,數據應該在這里被計算,這里變成了CPU;
馮諾依曼沒有說,CPU太快而存儲太慢。CPU沒有辦法只能把一部分數據留在身邊,慢慢地就成了各級緩存。每個CPU都留了一部分數據在身邊,就得維護這些數據和內存的一致性。
(有時間可以再聊聊拜占庭將軍問題和共識機制,又要分布式的好,還有集中式的一致性,有點類似。)
1緩存/caching
緩存就是臨時把數據存在靠近數據要消費的地方。
放數據的地方有不同的級別,不同級別的延時和帶寬都不一樣,因此就會有預取。更詳細的硬件預取器的文章可以參考以下幾篇拙作。
預取就是在數據真正需求之前把數據取回來。既然可以預取就說明數據具有兩個性質:
空間局部性:一般來說需求的數據在之前的數據附近
時間局部性:一般來說需求的數據總是之前用過的
現代CPU一般都會有多級的緩存,并且他們都可以保持緩存一致。
L1:空間最小,延時最低,帶寬最高
L3:空間更大,延時更高,帶寬較低,并且支持多個數據需求來源
那么如何保證緩存一致性呢?
首先需要在更新緩存之前,確保使得其他人擁有的該緩存無效。
這可以通過軟件的手段,也可以通過硬件的手段。CXL使用硬件一致性。
CXL和CPU的緩存一致性協議相同,都是基于以下幾個狀態:
Modified:該數據只被緩存到一個cache中,可讀可寫,但是還沒有更新到內存中;
Exclusive:該數據只被緩存到一個cache中,可讀可寫,數據與內存同步;
Shared:該數據被緩存到多個cache中,可讀,數據與內存同步;
Invalid:該數據沒有被緩存;
2緩存的家 Home
內存以64Byte為單位分好,這一份就是一個cacheline。
系統通過物理地址把這些單位都安排好,然后交給Home Agent來管理,有且僅有一個。
也就是說一個cacheline,只有一個家,例如在兩路系統中,要么是CPU0,要么是CPU1。
比如說,你要讀一個cacheline,你會首先在本地的cache里找,如果沒有的話,你就會去找它的家。也就是Home Agent會去問其他的CPU是不是有這個緩存。
如果你要寫一個cacheline,你也需要找它的家,獲取寫權限,然后讓Home Agent告訴其他的CPU放棄該cacheline,當然在放棄之前,需要把最新的數據回寫給Home Agent。
Home Agent怎么問其他CPU,或者修改cacheline的狀態呢?這個就是Snoop消息。
3CXL 緩存協議
為支持設備訪問系統主存,cxl.cache有15個讀寫操作指令。
CXL3.0開始,每一個端口可以最多支持16個緩存設備,而在此之前,只能支持一個。
在CPU和CXL設備之間,有兩個通訊方向,一個是H2D,一個是D2H。
顧名思義,host和device 的兩個方向。而每個方向分成三個通道/channel,分別為請求,響應和數據通道。
4舉個栗子
Device首先發一個RdShared:Read Cacheline Share State。設備獲取了某個cacheline并且獲得S-state,然后host返回Go-S。表示Home Agent同意了這個請求,并且該設備的cacheline變成了Shared state。
看看就好,不能動手。
這里的peer cache可以是各種鄰居:
CXL的鄰居設備;
本CPU中的cache;
遠端CPU中的cache;
而這里的內存控制器也可以是各種內存:
本CPU的傳統DDR;
遠端CPU的傳統DDR;
鄰居CXL設備上的CXL.mem;
CXL的15個request,就不再一一解釋,露個臉:
Reads: RdShared, RdCurr, RdOwn, RdAny
Read-0: RdownNoData, CLFlush, CacheFlushed
Writes: DirtyEvict, CleanEvict, CleanEvictNoData
Streaming Writes: ItoMWr, WrCur, WOWrInv, WrInv(F)
5內存池化和共享
池化內存和CXL switch是CXL增加的內容,這使得從host到內存的專屬分配成為共享內存的一種方式。
CXL3增加了多個host共享內存的支持,利用HDM-DB。
先寫到這里,緩存一致性的具體流程不再詳細解釋,細心一點的朋友可以多找幾個例子,按照圖示和步驟對照一下。
審核編輯:湯梓紅
-
存儲器
+關注
關注
38文章
7452瀏覽量
163598 -
cpu
+關注
關注
68文章
10824瀏覽量
211138 -
內存
+關注
關注
8文章
2998瀏覽量
73882 -
緩存
+關注
關注
1文章
233瀏覽量
26646
原文標題:感謝CXL同志為維護緩存一致性做出的努力
文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論