在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

多核多Cluster多系統之間的緩存一致性

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-04-19 14:55 ? 次閱讀

1.思考和質疑

在一個大架構大系統中,有哪些一致性需要維護?我們先看如下一張架構圖。

b8818806-bf93-11ec-9e50-dac502259ad0.png

然后請思考:

(1)、core0中的L1和L2 cache有一致性的要求嗎?緩存和替換策略是怎樣的?

(2)、core0 cache 和 core1 cache的一致性是誰來維護?遵從MESI協議嗎?

(3)、core0 cache 和 core4 cache的是怎么維護一致性的呢?

(4)、custer0 L3 cache 和 cluster1 L3 cache的一致性是誰來維護?遵從什么協議嗎?

(5)、custer0 L3 cache 和 GPU的L2一致性呢?遵從什么協議?

(6)、custer0 L3 cache 和 其它的I/O deviceMaster一致性呢?遵從什么協議?

(7)、DSU、ACE、CHI、CCI、CMN的概念?

網上的好多篇博文,一提Cache的多核一致性就必然提到 MESI、MOESI ,然后就開始講 MESI、MOESI維護性原理?試問一下,您是真的不理解MESI嗎?您真的需要學習MESI?你不理解的是架構吧,而不是學什么協議.既然要學習MESI,那么這里也繼續提出一些問題:

(1)、ARM架構中真的使用MESI了嗎?或者是哪一級cache使用了,哪一級cache沒有使用?

(2)、MESI是一個協議?是誰來維護的?總得有個硬件實現這個協議吧,是在ARM Core實現?DSU實現?

(3)、MESI的四種狀態,分別記錄在哪里的?

(4)、arm現在主流的core,到底使用的是MESI,還是MOESI?

2.怎樣去維護多核多系統緩存的一致性

有三種機制可以保持一致性:

禁用緩存是最簡單的機制,但可能會顯著降低 CPU 性能。為了獲得最高性能,處理器通過管道以高頻率運行,并從提供極低延遲的緩存中運行。緩存多次訪問的數據可顯著提高性能并降低 DRAM 訪問和功耗。將數據標記為“非緩存”可能會影響性能和功耗。

軟件管理的一致性是數據共享問題的傳統解決方案。在這里,軟件(通常是設備驅動程序)必須清除或刷新緩存中的臟數據,并使舊數據無效,以便與系統中的其他處理器或主設備共享。這需要處理器周期、總線帶寬和功率。

硬件管理的一致性提供了一種簡化軟件的替代方案。使用此解決方案,任何標記為“共享”的緩存數據將始終自動更新。該共享域中的所有處理器和總線主控器看到的值完全相同。

然而,我們在ARM架構中,默認使用的卻是第三種 硬件管理的一致性, 意思就是:做為一名軟件工程師,我們啥也不用管了,有人幫我們干活,雖然如此,但我們還是希望理解下硬件原理。

再講原理之前,我們先補充一個場景:假設在某一操作系統中運行了一個線程,該線程不停著操作0x4000_0000地址處內存(所以我們當然期望,它總是命中著),由于系統調度,這一次該線程可能跑在cpu0上,下一次也許就跑在cpu1上了,再下一次也許就是cpu4上了(其實這種行為也叫做CPU migration)

或者舉個這樣的場景也行:在Linux Kernel系統中,定義了一個全局性的變量,然后多個內核線程(多個CPU)都會訪問該變量.

在以上的場景中,都存在一塊內存(如0x4000_0000地址處內存)被不同的ARM CORE來訪問,這樣就會出現了該數據在main-memory、cluster cache、core cache不一致的情況, 復雜點場景可能還會考慮cluster chache和other Master(如GPU) cache的一致性情況。

既然出現了數據在內存和不同的cache中的不一致的情況,那么就需要解決這個問題(也叫維護cache一致性),那么怎么維護的呢,上面也說了“使用 硬件管理的一致性”,下面就以直接寫答案的方式,告訴你硬件是怎樣維護一致性的。

2.1 多核緩存一致性

同一個cluster中多core之間的緩存一致性由DSU(big.LITTLE叫SCU)來維護,遵循MESI協議。

b898c926-bf93-11ec-9e50-dac502259ad0.png

2.2 多Master之間的緩存一致性

在講述多Master之間的緩存一致性之前,我們先將Master分為以下幾類:

ACE Master : 如 big.LITTLE cluster 或 DSU cluster

CHI Master : 如 big.LITTLE cluster 或 DSU cluster

ACE-lite Master:如 GPU cluster

I/O Device Master : 如 DMA

b8b3a408-bf93-11ec-9e50-dac502259ad0.png

以下是多Master之間的緩存一致性的結論:

首先,CHI/ACE總線都是支持MESI協議數據傳輸的

Master與I/O Device Master之間沒有一致性,因為I/O Device沒有鏈接到CCI/CMN緩存互聯總線上。

多個ACE/CHI Master之間的緩存一致性,是否遵循MESI,要具體情況具體分析,簡而言之就是:(1) 如果兩個Master都支持帶MESI狀態位,支持帶有MESI信號的讀寫,那么這兩個Master緩存一致性是遵從MESI協議的 (2) 如果有一個Master不支持帶MESI狀態位,那么這個Master就無法支持帶有MESI信號的讀寫,那么這兩個Master緩存一致性是不遵從MESI協議的 (3) Master的MESI狀態位,是在該Master的cache的TAG中。

ACE/CHI Master和ACE-lite Master之間的緩存一致性,是不遵從MESI協議的。這主要是因為ACE/CHI Master無法snoop ACE-lite Master的內存,而ACE-lite Master卻可以snoop ACE/CHI Master的內存,總得來說,這不是一個完整的MESI協議。

舉一個最常見的例子:兩個DSU cluster的L3 cache中的TAG中,是有MESI比特位的,這兩個DSU通過ACE/CHI 接口發起的讀寫是帶有MESI信號的,所以他們是支持MESI協議的。

b8cbab70-bf93-11ec-9e50-dac502259ad0.png

再舉一個例子,一個DSU cluster 和一個接到SMMU上的DMA,此時正好對應一個是ACE/CHI Master,一個ACE-lite Master,由于DMA/SMMU中并沒有MESI狀態位,他們也不會發起帶有MESI信號的讀寫,所以這兩個Master之間是不支持MESI協議的。

b8e11320-bf93-11ec-9e50-dac502259ad0.png

2.3dynamIQ架構同一個core中的L1和L2 cache

dynamIQ架構core中的L1和L2 cache不存在緩存一致性的問題,但有分配和替換策略。

我們先看一下DynamIQ架構中的cache中新增的幾個概念:

(1)Strictly inclusive: 所有存在L1 cache中的數據,必然也存在L2 cache中

(2)Weakly inclusive: 當miss的時候,數據會被同時緩存到L1和L2,但在之后,L2中的數據可能會被替換

(3)Fully exclusive: 當miss的時候,數據只會緩存到L1

其實inclusive/exclusive屬性描述的正是是 L1和L2之間的替換策略,這部分是硬件定死的,軟件不可更改的。

我們再以 ARMV9 cortex-A710為例,查看其TRM手冊,得知:

b8f4855e-bf93-11ec-9e50-dac502259ad0.png

L1 I-cache和L2之間是 weakly inclusive的

L1 D-cache和L2之間是 strictly inclusive的

也就是說:

當發生D-cache發生miss時,數據緩存到L1 D-cache的時候,也會被緩存到L2 Cache中,當L2 Cache被替換時,L1 D-cache也會跟著被替換

當發生I-cache發生miss時,數據緩存到L1 I-cache的時候,也會被緩存到L2 Cache中,當L2 Cache被替換時,L1 I- cache不會被替換

所以總結一下就是 :L1 和 L2之間的cache的替換策略,針對I-cache和D-cache可以是不同的策略,每一個core都有每一個core的做法,這部分是硬件決定的,請查閱你使用core的TRM手冊。

3.MESI協議的介紹

本協議適用于:

big.LITTLE架構中多核緩存一致性

dynamIQ架構中多核緩存一致性

多cluster之間緩存一致性

b90a4588-bf93-11ec-9e50-dac502259ad0.png

其實也適用于:

不同cluster之間多核的緩存一致性

b92544fa-bf93-11ec-9e50-dac502259ad0.png

然后接下來,我們開始學習MESI協議,注意著僅僅是一個協議 ,它既不是軟件也不是硬件,算上一個標準吧。首先是Modified Exclusive Shared Invalid (MESI) 協議中定義了4個狀態:

MESI State Definition
Modified (M) 這行數據有效,數據已被修改,和內存中的數據不一致,數據只存在于該高速緩存中
Exclusive (E) 這行數據有效,數據和內存中數據一致,數據只存在于該高速緩存中
Shared (S) 這行數據有效,數據和內存中數據一致,多個高速緩存有這行數據的副本
Invalid (I) 這行數據無效

其次,在ARM的部分的core中,定義了第五種狀態 SharedModified,這種稱之為 MOESI協議.我查詢大量的Core的TRM手冊,信息如下:

使用MESI協議的core有:A710 A510 A78 A77 A76 A75 A72 A57 A55...

使用MOESI協議的core有:A7 A15 A53

發現問題了沒?并不是網上主流博客所說,arm一般都用MOESI。請記住arm主流core在使用的是MESI。所以接下來,我們也不會再介紹和學習MOESI了。

然后我們通過數據流圖的方式,觀看下MESI這四種狀態的情況:

b935f520-bf93-11ec-9e50-dac502259ad0.png

MESI狀態之間的切換:

b94c8196-bf93-11ec-9e50-dac502259ad0.png

Events:RH = Read HitRMS = Read miss, sharedRME = Read miss, exclusiveWH = Write hitWM = Write missSHR = Snoop hit on readSHI = Snoop hit on invalidateLRU = LRU replacement
Bus Transactions:Push = Write cache line back to memoryInvalidate = Broadcast invalidateRead = Read cache line from memory

學到這里,我們對多核之間緩存一致性也有了大概的理解,我們也知道了MESI是干啥的了,那么我們繼續拋幾個問題:(1)、為什么說“多核之間的緩存一致性,遵從MESI協議,是DSU/SCU來維護”的?

其實吧,這也不是我說的,這來自ARM官方文檔:

對于big.LITTLE架構,SCU是這樣描述的:

b95cc9ca-bf93-11ec-9e50-dac502259ad0.png

對于dynamIQ架構,DSU文檔中這樣描述的:

b9718716-bf93-11ec-9e50-dac502259ad0.png

(2)、MESI的狀態位記錄在哪里的?以 ARMV9 cortex-A710為例,記錄在core cache的TAG中的BIT[1:0]中,即在TAG中。

b981c086-bf93-11ec-9e50-dac502259ad0.png

對于big.LITTLE架構SCU的L2 cache、dynamIQ架構的DSU L3 cache中的TAG中,也都是有MESI比特位的,不過這一點在 armARMs和 trm文檔都是找不到的,不過在一些的PPT上是可以看到的。

b997e47e-bf93-11ec-9e50-dac502259ad0.png

4.ACE維護的緩存一致性

ACE master是接到 CCI 緩存互聯總線上的, 在 CCI Interconnect中,其實也是有一個Snoop Filter單元。ACE協議和Snoop filter單元一起來完成了ACE Master之間的緩存一致性。

b9ac9a86-bf93-11ec-9e50-dac502259ad0.png

snoop filter的主要作用:用于記錄存儲在ACE中的緩存。

Snoop Filter可以在未命中的情況下響應偵聽事務,并偵聽適當的主控只有在命中的情況下。Snoop Filter條目通過觀察來自 ACE 主節點的事務來維護以確定何時必須分配和取消分配條目。

Snoop Filter可以響應多個一致性請求,而無需向所有master廣播ACE 接口。例如,如果地址不在任何緩存中,則Snoop Filter會以未命中和將請求定向到內存。如果地址在處理器緩存中,則請求被視為命中,并且指向在其緩存中包含該地址的 ACE 端口

以下也舉了一個多cluster之間緩存一致性的示例,A53 cluster讀取A57 cluster緩存一致性數據。

b9c1c708-bf93-11ec-9e50-dac502259ad0.png

(1). Cortex-A53 cluster 發出 Coherent Read Request。

(2). CCI-400 將請求傳遞Request以窺探 Cortex-A57 cluster 緩存。

(3). 收到請求后,Cortex-A57 cluster會檢查其數據緩存的可用性并以所需信息進行響應。

(4). 如果請求的數據在緩存中,CCI-400 將數據從 Cortex-A57 cluster移動到 Cortex-A53 cluster,從而導致 Cortex-A53 cluster中的緩存行填充。

5.軟件定義的緩存和替換策略

以上的multi cores、multi cluster、system之間的緩存策略或協議,都是由硬件決定,軟件改不了。那么我們軟件可以做什么呢?其實,在軟件的MMU頁表的entry中的屬性位中,是可以定義該頁面內存的緩存策略的。如果軟件定義了內存位non-cacheable或non-shareable,那么以上的"硬件維護的一致性"將不會生效。接下來對,軟件定義的緩存策略做了一個小小的總結。

b9d4ee00-bf93-11ec-9e50-dac502259ad0.png

總結了一下shareable、cacheable屬性對緩存策略的影響:

Non-cacheable write-back
cacheable
write-through
cacheable
non-shareable 數據不會緩存到cache
(對于觀察則而言,又相當于outer-shareable)
core訪問該內存時,數據只緩存的到Core的 cache 中,不會緩存到其它cache中 同左側
inner-shareable 數據不會緩存到cache
(對于觀察則而言,又相當于outer-shareable)
core訪問該內存時,數據只會緩存到core的cache和 cluster的 cache中,該地址的TAG也不會存到snoop filter中,即不會被其它ACE Master snoop 同左側
outer-shareable 數據不會緩存到cache
(對于觀察則而言,又相當于outer-shareable)
core訪問該內存時,數據只會緩存到core的cache和 cluster的 cache中,該地址的TAG會存到snoop filter中,會被其它ACE Master snoop 同左側

6.動圖示例

前置條件:dynamIQ架構、L1 Data weakly inclusive、讀寫的內存配置位outer-shareable/write-back cacheable
步驟:

(1)、core0 讀取了一行數據,數據緩存到了core0的L1 Dcache、L2 cache

(2)、隨后core0的L2 中的數據是有可能會被替換出

(3)、core1 也讀取了該行數據,數據緩存到了core1的L1 Dcache、L2 cache、L3 cache

(4)、隨后core1的L2 中的數據也是有可能會被替換出

(5)、core4 也讀取了該行數據,數據緩存到了core4的L1 Dcache、L2 cache

(6)、隨后core4的L2 中的數據也是有可能會被替換出

(7)、至此,core0的L1、core1的L1、cluster0的L3、core4的L1 中都緩存了該數據。core0的L2、core1的L2、core4的L2 可能緩存了該行數據

b9ebaf6e-bf93-11ec-9e50-dac502259ad0.gif

審核編輯 :李倩

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

    關注

    68

    文章

    19470

    瀏覽量

    231457
  • 協議
    +關注

    關注

    2

    文章

    606

    瀏覽量

    39379
  • 總線
    +關注

    關注

    10

    文章

    2909

    瀏覽量

    88514

原文標題:深入學起Cache系列 3 : 多核多Cluster多系統之間的緩存一致性

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

收藏 人收藏

    評論

    相關推薦

    如何解決數據庫與緩存一致性

    緩存一致性 每次逢年過節的時候搶票非常艱難,放票的時候那么多人同時去搶票,如果所有人查詢、購票等都去訪問數據庫,那數據庫的壓力得有多大,這時候很多都會引入緩存, 把車票信息放入緩存,這
    的頭像 發表于 09-25 15:25 ?1186次閱讀
    如何解決數據庫與<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    請問如何保證片AD1278的通道之間相位一致性

    讀取手冊,發現要保證片AD1278的通道之間相位一致性需要兩點:1、CLK一致;2、SYNC_N同時拉高。 我的情況: 1、各個AD1278的CLK來著不同的時鐘源,即分別采用1
    發表于 01-14 06:02

    S32G274ardb2應該進行哪些設置來保持集群之間緩存一致性

    Cluster1 之間緩存一致性是否保持?如果不是,應該進行哪些設置來保持集群之間緩存
    發表于 03-15 07:01

    速度不可測的異構智能體系統一致性分析

    近年來,隨著異構系統在實際中的廣泛應用,異構智能體系統一致性分析成為研究熱點。針對階部分智能體控制輸入有界、二階智能體速度不可測的異構
    發表于 11-17 15:08 ?9次下載

    時延異構自主體系統的群一致性分析

    針對由階自主體和二階自主體構成的異構自主體系統的靜態群一致性問題,分別提出了在固定連接拓撲和切換連接拓撲結構下的靜態群一致性算法。通過構
    發表于 12-19 18:48 ?0次下載
    時延異構<b class='flag-5'>多</b>自主體<b class='flag-5'>系統</b>的群<b class='flag-5'>一致性</b>分析

    Cache一致性協議優化研究

    問題的由來.總結了多核時代高速緩存一致性協議設計的關鍵問題,綜述了近年來學術界對一致性的研究.從程序訪存行為模式、目錄組織結構、一致性粒度、
    發表于 12-30 15:04 ?0次下載
    Cache<b class='flag-5'>一致性</b>協議優化研究

    如何使用異質智能體系統進行滯后一致性跟蹤控制

    針對階、二階混合異質智能體系統的滯后一致性問題,提出了種基于牽制控制的分布式滯后一致性控制
    發表于 12-18 17:21 ?8次下載
    如何使用異質<b class='flag-5'>多</b>智能體<b class='flag-5'>系統</b>進行滯后<b class='flag-5'>一致性</b>跟蹤控制

    自主駕駛系統將使用緩存一致性互連IP和非一致性互連IP

    代ASIL B(D)自主駕駛系統將使用符合ISO 26262標準的緩存一致性互連IP和非一致性互連IP來實現。 美國加利福尼亞州坎貝爾2
    的頭像 發表于 05-09 17:13 ?3299次閱讀

    管理基于Cortex?-M7的MCU的高速緩存一致性

    本文檔概述了不同場景下的高速緩存一致性問題,并就如何管理或避免高速緩存一致性問題提供了些方法建議。
    發表于 04-01 10:12 ?5次下載
    管理基于Cortex?-M7的MCU的高速<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    在線迭代聚類的傳感器一致性數據融合方法

    在線迭代聚類的傳感器一致性數據融合方法
    發表于 06-23 11:11 ?9次下載

    搞定緩存一致性驗證,多核SoC設計就成功了

    ? ? 原文標題:搞定緩存一致性驗證,多核SoC設計就成功了半 文章出處:【微信公眾號:新思科技】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 12-29 21:35 ?849次閱讀

    本周五|搞定緩存一致性驗證,多核SoC設計就成功了

    ? ? 原文標題:本周五|搞定緩存一致性驗證,多核SoC設計就成功了半 文章出處:【微信公眾號:新思科技】歡迎添加關注!文章轉載請注明出處。
    的頭像 發表于 01-05 16:55 ?561次閱讀

    如何保證緩存一致性

    “ 本文的參考文章是2022年HOT 34上Intel Rob Blakenship關于CXL緩存一致性篇介紹。”
    的頭像 發表于 10-19 17:42 ?1281次閱讀
    如何保證<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    Redis緩存與Mysql如何保證一致性

    基本流程就是客戶端A請求,先去刪除緩存,然后將數據寫入數據庫,此時客戶端B查詢先去查詢緩存緩存沒有返回,去查數據庫,此時還沒有完成主從同步,拿到是從庫的舊數據,然后將舊數據進行緩存
    的頭像 發表于 12-02 14:23 ?992次閱讀
    Redis<b class='flag-5'>緩存</b>與Mysql如何保證<b class='flag-5'>一致性</b>?

    異構計算下緩存一致性的重要

    在眾多回復中,李博杰同學的回答被認為質量最高。他首先將緩存一致性分為兩個主要場景:是主機內CPU與設備間的一致性;二是跨主機的一致性
    的頭像 發表于 10-24 17:00 ?843次閱讀
    異構計算下<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>
    主站蜘蛛池模板: 黄网站视频 | 久久天堂网 | 亚洲国产精品久久婷婷 | 日本aaaaa级毛片片 | 亚洲91| 国内一级毛片 | 久久99色 | 亚洲久久草 | 四虎在线免费视频 | 天堂8中文在线最新版在线 天堂8资源8在线 | 久久精品亚瑟全部免费观看 | 四虎在线最新永久免费 | 91三级视频 | 午夜高清在线 | 国产成在线观看免费视频 | 久久婷婷综合五月一区二区 | 极品美女洗澡后露粉嫩木耳视频 | 日韩免费一级毛片 | 操他射他影院 | 色综合网天天综合色中文男男 | 亚洲视频第一页 | 日韩一区二区三区免费 | xxxx日本在线播放免费不卡 | 天天色天天综合网 | 三级网站在线播放 | 色色色色色色网 | 亚欧免费视频一区二区三区 | 性欧美xxxxhd | 年轻的护士3 | 午夜剧场操一操 | 免费又黄又硬又大爽日本 | 中国一级毛片aaa片 中国一级特黄aa毛片大片 | 久久99热精品 | 天天色成人 | 午夜视频黄色 | h国产在线观看 | 精品卡1卡2卡三卡免费视频 | 性无码专区无码 | 乱码一区二区三区完整视频 | 免费看男女下面日出水视频 | 欧美啪啪精品 |