Cache一致性協議之MESI

2021-08-29 22:41:42 字數 2118 閱讀 8686

處理器上有一套完整的協議,來保證cache一致性。比較經典的cache一致性協議當屬mesi協議,奔騰處理器有使用它,很多其他的處理器都是使用它的變種。

單核cache中每個cache line有2個標誌:dirty和valid標誌,它們很好的描述了cache和memory(記憶體)之間的資料關係(資料是否有效,資料是否被修改),而在多核處理器中,多個核會共享一些資料,mesi協議就包含了描述共享的狀態。

在mesi協議中,每個cache line有4個狀態,可用2個bit表示,它們分別是: 

狀態描述

m(modified)

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

e(exclusive)

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

s(shared)

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

i(invalid)

這行資料無效。

mesi狀態

m(modified)和e(exclusive)狀態的cache line,資料是獨有的,不同點在於m狀態的資料是dirty的(和記憶體的不一致),e狀態的資料是clean的(和記憶體的一致)。

s(shared)狀態的cache line,資料和其他core的cache共享。只有clean的資料才能被多個cache共享。

i(invalid)表示這個cache line無效。

e狀態示例如下:

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

s狀態示例如下:

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

m狀態和i狀態示例如下:

m狀態和i狀態

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

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

mesi協議狀態遷移圖如下:

mesi協議狀態遷移圖

在上圖中,local read表示本核心讀本cache中的值,local write表示本核心寫本cache中的值,remote read表示其它核心讀其它cache中的值,remote write表示其它核心寫其它cache中的值,箭頭表示本cache line狀態的遷移,環形箭頭表示狀態不變。

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

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

當前狀態

mesi狀態遷移

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則不能。

--------------------- 

快取一致性協議MESI

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

MESI(快取一致性協議)

現在的處理器都是多核處理器,並且每個核都帶有多個快取 指令快取和資料快取,見下圖 為什麼需要快取呢,這是因為cpu訪問記憶體的速度比較慢,所以在cpu和記憶體之間加了個快取以提高訪問速度。既然每個核都有快取,那麼假設兩個核或者多個核同時訪問同乙個變數時這些快取是如何進行同步的呢 快取細分為乙個個快取...

快取一致性協議(MESI協議)

大家都知道,計算機在執行程式時,每條指令都是在cpu中執行的,而執行指令過程中,勢必涉及到資料的讀取和寫入。由於程式執行過程中的臨時資料是存放在主存 物理記憶體 當中的,這時就存在乙個問題,由於cpu執行速度很快,而從記憶體讀取資料和向記憶體寫入資料的過程跟cpu執行指令的速度比起來要慢的多,因此如...