1. 程式人生 > >MESI-CPU快取一致性協議

MESI-CPU快取一致性協議

MESI(Modified Exclusive Shared Or Invalid)(也稱為伊利諾斯協議,是因為該協議由伊利諾斯州立大學提出)是一種廣泛使用的支援寫回策略的快取一致性協議,該協議被應用在Intel奔騰系列的CPU中,詳見“support the more efficient write-back cache in addition to the write-through cache previously used by the Intel 486 processor”

MESI協議中的狀態

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

M: 被修改(Modified)

該快取行只被快取在該CPU的快取中,並且是被修改過的(dirty),即與主存中的資料不一致,該快取行中的記憶體需要在未來的某個時間點(允許其它CPU讀取請主存中相應記憶體之前)寫回(write back)主存。當被寫回主存之後,該快取行的狀態會變成獨享(exclusive)狀態。

E: 獨享的(Exclusive)

該快取行只被快取在該CPU的快取中,它是未被修改過的(clean),與主存中資料一致。該狀態可以在任何時刻當有其它CPU讀取該記憶體時變成共享狀態(shared)。同樣地,當CPU修改該快取行中內容時,該狀態可以變成Modified狀態。

S: 共享的(Shared)

該狀態意味著該快取行可能被多個CPU快取,並且各個快取中的資料與主存資料一致(clean),當有一個CPU修改該快取行中,其它CPU中該快取行可以被作廢(變成無效狀態(Invalid))。

I: 無效的(Invalid)

該快取是無效的(可能有其它CPU修改了該快取行)。

MESI狀態轉換圖

狀態之間的相互轉換關係也可以使用下表進行表示。

 M   E   S   I 
 M  Red X Red X Red X Green tick
 E  Red X Red X Red X Green tick
 S  Red X Red X Green tick Green tick
 I  Green tick
Green tick Green tick Green tick

操作:

在一個典型系統中,可能會有幾個快取(在多核系統中,每個核心都會有自己的快取)共享主存匯流排,每個相應的CPU會發出讀寫請求,而快取的目的是為了減少CPU讀寫共享主存的次數。

一個快取除在Invalid狀態外都可以滿足cpu的讀請求,一個invalid的快取行必須從主存中讀取(變成S或者 E狀態)來滿足該CPU的讀請求。

一個寫請求只有在該快取行是M或者E狀態時才能被執行,如果快取行處於S狀態,必須先將其它快取中該快取行變成Invalid狀態(也既是不允許不同CPU同時修改同一快取行,即使修改該快取行中不同位置的資料也不允許)。該操作經常作用廣播的方式來完成,例如:Request For Ownership (RFO)

快取可以隨時將一個非M狀態的快取行作廢,或者變成Invalid狀態,而一個M狀態的快取行必須先被寫回主存。

一個處於M狀態的快取行必須時刻監聽所有試圖讀該快取行相對就主存的操作,這種操作必須在快取將該快取行寫回主存並將狀態變成S狀態之前被延遲執行。

一個處於S狀態的快取行也必須監聽其它快取使該快取行無效或者獨享該快取行的請求,並將該快取行變成無效(Invalid)。

一個處於E狀態的快取行也必須監聽其它快取讀主存中該快取行的操作,一旦有這種操作,該快取行需要變成S狀態。

對於M和E狀態而言總是精確的,他們在和該快取行的真正狀態是一致的。而S狀態可能是非一致的,如果一個快取將處於S狀態的快取行作廢了,而另一個快取實際上可能已經獨享了該快取行,但是該快取卻不會將該快取行升遷為E狀態,這是因為其它快取不會廣播他們作廢掉該快取行的通知,同樣由於快取並沒有儲存該快取行的copy的數量,因此(即使有這種通知)也沒有辦法確定自己是否已經獨享了該快取行。

從上面的意義看來E狀態是一種投機性的優化:如果一個CPU想修改一個處於S狀態的快取行,匯流排事務需要將所有該快取行的copy變成invalid狀態,而修改E狀態的快取不需要使用匯流排事務。