2.4.5 MESI協議
一.概述 一致性要求是指,若cache中某個字被修改,那麼在主存(以及更高層次)上,該字的副本必須立即或最後加以修改,並確保它者引用主存上該字內容的正確性。 當代多處理器系統中,每個處理器大都有自己的cache,呈現出如圖2.34所示的結構。同一主存塊的拷貝能同時存於不同cache中,若允許處理器各自獨立地修改自己的cache,就會出現不一致問題。解決此問題有軟件辦法和硬件辦法。硬件辦法能動態地識別出不一致產生的條件並予以及時處理,從而使cache的使用有很高的效率。並且此辦法對程序員和系統軟件開發人員是透明的,減輕了軟件研製負擔,從而普遍被採用。
圖2.34 多處理器系統中的Cache/主存結構
硬件辦法也稱爲cache一致性協議,分爲兩類: ◆ 目錄協議(Directory Protocol)::它由位於主存的目錄來保存有關各個局部cache的全局性狀態信息,並由一個集中式的主存/cache控制器來維護cache一致性。 ◆ 監聽協議(Snoop Protocol)::它是將維護cache一致性的責任分散到各個cache控制器。每個控制器必須識別出,它的cache中哪些塊是與其它cache共享的。當修改一個共享塊時必須在系統中廣播有關信息,其它cache控制器監聽到此信息時予以響應。根據廣播的信息以及反應的不同,監聽協議又分爲寫--修改協議和寫--無效協議兩種方式。 寫--修改(Write-update)協議是,某處理器要修改它的cache中一個共享塊時要廣播具體的修改字及地址,容納有此共享塊的各個cache同時予以修改。寫--無效(write--invalidate)協議是,某處理器要修改它的cache中一個共享塊時,無需廣播具體的修改字,只需給出塊地址和其它必要的指示信息,令其它cache中此塊變爲無效,然後處理器對其cache的此塊完成一次本地寫操作。顯然這種寫--無效協議是以犧牲命中率爲代價而採取的"寧缺毋濫"方針來換取cache / cache,cache / 主存各層數據一致性的一種協議。 二.MESI協議狀態轉換規則 MESI協議是一種採用寫--無效方式的監聽協議。它要求每個cache行有兩個狀態位,用於描述該行當前是處於修改態(M)、專有態(E)、共享態(S)或者無效態(I)中的哪種狀態,從而決定它的讀/寫操作行爲。這四種狀態的定義是: ·修改態(Modified)--此cache行已被修改過(髒行),內容已不同於主存並且 爲此cache專有; ·專有態(Exclusive)--此cache行內容同於主存,但不出現於其它cache中; ·共享態(Shared)--此cache行內容同於主存,但也出現於其它cache中; ·無效態(Invalid)--此cache行內容無效(空行)。 MESI協議適合以總線爲互連機構的多處理器系統。各cache控制器除負責響應自己CPU的內存讀寫操作(包括讀/寫命中與未命中)外,還要負責監聽總線上的其它CPU的內存讀寫活動(包括讀監聽命中與寫監聽命中)並對自己的cache予以相應處理。所有這些處理過程要維護cache一致性,必須符合圖2.35所示的MESI協議狀態轉換規則。
圖2.35 MESI協議狀態轉換規則
下面由圖的四個頂點出發,介紹轉換規則:(規則中與圖2.35 的相應位置以*數字序號對照給出) *1 該無效行在自身Cache讀未命中將被相應內存塊填充以建立新行時,讀監聽命中,說明其它Cache正在讀同地址的內存塊,以建立新行。故爲多Cache共享行,應爲S狀態,並應繼續發出讀監聽廣播,使其它Cache的類似情況效仿。 *2該無效行在自身Cache讀未命中將被相應內存塊填充以建立新行時,未讀監聽命中,爲本Cache專有,故新建行應爲E狀態。 *3 該無效行在自身Cache寫未命中時,將先讀入相應內存塊填充新行後,再進行寫修改,與原內存正本的數據不一至,故新建行爲M狀態。 *4 該共享行寫監聽命中,說明別的Cache由於寫命中修改了同此地址的行,根據寫無效原則,此共享行應改變爲無效(I)狀態。 *5 該共享行讀命中,狀態不變。 *6 該共享行讀監聽命中,說明其它Cache正在讀同地址內存塊,以建立新行,此時該共享行狀態不必改變,但應繼續發讀監聽廣播,供它者監聽。 *7 該共享行被寫命中,其中某字被改寫,與內存正本不一至,故應改爲M狀態,且應發出共享行寫命中監聽廣播,使其它Cache同地址行作廢(同*4)。 *8 該E態行讀監聽命中說明別的Cache正在讀同地址的內存正本,以建立新行,故其狀態應改爲S狀態,併發出讀監聽廣播,以使同此情況及* 1效仿之。 *9 該E態行讀命中不必改變狀態。 *10 該E態行寫監聽命中,說明別的Cache由於寫未命中而訪問同地址的內存正本,該E態行內容即將過時,故應作廢。 *11該E態行寫命中,只改變狀態爲M態即可,無須他者監聽。 *12該M態行寫命中狀態不變。 *13該M態行讀命中狀態不變。 *14該M態行讀監聽命中,應將該行最新數據寫回內存正本後變爲S狀態。併發出讀監聽廣播,供他者監聽。 *15該M態行寫監聽命中,說明別的Cache由於寫未命中而訪問了同地址的內存塊(同* 3),將實行先讀後修改,此時本地M態行應搶先寫回主存,然後作廢,以保證別的Cache讀出整行而未被修改數據的正確性。 *16該M態行寫監聽命中,說明別的Cache由於寫未命中而訪問了同地址的內存塊,將實行先讀後整行的修改,此時本地M態行不必寫回主存,只作廢即可。 上述分析可以看出,雖然各cache控制器隨時都在監聽系統總線,但能監聽到的只有讀未命中、寫未命中以及共享行寫命中三種情況。讀監聽命中的有效行都要進入S態併發出監聽命中指示,但M態行要搶先寫回主存;寫監聽命中的有效行都要進入I態,但收到RWITM時的M態行要搶先寫回主存。總之監控邏輯並不複雜,增添的系統總線傳輸開銷也不大,但MESI協議卻有力地保證了主存塊髒拷貝在多cache中的唯一性,並能及時寫回,保證cache主存存取的正確性。(參考課件2-14)
本文分享自華爲雲社區《GaussDB(DWS)向量化執行引擎詳解》,作者: yd_212508532。 前言 適用版本:【基線功能】 傳統的行執行引擎大多采用一次一元組的執行模式,這樣在執行過程中CPU大部分時間並沒有用來處理數據,更
前言: 從初代開源消息隊列崛起,到 PC 互聯網、移動互聯網爆發式發展,再到如今 IoT、雲計算、雲原生引領了新的技術趨勢,消息中間件的發展已經走過了 30 多個年頭。 目前,消息中間件在國內許多行業的關鍵應用中扮演着至關重要的角色。隨着數
瀏覽器輸入URL到頁面渲染完成,這個過程大致可分爲兩個階段:網絡通信和頁面渲染。 一、網絡通信 互聯網內各網絡間設備的通信遵循TCP/IP協議,利用TCP/IP協議進行網絡通信時,會通過分層與對方通信。數據傳輸的過程:由應用層產生數據後,
回滾操作,除了回滾整個事務,還可以部分回滾。部分回滾,需要保存點(savepoint)的協助。本文我們先看看保存點裏面都有什麼。 作者:操盛春,愛可生技術專家,公衆號『一樹一溪』作者,專注於研究 MySQL 和 OceanBase 源碼
併發和並行的含義 目標都是最大化CPU的使用率 並行(parallel) : 指在同一時刻,有多條指令在多個處理器上同時執行。 所以無論從微觀還是 從宏觀來看,二者都是一起執行的。 併發(concurrency):指在同一時刻只能
本文分享自華爲雲社區《GaussDB(DWS)對象設計之序列SEQUENCE原理與使用方法介紹》,作者:VV一笑。 1. 前言 適用版本:8.2.1及以上版本 序列SEQUENCE用來生成唯一整數的數據庫對象,本文對序列SEQUENC
本文通過搜索推薦項目進行外賣搜索廣告弱供給填充,提高流量變現效率。我們提出外賣多場景異構大圖、異構大圖在線建模技術演進路線,解決外賣搜索推薦業務多渠道、即時化的挑戰。相關成果發表CIKM2023會議一篇。聯合機器學習平臺搭建大規模圖訓練、
操作系統的發展離不開南北向軟硬件生態的擴展和支持,龍蜥社區也離不開各合作伙伴的共創。在 2023 龍蜥操作系統大會全面擁抱智算時代分論壇上,英特爾 AI 軟件工程師王華強從兩方面分享了英特爾至強處理器平臺上的兩個重點算力和內存帶寬,以及英特
1. 寫在前面 經過上一篇文章的介紹,我們已經對 commit 階段有了整體的認識。 這篇文章,我們一起進入各子階段,看看它們都會幹點什麼,以及會怎麼幹。 爲了方便理解,我們假設有 30 個事務,它們對應的用戶線程編號也從 1 到 30。
由觸發器導致得 OOM 案例分析過程和解決方式。 作者:龔唐傑,愛可生 DBA 團隊成員,主要負責 MySQL 技術支持,擅長 MySQL、PG、國產數據庫。 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。
free -h total used free shared buff/cache available Mem: 125G 88G
Oracle的內存結構包括兩個部分:System Global Area(SGA)和Program Global Area(PGA)。 SGA:當一個實例啓動的時候分配(allocated),是一個實例的基本組成部分。 PGA:當一個
問題一:哪個進程負責硬解析?shared pool設置不合理除了命中率低外還有哪些現象? 說到軟解析(soft prase)和硬解析(hard prase),就不能不說一下Oracle對sql的處理過程。當你發出一條sql語句交
2004年9月5日,星期日。天氣:不好。今天我又跑了。又是和老婆兩個人。又是單車獨騎。我的印象中,我出去跑路的情形大多都是我一部車。和朋友的車一起跑的情況不多。自從我最早的車友吳剛退出摩托車改開汽車以後,我就更難得和朋友一起出去跑。難道是
前幾天看了部電影,名字是《成事在人》,是老牌的美國影星費根弗里曼主演的,說的是前南非總統曼德拉任職以後的故事,雖然不知道里面的情節是不是完全真實的,但是很讓人震撼,也很讓人欽佩這位戰士。 電影裏面的曼德拉很樸實,感覺就是平時常常見到的爺爺