1. 程式人生 > >MSI cache一致性協議

MSI cache一致性協議

按照快取記憶體的寫策略的不同,有寫直達和寫回WB兩種快取記憶體:

  1. 寫直達快取記憶體:一旦快取記憶體中的一個字被修改,則在主存中要立即修改
  2. 寫回快取記憶體: 並不是立即寫回,而是當被修改的字從快取記憶體中被替換或清除時,才真正修改主存

在偵聽協議的設計中,主要有兩種設計選擇:一是寫直達快取記憶體還是寫回快取記憶體,二是寫無效WI,還是寫更新WU協議

MSI協議

三態寫回無效MSI(modified,shared,invalid)

狀態:

  1. 無效 I 狀態:
  2. 共享 S 狀態:它意味著該塊在快取記憶體中未被修改過,主存中是最新的,在其他快取記憶體中可能有也可能沒有該塊的拷貝
  3. 修改 M 狀態:它意味著只有該快取記憶體中有該塊的最新拷貝,主存中的拷貝是過時的,在其他快取記憶體中沒有該塊的有效拷貝。

事件:

快取記憶體一致性協議中,每個快取記憶體控制器接收兩方面的輸入:

  1. 處理器發出的請求:處理器讀PrRd處理器寫PrWr
  2. 匯流排上偵聽到的事務:匯流排讀BusRd匯流排互斥讀BusRdx匯流排寫回BusWB
    • 匯流排讀BusRd:快取記憶體控制器將地址放到總線上,請求一個數據塊,由主存或者Cache提供資料。
    • 匯流排互斥讀:請求資料塊,該目的是要修改該資料塊,並且自己獨佔,其他cache都無效。
    • 匯流排寫回BusWB:cache將資料塊寫入記憶體

為了支援上面的事件,快取記憶體控制器又提供了一種新事件:FLUSH,目的是為了響應出現在總線上的事務,並能把該事務所請求的塊從快取中cache直接放到總線上,而不是通過記憶體再傳進資料。

這裡寫圖片描述

上圖中A/B表示快取記憶體控制器觀察到事件A發生了,或者說由於事件A導致了該轉換的發生,除了發生狀態轉換外,還要產生一個動作B;“-”表示空動作,Flush動作表示由快取記憶體來請求塊到總線上。

無效狀態:

  1. 當有處理器讀PrRd事件時,就會發生cache miss這樣就會裝入新資料,但此時其他的cache可能有也可能沒有,所以進入S狀態,當然需要匯流排讀事件的支援,所以觸發匯流排讀事件BusRd
  2. 當有處理器寫PrWr事件時,會導致cache miss,呼叫匯流排互斥讀BusRdX事件(目的是告訴其他cache我要修改這個cache,你們先都無效掉),把要寫入的資料裝入cache(這是由於採用寫直達且不分配策略),然後再修改,這時就會進入M狀態

共享狀態:

  1. 當有處理器讀PrRd事件時,因為資料就在本cache內且是最新的所以直接命中,還是S狀態。
  2. 當有處理器寫PrWr事件時,呼叫匯流排互斥讀BusRdX事件(目的是告訴其他cache我要修改這個cache,你們先都無效掉),當更新資料後,需要進入M狀態,告知這是最新的資料,主存中的資料也是過時的。
  3. 當接收到總線上有讀BusRd的事件時,當在共享態接受到別人的匯流排讀資訊時,與我無關,所以還是S狀態。
  4. 當接收到總線上有互斥讀BusRdX的事件時,我知道你要當老大了,所以我也只能聽從你的安排,把自己無效掉。進入I狀態

修改過狀態:

  1. 當有處理器讀PrRd事件時,因為為讀事件,且M代表當前cache的資料是要比其他的新,所以直接命中,不影響其他cache。所以進入M狀態
  2. 當有處理器寫PrWr事件時,同樣也是因為當前cache是最新的,所以直接更新寫,對其他cache不產生影響,所以還是進入M狀態。
  3. 當接收到總線上有讀BusRd的事件時,因為現在我在M狀態,我的資料是最新的,所以當然由我提供資料,所以產生FLUSH事件,最後進入S狀態。
  4. 當接收到總線上有互斥讀BusRdX的事件時,因為你告訴我只能你當老大,沒辦法我只能讓出,但是讓出前我需要把玉璽交出來,所以先FLUSH,然後進入了無效I狀態讓你當老大。

以胡偉武老師著的《計算機體系結構(第二版)》第12章習題第6題為例,題目如下:

假設在一個雙CPU多處理器系統中,兩個CPU用單匯流排連線,並且採用監聽一致性協議(MSI),cache的初始狀態均為無效,然後兩個CPU對記憶體中統一資料塊進行如下操作:CPU A讀、CPU A寫、CPU B寫、CPU A讀,寫出每次訪問後兩個CPU各自的cache的狀態變化。

事件 A狀態 B狀態
初始狀態 I I
CPU A讀 S I
CPU A寫 M I
CPU B寫 I M
CPU A讀 S S

接下來分析CPU A/B中各自cache的狀態變化:

  1. 初始狀態時,cache均為無效,即為I;
  2. CPU A讀:
    • 當CPU A的cache處於無效狀態時,有處理器讀PrRd事件發生,就會發生cache miss這樣就會裝入新資料,但此時其他的cache可能有也可能沒有,所以進入S狀態,當然需要匯流排讀事件的支援,所以觸發匯流排讀事件BusRd。此時CPU A的cache狀態為S狀態。
    • 此時CPU B的cache依舊處於無效狀態。
  3. CPU A寫:
    • 當CPU A的cache處於共享狀態(S)時,有處理器寫PrWr事件發生,呼叫匯流排互斥讀BusRdX事件(目的是告訴其他cache我要修改這個cache,你們先都無效掉),當更新資料後,需要進入M狀態,告知這是最新的資料,主存中的資料也是過時的。此時CPU A的cache狀態為M狀態。
    • 此時CPU B的cache依舊處於無效狀態。
  4. CPU B寫:
    • 當CPU B的cache處於無效狀態(I)時,有處理器寫PrWr事件發生,會導致cache miss,呼叫匯流排互斥讀BusRdX事件(目的是告訴其他cache我要修改這個cache,你們先都無效掉),把要寫入的資料裝入cache(這是由於採用寫直達且不分配策略),然後再修改,這時就會進入M狀態。
    • 此時處於M狀態的CPU A cache,通過匯流排偵聽到有匯流排互斥讀BusRdX事件發生,則把自己的cache狀態給無效掉了,此時,CPU A的cache狀態為I狀態。
  5. CPU A讀:
    • 當CPU A的cache處於無效狀態時,有處理器讀PrRd事件發生,就會發生cache miss這樣就會裝入新資料,但此時其他的cache可能有也可能沒有,所以進入S狀態,當然需要匯流排讀事件的支援,所以觸發匯流排讀事件BusRd。此時CPU A的cache狀態為S狀態。
    • 此時處於M狀態的CPU B cache,通過匯流排偵聽到有讀BusRd的事件時,因為現在我在M狀態,我的資料是最新的,所以當然由我提供資料,所以產生FLUSH事件,最後進入S狀態。

相關推薦

MSI cache一致性協議

按照快取記憶體的寫策略的不同,有寫直達和寫回WB兩種快取記憶體: 寫直達快取記憶體:一旦快取記憶體中的一個字被修改,則在主存中要立即修改 寫回快取記憶體: 並不是立即寫回,而是當被修改的字從快取記憶體中被替換或清除時,才真正修改主存 在偵聽協議的

多處理器系統MESI cache一致性協議

      一致性要求是指,若cache中某個字被修改,那麼在主存(以及更高層次)上,該字的副本必須立即或最後加以修改,並確保它者引用主存上該字內容的正確性。  當代多處理器系統中,每個處理器大都有自己的cache。同一主存塊的拷貝能同時存於不同cache中,若允許處理器各

《大話處理器》Cache一致性協議之MESI

 Cache一致性協議之MESI          處理器上有一套完整的協議,來保證Cache一致性。比較經典的Cache一致性協議當屬MESI協議,奔騰處理器有使用它,很多其他的處理器都是使用它的變種。單核Cache中每個Cache line有2個標誌:dirty和vali

Cache一致性協議MESI

今天談一談Cache(快取記憶體)如何保持一致性。 一個比較經典的協議MESI協議是如何保證Cache和記憶體的一致性的。 都知道Cache的誕生是因為動態記憶體太慢跟不上CPU的步伐,所以有了小儲存空間的cache在中間做為一個過渡。也就是cache裡會有

快取一致性協議MESI,cpu cache

不論是cpu中cache快取還是專案開發中的快取,快取的好處是提高執行速度,帶來的問題是如何保證快取一致性。cpu的內建快取保證與主記憶體一致性的方法有2種:1.匯流排鎖(鎖住匯流排,同步cpu快取與記憶體中的髒資料,效率低) 2.快取一致性協議(MESI)mesi,表示cp

[從Paxos到ZooKeeper][分布式一致性原理與實踐]<二>一致性協議

邏輯 計算機 二階段提交 是否 組成 原子性 per 缺點 兩種 Overview 在<一>有介紹到,一個分布式系統的架構設計,往往會在系統的可用性和數據一致性之間進行反復的權衡,於是產生了一系列的一致性協議。 為解決分布式一致性問題,在長期的探索過程中,湧現

主從DB與cache一致性

細節 href gem scene 邏輯 答案 導致 數據庫主從 blank 本文主要討論這麽幾個問題: (1)數據庫主從延時為何會導致緩存數據不一致 (2)優化思路與方案 一、需求緣起 上一篇《緩存架構設計細節二三事》中有一個小優化點,在只有主庫時,通過“串行化”的思

分布式筆記(二)一致性協議

分析 text 如何 更多 區別 accept 進行 當前 分布式系統 一致性協議 一、2PC與3PC 請自行回憶2PC與3PC的過程,及在正式提交階段的處理單點問題的區別。分析各自的優缺點。 二、Paxos算法 一)Paxos算法解決的問題:分布式系統中如何對一個問題

Zookeeper的一致性協議:Zab

支持 源碼 proc 源碼實現 multipl 客戶端連接 red 使用 補充 Zookeeper使用了一種稱為Zab(Zookeeper Atomic Broadcast)的協議作為其一致性復制的核心,據其作者說這是一種新發算法,其特點是充分考慮了Yahoo的具體情況:高

Cache一致性與DMA

緩存 重新 得到 失效 必須 index 數據 直接 寫入 cache一致性與DMA 第一個問題 對於進行DMA操作的設備, 並不是所有系統都保持它們的cache一致性。在這種情況下, 準備進行DMA的設備可能從RAM得到陳舊的數據, 因為臟的cache行可能還駐留在各個C

Zookeeper - 簡述分布式一致性協議(2pc、3pc、paxos、zab)

傳遞 val 其他 中斷 可選 2pc 不一致 操作 nco 分布式一致性協議 二階段提交協議(2pc) 三階段提交協議(3pc) paxos zab 在分布式系統中,每個機器都可以確定自己進行的事務操作是否成功,但是無法直接了解其他機器的操作結果。因此,當一個分布式事

【58沈劍架構系列】主從DB與cache一致性

帶來 時序 增長 卡住 而是 一個 png bubuko 為什麽 本文主要討論這麽幾個問題: (1)數據庫主從延時為何會導致緩存數據不一致 (2)優化思路與方案 一、需求緣起 上一篇《緩存架構設計細節二三事》中有一個小優化點,在只有主庫時,通過“串

分布式一致性協議介紹(Paxos、Raft)

設置 -s ssi 選擇 參與 follow 初始 red 但是 兩階段提交 Two-phase Commit(2PC):保證一個事務跨越多個節點時保持 ACID 特性; 兩類節點:協調者(Coordinator)和參與者(Participants),協調者只有一個,參與

圖解分布式一致性協議Paxos

算法 gre 全局 having flow 特殊情況 競爭 set 多重 Paxos協議/算法是分布式系統中比較重要的協議,它有多重要呢? <分布式系統的事務處理>: Google Chubby的作者Mike Burrows說過這個世界上只有一種一致性算法,那

分布式事務及其一致性協議

比較 單元 隔離級別 中心 asi 支持 系統數據 原子操作 space 一:什麽是事務。事務是由一系列對系統中的數據進行訪問和更新的操作所組成的一個程序執行邏輯單元。狹義上的事務指的就是數據庫的事務。二:事務(ACID)的特性。事務具有四個特性:1.一致性(Consist

Amazon Aurora: 如何不使用一致性協議實現分布式數據庫

multiple ble 個人觀點 裏的 每一個 轉換 min 題目 transacti 摘要: 這個是Amazon Aurora 發的第二篇文章, 發在2018 年SIGMOD上, 題目很吸引人避免在I/O, commit, 成員變更的過程使用一致性協議. 在大家都在使用

分散式學習筆記九:一致性協議

2PC與3PC 在分散式系統中,每一個機器節點雖然都能夠明確地知道自己在進行事務操作過程中的結果是成功或失敗,但卻無法直接獲取到其他分散式節點的操作結果。因此,當一個事務操作需要跨越多個分散式節點的時候,為了保持事務處理的ACID特性,就需要引入一個稱為"協調者(Coordinator)"的元件

分散式一致性協議之Paxos演算法

最近特別喜歡一句話:實踐是最好的成長,發表是最好的記憶。 筆者在今年國慶7天沒有回家,累計有6天的時間是在公司度過,要麼寫部落格,要麼看書。我記得當時寫的關於分散式系統一致性的原理和實踐。作者是倪超。書名《從Paxos到Zookeeper分散式一致性原理與實踐》。當時就想要通過發表Paxos來跟自己做心靈的

分散式一致性協議Paxos

轉自:https://blog.csdn.net/qq_35440678/article/details/78080431 什麼是paxos協議? Paxos用於解決分散式系統中一致性問題。分散式一致性演算法(Consensus Algorithm)是一個分散式計算領域的基礎性

分散式應用中的一致性協議

在一個分散式系統中,需要一個規定來保證資料的一致性、各節點服務的容錯性等等,這個規定就是一致性協議。常見的分散式協議有2PC、3PC、Paxos和raft等。 2PC 即Two-Phase Commit,二階段提交。目前大多數的關係型資料庫都是採用2PC協議來完成分散式事務處理的。 執行過程