2014-11-25 32 views
2

MESI(修改,獨佔,共享,無效)協議用於CPU高速緩存進行通信,並確保它們都使用高速緩存行的最新值。當一個CPU修改高速緩存行值時,訂閱該高速緩存行的所有其他CPU都會對更改高速緩存行發出警報。MESI協議的性能成本?

然而,在所有的文學我讀了關於MESI如果有,而該協議通信的任何性能損失我沒見過?這筆費用是否只是x86 LOCK前綴成本的一部分?我相當肯定MESI即使在x86 LOCK前綴不可用時也可以使用?

NB英特爾實際使用MESIF協議 - 其中F是一個額外的「轉發」狀態。

+0

假設有一個高速緩存一致性協議只需要情況下的性能(和功率)執行的原子指令時是錯的。性能受到影響很大程度上取決於情況。但是,一個衆所周知的緩存一致性協議性能命中的例子是[錯誤共享](http://en.m.wikipedia.org/wiki/False_sharing) – Voo 2014-11-25 11:52:19

+0

這太寬泛了,你有許多類型的緩存類型(根據包容性,WB/WT,私有/共享等參數而變化)以及許多類型的MESI風格,有時甚至是同一CPU中的多種類型。你問哪一個?你想作爲基準檢查什麼選擇? – Leeor 2014-11-25 14:22:48

回答

0

MESI協議通過在CPU間總線上交換消息來工作(但實現了總線)。該總線的吞吐能力有限,因此可以使用原子指令使其飽和。

這就是爲什麼寫得不好的應用程序不必要地使用原子指令會對整個機器產生不利影響。

+1

如果你不使用原子指令,你還需要x86上的緩存一致性協議。原子指令更昂貴的原因是因爲它們必須鎖定總線。 – Voo 2014-11-25 11:36:35

+0

@Voo我很確定我沒有。 – 2014-11-25 11:37:23

+0

哦,你呢。簡單的例子:如果你沒有,錯誤的分享不會是一件事。 – Voo 2014-11-25 11:39:23

0

是的,MESI(F)協議被用於對所有存儲器操作(即,讀取和寫入)。想象一下,你已經寫了一些東西進入緩存(即'M'狀態),現在該行必須被驅逐。協議說你需要把它寫回內存。如果協議未被使用,那麼我們需要總是直接寫入內存(巨大的帶寬成本)或者存在不一致的內存(壞主意)。也就是說,如果沒有共享,MESI協議仍然會被使用,並且在這種情況下,這些行將處於'E','I'或'M'狀態,並且不會使用'S' 。

備註:請記住系統上的幾乎所有應用程序通常都共享一些動態庫代碼。您認爲代碼將駐留在哪裏以及如何管理其訪問?

現在回答你的性能影響問題。是的,實施MESI(f)或任何一致性協議將會對性能產生影響,但與沒有一致性協議的情況相比,這種影響實際上是積極的。在這種情況下,每個讀/寫都需要進入主內存(即,您的應用程序將是SLOWER的100倍)。

所以,底線是:雖然該MESI(F)協議確實對帶寬有負面影響,整體它對性能有積極的影響。它實際上購買我們很多的比較,我們不使用高速緩存一致性協議(即無緩存)