最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

SMP緩存一致性

2022-08-04 15:47 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

在閱讀linux相關(guān)源碼的過程中,經(jīng)??吹絻?nèi)存屏障相關(guān)原語,如mb(),rmb(),wmb等。要想理解這些原語的作用,有必要理解SMP緩存一致性原理。

在SMP系統(tǒng)中,處理器的每個核都有獨(dú)立的一級緩存,因此同一內(nèi)存位置的數(shù)據(jù),可能在多個核一級緩存中存在多個副本,所以存在數(shù)據(jù)一致性的問題。目前主流的緩存一致性協(xié)議是MESI協(xié)議及其衍生協(xié)議。

原生的MESI協(xié)議有4種狀態(tài):

M(Modify)修改:表示數(shù)據(jù)只存在本地處理器緩存的在副本,數(shù)據(jù)是臟的,即數(shù)據(jù)被修改過,還沒有寫回內(nèi)存。 E(Exclusive)獨(dú)占:表示數(shù)據(jù)只存在本地處理器緩存的副本,數(shù)據(jù)是干凈的,即副本和內(nèi)存中的數(shù)據(jù)相同。 S(Shared)共享:表示數(shù)據(jù)存在多個處理緩存的副本,數(shù)據(jù)是干凈的,即所有副本和內(nèi)存中的數(shù)據(jù)相同。 I(Invalid)無效:表示緩存行中沒有數(shù)據(jù)。 為了維護(hù)緩存一致性,處理器之間需要通信,MESI協(xié)議提供了以下消息:

Read讀:包含想要讀取的緩存行的物理地址。 Read Response讀響應(yīng):包含讀消息請求的數(shù)據(jù)。讀響應(yīng)消息可能是由內(nèi)存控制器發(fā)送的,也可能是由其他處理器的緩存發(fā)送的。如果一個處理器的緩存行有想要的數(shù)據(jù),并且處于修改狀態(tài),那么必須發(fā)送讀響應(yīng)消息。 Invalidate使無效:包含想要刪除的緩存行的物理地址。所有其他處理器必須從緩存行中刪除對應(yīng)的數(shù)據(jù),并且發(fā)送使無效確認(rèn)消息來應(yīng)答。 Invalidate Acknowledge使無效確認(rèn):處理器收到使無效消息,必須從緩存行中刪除對應(yīng)的數(shù)據(jù),并且發(fā)送使無效確認(rèn)應(yīng)答。 Read Invalidate讀并且使無效:包含想要讀取的緩存行的物理地址,同時要求從其他緩存中刪除數(shù)據(jù)。它是讀消息和使無效消息的組合 ,需要接收者發(fā)送讀響應(yīng)消息和使無效確認(rèn)消息。 Writeback寫回:包含想要寫回到內(nèi)存的地址和數(shù)據(jù)。 由此我們看到,為了保證緩存在各處理器間的一致性,需要進(jìn)行核間的消息的處理。因此即使像原子變量這種看似沒有消耗的同步機(jī)制也是有開銷的。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實(shí)戰(zhàn)項目及代碼)? ?


我們來通過下面的例子加深一下理解:

假設(shè)有2個處理0,1。兩個處理的緩存行初始處于無效狀態(tài)。

1.處理器0加載地址x的數(shù)據(jù),因為本地緩存沒有副本,所以發(fā)送Read消息。內(nèi)存控制器讀取數(shù)據(jù)后發(fā)送響應(yīng)消息。處理器0收到響應(yīng)消息后,緩存行從無效狀態(tài)轉(zhuǎn)換到共享狀態(tài)。

2.處理器1加載地址x的數(shù)據(jù),因為本地緩存沒有副本,所以發(fā)送Read消息。處理器0收到消息后,發(fā)送Read Responed響應(yīng)消息。處理器1收到響應(yīng)將緩存行從無效狀態(tài)轉(zhuǎn)換到共享狀態(tài)。

3.處理器0存在地址n的數(shù)據(jù),因為緩存行處于共享狀態(tài),因此發(fā)送使無效消息,處理器1收到消息后,將緩存變?yōu)闊o效狀態(tài)并發(fā)送Invalidate Acknowledge.處理器0收到響應(yīng)后將緩存行變?yōu)镸odify修改狀態(tài)。

4.接下來處理器1可能可能出現(xiàn)讀和寫2種情況 :

處理器1讀取地址n數(shù)據(jù),因為本地緩存沒有副本,因此發(fā)送讀消息。處理器0收到讀消息后,進(jìn)行寫回操作,寫回內(nèi)存,轉(zhuǎn)換為共享狀態(tài)。然后回應(yīng)讀響應(yīng)消息。處理器1收到響應(yīng),置緩存為共享狀態(tài)。 處理器1修改地址n數(shù)據(jù),因為本地緩存沒有副本,因此發(fā)送讀且使無效消息,處理器0收到消息后,發(fā)送確認(rèn),并將狀態(tài)從修改轉(zhuǎn)為無效。處理器1收到確認(rèn),修改數(shù)據(jù)并置為修改狀態(tài)。 通過理解SMP一致性,能夠讓我們更好地理解linux的內(nèi)存同步原語。




SMP緩存一致性的評論 (共 條)

分享到微博請遵守國家法律
徐闻县| 会泽县| 城口县| 吴旗县| 临泉县| 富锦市| 理塘县| 临桂县| 大余县| 赞皇县| 托里县| 旬邑县| 包头市| 普定县| 搜索| 始兴县| 凤台县| 都昌县| 永安市| 修水县| 边坝县| 阿荣旗| 沁水县| 白水县| 昭觉县| 洪雅县| 富民县| 崇仁县| 紫阳县| 资溪县| 冕宁县| 德昌县| 临沂市| 平利县| 当雄县| 孟州市| 江川县| 宿松县| 剑河县| 海伦市| 东源县|