MSI協定

MSI協定

監聽一致性協定通過利用匯流排將處理器核的私有Cache 和主存儲器連線在一起,每一個私有 Cache 中的控制器會時刻偵聽匯流排上的訊息,並根據訊息的類型做出相應的操作。MSI協定是一個在多處理器系統中運行的基本的監聽高速快取一致性協定。。與其他快取一致性協定一樣,協定名稱中“M,S,I”三個字母表明高速快取行可能的狀態。

簡介

在MSI協定中,快取中包含的每個塊可能處於以下三種狀態之一:

Modified(已修改):塊已在快取中已被修改,快取中的數據與後備存儲器(例如記憶體)中的數據不一致。具有“M”狀態的塊的快取在該塊被替換時需要將其中的內容寫回後備存儲。

Shared(共享):塊未被修改,並在至少一個處理器的快取中以唯讀狀態存在。高速快取可以將其替換而不將其中的數據寫回後備存儲。

Invalid(無效):該塊不存在於當前快取中,或者因為匯流排請求而被標記為無效。如果要將某個塊存儲在該快取中,則必須首先從記憶體或另一個高速快取中獲取該塊。

這些一致性狀態通過高速快取和後備存儲之間的通信進行維護。 當快取中的某個塊被讀或寫時,或者當快取通過匯流排接收到其他快取發出的讀寫信號時,它需要據此來做出動作並調整自己的狀態。

當快取收到讀取請求時,如果一個塊處於“M”或“S”狀態,則它會直接提供數據。但如果塊尚未被裝入快取(處於“I”狀態),則在裝入該塊之前,必須先要保證該地址的數據不會在其他快取的快取塊中處於“M”狀態。不同的快取架構處理這個問題的方式是不同的。例如,匯流排架構通常使用匯流排監聽來解決此問題,此時讀取請求將廣播給所有的快取。其他架構,例如快取目錄,則通過一個中介(例如目錄)來獲取哪一個快取擁有快取塊的最新副本。如果另一個快取中有處於“M”狀態的塊,則它必須將數據寫回後備存儲,並回到“S”或“I”狀態。在數據寫回之後,快取可以通過後備存儲或者其他快取中處於“S”狀態的對應塊獲取內容。之後快取會答覆讀取請求。在提供的數據後,快取塊處於“S”狀態。

當快取收到讀取請求時,如果一個塊處於"M"狀態,則緩只需要修改本地的數據。 如果塊處於"S"狀態,則快取必須通知其他的具有處於“S”狀態的同樣的塊的高速快取將其換出。和上文所述類似,這種通知可以通過匯流排監聽或快取目錄來進行。接下來快取會修改本地的數據。 如果塊處於"I"狀態,則快取必須通知其他的具有處於“S”或“M”狀態的同樣的塊的高速快取將其換出。如果塊在另一個快取中處於"M"狀態,那么它必須將數據寫回後備存儲或者將其提供給請求數據的快取。如果此時快取尚未裝載該塊的數據,則修改前要先將其從後備存儲讀入。在數據被修改之後,緩塊塊處於"M"的狀態。

優勢與不足

MSI 協定在解決快取一致性問題上有較大的優勢,主要表現為以下幾個方面:

首先,系統中的每一個數據塊都有狀態標識,通過現有狀態標識及匯流排傳輸的事務並依據狀態轉換圖進行數據塊狀態的轉換,整個流程有序進行,數據塊狀態不存在混淆的情況;

其次,可以使用匯流排、環形網等作為一致性事務的廣播介質,選材不單一;

再次,硬體實現的 MSI 協定在功能及可靠性上更顯健壯性;

最後,MSI 協定簡單而有效,並且匯流排作為互聯結構其掛接設備方便快捷,易於訊息傳輸。

但 MSI 協定也有其自身的不足:

首先,當多個私有快取中都含有同一個共享數據塊時,採用寫無效策略的MSI 協定會進行多次的寫作廢操作,增加流量負載;

其次,匯流排作為互斥資源其頻寬有限,即匯流排的擴展性差;最後,

MSI 協定是通過廣播的方式傳送一致性訊息,存在於匯流排上的訊息對於一些處理器核來說是不需要的,即匯流排的有效利用率受到影響   。

基於偵聽的高速快取一致性協定

基於監聽的一致性協定使用匯流排或者環形網進行一致性命令的廣播。小規模的多處理器常採用匯流排進行廣播。這種類型的機器是通過高速共享匯流排將商用的微處理器與共享存儲器連線起來,並且用硬體實現偵聽高速快取一致性協定,以保證高速快取一致性。偵聽高速快取一致性協定主要是利用了匯流排的特性。匯流排是一組連線多個設備的線路,匯流排上的每個設備都能偵聽到匯流排上出現的事務。在偵聽高速快取一致性協定的實現中,所有高速快取控制器都偵聽匯流排上出現的事務,一旦發現與自己相關的事務就執行相應的動作來保證高速快取一致性。

單片多處理器系統中,多個處理器核通過片內互聯的進行通訊。片內高速快取一致性自身的特點決定了它對可擴展性要求不高。因此,在單片多處理器的片內高速快取一致性設計時,實現簡單的監聽協定比強調可擴展的目錄協定更有吸引力。匯流排和環形網都可以方便地實現廣播,其中仲裁、匯流排長度、匯流排阻抗是匯流排設計中需要考慮的重要問題。而環形網將網路上的設備串聯起來,則不存在上面的問題。而從廣播的效率來看匯流排優於環形網。在多核處理器中,各處理器核集中在一個晶片內部,仲裁、匯流排長度、匯流排阻抗等問題不會給設計帶來太多麻煩。因此,匯流排廣播的方式也是多核處理器片內高速快取一致性實現中首選的方式。在偵聽高速快取一致性協定中,每個高速快取控制器接收的兩方面輸入處理器發出的記憶體請求和匯流排上偵聽到的事務。作為這些輸入的回響,高速快取控制器可能根據相應高速快取塊的當前狀態及狀態轉換圖來更新該塊的狀態,並且也可能要執行一些動作。比如,作為對處理器發出的讀請求的回響,高速快取控制器可能要產生一個匯流排事務來獲得數據,並返回給處理器。有時候,高速快取控制器也要參與到匯流排上偵聽到的事務中去,並作出回響。因此,偵聽協定實際上是一組互相協作的有限狀態機所代表的分散式算法,它由三部分組成:①狀態集合一個與本地高速快取塊相關聯的狀態集合②狀態轉換圖以當前狀態和處理器請求,或觀察到的匯流排事務作為輸入,並輸出該高速快取塊的下一個狀態③動作與每個狀態轉換相關的實際動作,這是由匯流排、高速快取和處理器的具體設計來決定。對同一個塊的不同狀態機不是獨立操作的,而是由匯流排事務來協調的   。

狀態機

處理器向高速快取發出的請求包括:

PrRd:處理器請求讀取一個快取塊。

PrWr:處理器請求改寫一個快取塊。

狀態圖的總交易MSI協定。

此外,還有匯流排方面的請求。 包括:

BusRd:當某個處理器的高速快取的讀操作出現未命中,它會向匯流排傳送一個BusRd請求,並預期能夠收到該快取塊的數據。

BusRdX:當某個處理器的高速快取的寫操作出現未命中,它會向匯流排傳送一個BusRdX請求,預期能夠收到該快取塊的數據,並且使其他處理器中對應相同地址的快取塊無效。

BusUpgr:當某個處理器的高速快取的寫操作命中時,它它會向匯流排傳送一個BusUpgr,使其他處理器中對應相同地址的快取塊無效。

Flush:該請求表明一個快取塊正在被寫回記憶體。

狀態轉移:

處於Invalid(無效)狀態的快取塊:

在PrRd,BusRd發出時,狀態變為Shared(共享)。

在PrWr,BusRdX發出時,狀態變為Modified(已修改)。

在BusRd,BusRdX或BusUpg發出時,狀態保持Invalid(無效)。

處於Shared(共享)狀態的快取塊:

在PrRd,BusRd發出時,狀態保持Shared(共享)。

在PrWr,BusUpgr發出時,狀態變為Modified(已修改)。

在BusRdX或BusUpgr發出時,狀態變為Invalid(無效)。

處於Modified(已修改)狀態的快取塊

在PrRd或PrWr發出時,狀態保持Modified(已修改)。

在BusRd發出時,快取塊被寫回,狀態變為Shared(共享)。

在BusRdX發出時,快取塊被寫回,狀態變為Invalid(無效)。

相關詞條

相關搜尋

熱門詞條

聯絡我們