<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何保證緩存一致性

SDNLAB ? 來源:IT奶爸 ? 2023-10-19 17:42 ? 次閱讀

“ 本文的參考文章是2022年HOT 34上Intel Rob Blakenship關于CXL緩存一致性的一篇介紹?!?/p>

馮諾依曼說,數據應該存在這里,這里變成了存儲器;

馮諾依曼說,數據應該在這里被計算,這里變成了CPU;

馮諾依曼沒有說,CPU太快而存儲太慢。CPU沒有辦法只能把一部分數據留在身邊,慢慢地就成了各級緩存。每個CPU都留了一部分數據在身邊,就得維護這些數據和內存的一致性。

(有時間可以再聊聊拜占庭將軍問題和共識機制,又要分布式的好,還有集中式的一致性,有點類似。)

1緩存/caching

緩存就是臨時把數據存在靠近數據要消費的地方。

放數據的地方有不同的級別,不同級別的延時和帶寬都不一樣,因此就會有預取。更詳細的硬件預取器的文章可以參考以下幾篇拙作。

預取就是在數據真正需求之前把數據取回來。既然可以預取就說明數據具有兩個性質:

空間局部性:一般來說需求的數據在之前的數據附近

時間局部性:一般來說需求的數據總是之前用過的

636609d8-60f4-11ee-939d-92fbcf53809c.png

現代CPU一般都會有多級的緩存,并且他們都可以保持緩存一致。

L1:空間最小,延時最低,帶寬最高

L3:空間更大,延時更高,帶寬較低,并且支持多個數據需求來源

637e295a-60f4-11ee-939d-92fbcf53809c.png

那么如何保證緩存一致性呢?

首先需要在更新緩存之前,確保使得其他人擁有的該緩存無效。

這可以通過軟件的手段,也可以通過硬件的手段。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,分別為請求,響應和數據通道。

63ac2328-60f4-11ee-939d-92fbcf53809c.png

4舉個栗子

Device首先發一個RdShared:Read Cacheline Share State。設備獲取了某個cacheline并且獲得S-state,然后host返回Go-S。表示Home Agent同意了這個請求,并且該設備的cacheline變成了Shared state。

看看就好,不能動手。

63d0e0f0-60f4-11ee-939d-92fbcf53809c.png

這里的peer cache可以是各種鄰居:

CXL的鄰居設備;

本CPU中的cache;

遠端CPU中的cache;

而這里的內存控制器也可以是各種內存:

本CPU的傳統DDR;

遠端CPU的傳統DDR;

鄰居CXL設備上的CXL.mem;

63f0fc0a-60f4-11ee-939d-92fbcf53809c.png

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。

6416081a-60f4-11ee-939d-92fbcf53809c.png

先寫到這里,緩存一致性的具體流程不再詳細解釋,細心一點的朋友可以多找幾個例子,按照圖示和步驟對照一下。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲器
    +關注

    關注

    38

    文章

    7189

    瀏覽量

    162201
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10483

    瀏覽量

    206963
  • 內存
    +關注

    關注

    8

    文章

    2780

    瀏覽量

    72858
  • 緩存
    +關注

    關注

    1

    文章

    221

    瀏覽量

    26462

原文標題:感謝CXL同志為維護緩存一致性做出的努力

文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CPU Cache是如何保證緩存一致性的?

    我們介紹`CPU Cache`的組織架構及其進行**讀操作**時的尋址方式,但是緩存不僅僅只有讀操作,還有 **寫操作** ,這會帶來一個新的問題
    的頭像 發表于 12-04 15:05 ?608次閱讀
    CPU Cache是如何<b class='flag-5'>保證</b><b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>的?

    相位一致性邊緣檢測

    大家起探討相位一致性邊緣檢測,求指導
    發表于 06-11 13:38

    一致性測試

    誰有聚星公司射頻一致性測試的程序啊,求個做參考,!
    發表于 07-14 18:11

    c6678cache一致性

    專家您好! ? ?我現在在做6678 cache一致性的東西,想請問一下一致性的維護哪些是硬件實現的,哪些需要程序員實現?謝謝!
    發表于 06-24 04:38

    LTE基站一致性測試的類別

    就LTE基站而言,RF測試方法與一致性要求至為關鍵,然而,調變格式、帶寬、資源分配與移動導致選項復雜度增加,因此優化的一致性測試配置參數組合需求更為殷切。第三代合作伙伴項目(3GPP)長期演進計劃
    發表于 06-06 06:41

    MIPI一致性測試

    ; 為了保證MIPI信號能夠準確測量MIPI D-PHY的一致性測試規范標準(V1.0)要求示波器帶寬至少為4G,MIPI M-PHY的一致性測試規范(v 0.84),對于G1,G2,G3的標準要求帶寬
    發表于 09-26 13:31

    Infiniium一致性測試軟件

    Infiniium 一致性測試軟件
    發表于 10-28 17:28

    什么是霍爾元件的一致性

    什么是霍爾元件的一致性?霍爾開關元件主要是通過感應磁性來進行開關機,霍爾元件本身又屬于無觸點開關,因此具有感應距離?;魻栭_關都有個觸發值和釋放值,觸發值是指霍爾元件表面達到參數磁性大小,霍爾元器件
    發表于 10-12 09:34

    如何確保藍牙設計通過EMI一致性測試 ?

    選擇藍牙模塊時需要考慮哪些因素?如何確保藍牙設計通過EMI一致性測試 ?
    發表于 05-07 06:25

    如何實現信號電壓幅值的一致性?

    如何實現信號電壓幅值的一致性?
    發表于 05-20 07:23

    小編科普CPU緩存一致性協議MESI

    什么是緩存一致性協議MESI?MESI協議中的狀態有哪幾種?MESI協議中的狀態是如何相互轉換的?
    發表于 06-17 10:00

    順序一致性和TSO一致性分別是什么?SC和TSO到底哪個好?

    保證某個內核的fence指令前的所有memory訪問能夠在fence指令后的memory訪問之前完成。實際上fence指令(或者說是memory barrier)在后續我們即將介紹的弱序內存一致性
    發表于 07-19 14:54

    請教大神在Arm AMBA協議集中,什么叫緩存一致性?

    請教大神在Arm AMBA協議集中,什么叫緩存一致性?
    發表于 09-29 14:51

    i.MX8M可以調用哪些刷新/無效緩存函數來保證緩存一致性?

    的是,我們現在在較小的傳輸中遇到緩存問題。有時,當緩沖區被復制到用戶空間時,64 字節的數據沒有被正確的數據 buf 填充為 0xff。我們在次傳輸中傳輸了大約 1.1 MBytes,有時
    發表于 04-27 08:30

    你了解過Linux內核中的內存屏障?

    之前一直認為linux中很多東西是用來保證緩存一致性的,其實不是。緩存一致性絕大部分是靠硬件機制實現的,只有在帶lock前綴的指令執行時才與
    發表于 05-10 14:20 ?429次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>