多線程之: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」web

 

 

MESI協議中的狀態緩存

CPU中每一個緩存行(caceh line)使用4種狀態進行標記(使用額外的兩位(bit)表示):優化

M: 被修改(Modified)spa

該緩存行只被緩存在該CPU的緩存中,而且是被修改過的(dirty),即與主存中的數據不一致,該緩存行中的內存須要在將來的某個時間點(容許其它CPU讀取請主存中相應內存以前)寫回(write back)主存。事務

當被寫回主存以後,該緩存行的狀態會變成獨享(exclusive)狀態。ip

E: 獨享的(Exclusive)
內存

該緩存行只被緩存在該CPU的緩存中,它是未被修改過的(clean),與主存中數據一致。該狀態能夠在任什麼時候刻當有其它CPU讀取該內存時變成共享狀態(shared)。ci

一樣地,當CPU修改該緩存行中內容時,該狀態能夠變成Modified狀態。get

S: 共享的(Shared)it

該狀態意味着該緩存行可能被多個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同時修改同一緩存行,

即便修改該緩存行中不一樣位置的數據也不容許)。該操做常常做用廣播的方式來完成,例如:RequestFor Ownership (RFO)

緩存能夠隨時將一個非M狀態的緩存行做廢,或者變成Invalid狀態,而一個M狀態的緩存行必須先被寫回主存。

一個處於M狀態的緩存行必須時刻監聽全部試圖讀該緩存行相對就主存的操做,這種操做必須在緩存將該緩存行寫回主存並將狀態變成S狀態以前被延遲執行。

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

 

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

對於M和E狀態而言老是精確的,他們在和該緩存行的真正狀態是一致的。而S狀態多是非一致的,若是一個緩存將處於S狀態的緩存行做廢了,而另外一個緩存實際上可能已經

獨享了該緩存行,可是該緩存卻不會將該緩存行升遷爲E狀態,這是由於其它緩存不會廣播他們做廢掉該緩存行的通知,一樣因爲緩存並無保存該緩存行的copy的數量,

所以(即便有這種通知)也沒有辦法肯定本身是否已經獨享了該緩存行。

從上面的意義看來E狀態是一種投機性的優化:若是一個CPU想修改一個處於S狀態的緩存行,總線事務須要將全部該緩存行的copy變成invalid狀態,而修改E狀態的緩存不須要

使用總線事務。

相關文章
相關標籤/搜索