MSI、MESI、MOESI 的差異:狀態數、Exclusive 狀態、Owned 狀態、通訊比較

MSI、MESI、MOESI 是在多核心的各快取所持有的快取列上標記狀態,使同一位址的資料不會發生不一致的協定。MSI 是只有 Modified、Shared、Invalid 3 種狀態的基本形式。MESI 加上 Exclusive(只有自己持有,且內容與記憶體相同),在寫入其他核心未持有的資料時,可省去匯流排上的通訊。MOESI 再加上 Owned 狀態,能在不將修改後的資料寫回記憶體的情況下,與其他快取共用。

項目MSIMESIMOESI
狀態數3 種(M、S、I)4 種(M、E、S、I)5 種(M、O、E、S、I)
Modified(M)只有自己持有,內容與記憶體不同相同相同
Shared(S)其他快取也可能持有。內容與記憶體相同相同其他快取也可能持有。內容也可能與記憶體不同(存在 O 狀態的快取列時)
Exclusive(E)無只有自己持有,內容與記憶體相同有(與 MESI 相同)
Owned(O)無無內容與記憶體不同,但其他快取也以 S 共用。負有寫回記憶體的責任
讀取其他核心未持有的資料時以 S 狀態載入以 E 狀態載入以 E 狀態載入
接著寫入該資料時為了從 S 變為 M,要在匯流排等發出使其他副本失效的要求可在無通訊的情況下從 E 變為 M可在無通訊的情況下從 E 變為 M
其他核心讀取 M 狀態的快取列時寫回記憶體,雙方都變為 S 狀態寫回記憶體,雙方都變為 S 狀態(也可能由快取直接傳送資料)不寫回就傳送資料,自己變為 O 狀態,對方變為 S 狀態
寫回記憶體每當修改過的快取列被其他核心讀取時發生每當修改過的快取列被其他核心讀取時發生可延後到 O 狀態的快取列被逐出時
表示狀態的位元數與複雜度2 位元。最簡單2 位元。中等3 位元。最複雜

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

MSI
學習一致性機制時的基本形式。想讓狀態轉移盡可能簡單時。
MESI
只有 1 個核心使用的資料讀寫很多時。由於 E 狀態,先讀後寫的處理可省去通訊。是許多多核心 CPU 協定的基礎。
MOESI
核心之間頻繁傳遞修改過的資料時。想減少寫回記憶體,節省記憶體頻寬時。

常見問題

MESI 的 E 狀態有什麼好處?

讀入其他核心未持有的資料時會成為 E 狀態,之後寫入時,不必通知其他核心就能變為 M 狀態。MSI 在相同情況下會以 S 狀態載入,因此每次寫入都必須發出失效要求。對於只有 1 個執行緒使用之資料的「先讀後寫」處理,可減少匯流排的通訊。

MOESI 的 O 狀態有什麼好處?

其他核心讀取修改過的資料(M 狀態)時,MESI 會先寫回記憶體再共用,而 MOESI 則不寫回,直接在快取之間傳送資料,由原本的快取以 O 狀態持續負起寫回的責任。可減少對記憶體的寫入。

E 狀態與 M 狀態有什麼不同?

兩者都是只有自己的快取持有該快取列。E 狀態的內容與記憶體相同,因此逐出時不需要寫回。M 狀態已被修改,內容與記憶體不同,因此逐出時需要寫回。

這些協定用於窺探式還是目錄式?

兩者都可以使用。MSI、MESI、MOESI 是快取列狀態的定義方式,與通知其他快取的方式(監視共用匯流排等的窺探式,或記錄快取列持有者的目錄式)是不同的議題。

理解度檢測

快取一致性協定MESI的四種狀態,下列哪一組是正確的?

  1. AMemory、Execute、Store、Index
  2. BModified、Exclusive、Shared、Invalid
  3. CMiss、Evict、Swap、Idle
查看答案與解析

正確答案:B. Modified、Exclusive、Shared、Invalid

在MESI中,快取的每條快取列(cache line)會處於下列其中一種狀態:已修改且僅自己持有的Modified、未修改但僅自己持有的Exclusive、多個核心持有相同內容的Shared,以及無效的Invalid。每當核心進行讀寫,或得知其他核心的讀寫時,狀態就會轉換,藉此避免相同位址的資料出現不一致。

在MESI協定中,快取列處於Modified(M)狀態時,其意義下列何者正確?

  1. A只有這個核心持有該快取列,且內容與主記憶體不同(需要寫回)
  2. B多個核心持有相同內容,且與主記憶體一致
  3. C此快取列的內容無法使用,要讀取必須重新取得
查看答案與解析

正確答案:A. 只有這個核心持有該快取列,且內容與主記憶體不同(需要寫回)

M狀態是指這個核心已經寫入,且只有自己持有最新的值。主記憶體中的值是舊的,因此在逐出此快取列,或其他核心要讀取時,必須將最新的值寫回或直接傳遞。對於M狀態的快取列,可以不通知其他核心而重複寫入,所以同一個核心連續寫入時能夠快速處理。

在MESI協定中,核心對處於Exclusive(E)狀態的快取列寫入時,其動作下列何者正確?

  1. A先向其他所有核心發送無效化請求,再進行寫入
  2. B無法寫入,所以要先寫入主記憶體再重新讀取
  3. C不需要通知其他核心,直接轉變為M狀態
查看答案與解析

正確答案:C. 不需要通知其他核心,直接轉變為M狀態

E狀態是只有這個核心持有該快取列,且內容與主記憶體相同的狀態。由於已知其他核心沒有副本,寫入時不必發出無效化通知就能轉為M狀態。設置E狀態的好處,在於讀取後再寫入僅單一核心使用的資料這種常見處理中,可以省去通訊。若是從S狀態寫入,則必須使其他副本失效。

  1. 在無效化型的一致性協定中,核心對處於Shared(S)狀態的快取列寫入時,會進行下列何種動作?
  2. 在MESI協定中,核心0以Modified(M)狀態持有某快取列,核心1要讀取它時,一般的動作為下列何者?
  3. 關於快取一致性的窺探(snooping)方式,下列說明何者正確?

前往多核心與同步的練習題

相關名詞的解說

MESI 協定(MESI protocol)
以 Modified、Exclusive、Shared、Invalid 四種狀態管理快取各行的一致性協定。寫入時會使其他核心的副本失效。
快取一致性
在多核心 CPU 中,各核心的快取內有相同位址的資料時,維持其內容一致性的機制。當某個核心改寫時,藉由讓其他核心的舊副本失效等方式來實現。
窺探(Bus snooping)
各快取監看共用匯流排等上流動的其他核心的讀寫,並改變自己快取行狀態的一致性方式。適合核心數少的情況。
快取行
快取與下層之間讀寫資料的單位。也稱為快取區塊。多數CPU為64位元組,位址的低位元表示行內的位置(位移)。
目錄式一致性(Directory-based coherence)
以表記錄各行由哪個核心持有,只通知相關核心的一致性方式。用於核心數多的系統。

相關的比較