CPU快取一致性協議 MESI詳解

2022-08-18 04:39:11 字數 3047 閱讀 9656

mesi(也稱伊利諾斯協議)是一種廣泛使用的支援寫回策略的快取一致性協議,該協議被應用在intel奔騰系列的cpu中。

mesi協議中的狀態

cpu中每個快取行使用的4種狀態進行標記(使用額外的兩位bit表示)

狀態描述

m(modified)

這行資料有效,資料被修改了,和記憶體中的資料不一樣,資料只存在於本cache中。

e(exclusive)

這行資料有效,資料和記憶體中的資料一致,資料只存下於本cache中    

s(shared)

這行資料有效,資料和記憶體中的資料一致,資料存在於很多cache中  

i(invalid)

這行資料無效

m和e的資料都是本core獨有的,不同之處是m狀態的資料是dirty(和記憶體中的不一致),e狀態的資料是clean(和記憶體中的一致)

s狀態是所有core的資料都是共享的,只有clean的資料才能被多個core共享

i表示這個cache line無效

e狀態

只有core 0訪問變數x,它的cache line狀態為e(exclusive)。

s狀態

3個core都訪問變數x,它們對應的cache line為s(shared)狀態。

m狀態和狀態之間的轉化

core 0修改了x的值之後,這個cache line變成了m(modified)狀態,其他core對應的cache line變成了i(invalid)狀態

在mesi協議中,每個cache的cache控制器不僅知道自己的讀寫操作,而且也監聽(snoop)其它cache的讀寫操作。每個cache line所處的狀態根據本核和其它核的讀寫操作在4個狀態間進行遷移

local read表示本核心讀本cache中的值,local write表示本核心寫本cache中的值,remote read表示其它核心讀其它cache中的值,remote write表示其它核心寫其它cache中的值,箭頭表示本cache line狀態的遷移,環形箭頭表示狀態不變。 當核心需要訪問的資料不在本cache中,而其它cache有這份資料的備份時,本cache既可以從記憶體中匯入資料,也可以從其它cache中匯入資料,不同的處理器會有不同的選擇。mesi協議為了使自己更加通用,沒有定義這些細節,只定義了狀態之間的遷移,下面的描述假設本cache從記憶體中匯入資料.

mesi狀態之間的遷移過程如下:

當前狀態

事件行為

下乙個狀態

i(invalid)

local read

如果其它cache沒有這份資料,本cache從記憶體中取資料,cache line狀態變成e;

如果其它cache有這份資料,且狀態為m,則將資料更新到記憶體,本cache再從記憶體中取資料,2個cache 的cache line狀態都變成s;

如果其它cache有這份資料,且狀態為s或者e,本cache從記憶體中取資料,這些cache 的cache line狀態都變成s

e/slocal write

從記憶體中取資料,在cache中修改,狀態變成m;

如果其它cache有這份資料,且狀態為m,則要先將資料更新到記憶體;

如果其它cache有這份資料,則其它cache的cache line狀態變成i

mremote read

既然是invalid,別的核的操作與它無關

iremote write

既然是invalid,別的核的操作與它無關

ie(exclusive)

local read

從cache中取資料,狀態不變

elocal write

修改cache中的資料,狀態變成m

mremote read

資料和其它核共用,狀態變成了s

sremote write

資料被修改,本cache line不能再使用,狀態變成i

is(shared)

local read

從cache中取資料,狀態不變

slocal write

修改cache中的資料,狀態變成m,

其它核共享的cache line狀態變成i

mremote read

狀態不變

sremote write

資料被修改,本cache line不能再使用,狀態變成i

im(modified)

local read

從cache中取資料,狀態不變

mlocal write

修改cache中的資料,狀態不變

mremote read

這行資料被寫到記憶體中,使其它核能使用到最新的資料,狀態變成s

sremote write

這行資料被寫到記憶體中,使其它核能使用到最新的資料,由於其它核會修改這行資料,

狀態變成i

imesi狀態遷移

amd的opteron處理器使用從mesi中演化出的moesi協議,o(owned)是mesi中s和m的乙個合體,表示本cache line被修改,和記憶體中的資料不一致,不過其它的核可以有這份資料的拷貝,狀態為s。

intel的core i7處理器使用從mesi中演化出的mesif協議,f(forward)從share中演化而來,乙個cache line如果是forward狀態,它可以把資料直接傳給其它核心的cache,而share則不能。

CPU 一致性快取協議MESI

計算機在執行指令的時候都是通過cpu進行逐條執行而在執行指令的過程中勢必涉及對資料的讀寫,而資料基本從磁碟載入到記憶體中cpu直接使用記憶體中的資料 由於cpu計算速度遠大於對記憶體的讀寫速度如果任何資料的讀寫都通過記憶體cpu的效率將會大打折扣,因此在cpu中引入暫存器作為快取記憶體提高系統效率例...

CPU快取一致性(MESI)協議

cpu在摩爾定律的指導下以每18個月翻一番的速度在發展,然而記憶體和硬碟的發展速度遠遠不及cpu。這就造成了高效能能的記憶體和硬碟 及其昂貴。然而cpu的高度運算需要高速的資料。為了解決這個問題,cpu廠商在cpu中內建了少量的快取記憶體以解決i o速度和cpu運算速度之間的不匹配問題。在cpu訪問...

快取一致性協議MESI

處理器上有一套完整的協議,來保證cache一致性。比較經典的cache一致性協議當屬mesi協議,奔騰處理器有使用它,很多其他的處理器都是使用它的變種。單核cache中每個cache line有2個標誌 dirty和valid標誌,它們很好的描述了cache和memory 記憶體 之間的資料關係 資...