国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

計算機底層原理~CPU緩存一致性

來源: 責編: 時間:2023-08-14 22:01:05 423觀看
導讀CPU Cache知識回顧CPU 的高速緩存,通常可以分為 L1、L2、L3 這樣的三層高速緩存,也稱為一級緩存、二級緩存、三級緩存。L1 高速緩存訪問速度幾乎和寄存器一樣快,大小在幾十 KB 到幾百 KB 不等。每個 CPU 核心都有一塊屬

CPU Cache知識回顧

CPU 的高速緩存,通常可以分為 L1、L2、L3 這樣的三層高速緩存,也稱為一級緩存、二級緩存、三級緩存。Yep28資訊網——每日最新資訊28at.com

Yep28資訊網——每日最新資訊28at.com

L1 高速緩存訪問速度幾乎和寄存器一樣快,大小在幾十 KB 到幾百 KB 不等。每個 CPU 核心都有一塊屬于自己的 L1 高速緩存。Yep28資訊網——每日最新資訊28at.com

L2 高速緩存同樣每個 CPU 核心都有,但是 L2 高速緩存位置比 L1 高速緩存距離 CPU 核心 更遠,它大小比 L1 高速緩存更大,CPU 型號不同大小也就不同,通常大小在幾百 KB 到幾 MB 不等,訪問速度則更慢。Yep28資訊網——每日最新資訊28at.com

L3 高速緩存通常是多個 CPU 核心共用的,位置比 L2 高速緩存距離 CPU 核心 更遠,大小也會更大些,通常大小在幾 MB 到幾十 MB 不等。Yep28資訊網——每日最新資訊28at.com

cpu cache 結構

CPU Cache 是由很多個 Cache Line 組成的,CPU Line 是 CPU 從內存讀取數據的基本單位,而 CPU Line 是由各種標志(Tag)+ 數據塊(Data Block)組成,你可以在下圖清晰的看到:Yep28資訊網——每日最新資訊28at.com

Yep28資訊網——每日最新資訊28at.com

Cpu cache數據寫入的兩種方式

多核CPU同時工作的時候,每個核心都會從內存中讀取一份數據并緩存到自己的Cache中,當發生寫操作的時候,有兩種情況Yep28資訊網——每日最新資訊28at.com

  • 寫直達:只要有數據寫入,都會把數據同時寫入內存和 Cache 中,這種方式簡單直觀,但是性能就會受限于內存的訪問速度;
  • 寫回:對于已經緩存在 Cache 的數據的寫入,只需要更新其數據就可以,不用寫入到內存,只有在需要把緩存里面的臟數據交換出去的時候,才把數據同步到內存里,這種方式在緩存命中率高的情況,性能會更好;

寫直達

Yep28資訊網——每日最新資訊28at.com

寫回

寫直達由于每次寫操作都會把數據寫回到內存,而導致影響性能,于是為了要減少數據寫回內存的頻率,就出現了寫回的方法。Yep28資訊網——每日最新資訊28at.com

  • 寫回策略會在每個 Cache 塊上增加一個 “臟(Dirty)” 標記位 ,當一個 Cache 被標記為臟時,說明它的數據與內存數據是不一致的;
  • 在寫入操作時,我們只需要修改 Cache 塊并將其標記為臟,而不需要寫入內存;
  • 那么,什么時候才將臟數據寫回內存呢?—— 就發生在 Cache 塊被替換出去的時候:

寫回策略能夠減少寫回內存的次數,性能會比寫直達更高。當然,寫回策略在讀取的時候,有可能不是純粹的讀取了,因為還可能會觸發一次臟 Cache 塊的寫入。Yep28資訊網——每日最新資訊28at.com

這里還有一個設計: 在目標內存塊不在 Cache 中時,寫直達策略會直接寫入內存。而寫回策略會先把數據讀取到 Cache 中再修改 Cache 數據,這似乎有點多余?其實還是為了減少寫回內存的次數。雖然在未命中時會增加一次讀取操作,但后續重復的寫入都能命中緩存。否則,只要一直不讀取數據,寫回策略的每次寫入操作還是需要寫入內存。Yep28資訊網——每日最新資訊28at.com

寫回操作-寫入邏輯

Yep28資訊網——每日最新資訊28at.com

寫回操作-讀取邏輯

Yep28資訊網——每日最新資訊28at.com

實現緩存一致性

在單核 CPU 中,我們通過寫直達策略或寫回策略保持了Cache 與內存的一致性。但是在多核 CPU 中,由于每個核心都有一份獨占的 Cache,就會存在一個核心修改數據后,兩個核心 Cache 不一致的問題。Yep28資訊網——每日最新資訊28at.com

舉個例子:Yep28資訊網——每日最新資訊28at.com

  • Core 1 和 Core 2 讀取了同一個內存塊的數據,在兩個 Core 都緩存了一份內存塊的副本。此時,Cache 和內存塊是一致的;
  • Core 1 執行內存寫入操作:

在寫直達策略中,新數據會直接寫回內存,此時,Cache 和內存塊一致。但由于之前 Core 2 已經讀過這塊數據,所以 Core 2 緩存的數據還是舊的。此時,Core 1 和 Core 2 不一致;Yep28資訊網——每日最新資訊28at.com

在寫回策略中,新數據會延遲寫回內存,此時 Cache 和內存塊不一致。不管 Core 2 之前有沒有讀過這塊數據,Core 2 的數據都是舊的。此時,Core 1 和 Core 2 不一致。Yep28資訊網——每日最新資訊28at.com

  • 由于 Core 2 無法感知到 Core 1 的寫入操作,如果繼續使用過時的數據,就會出現邏輯問題。

由于兩個核心的工作是獨立的,在一個核心上的修改行為不會被其它核心感知到,所以不管 CPU 使用寫直達策略還是寫回策略,都會出現緩存不一致問題。 所以,我們需要一種機制,將多個核心的工作聯合起來,共同保證多個核心下的 Cache 一致性,這就是緩存一致性機制。Yep28資訊網——每日最新資訊28at.com

寫傳播 & 事務串行化

緩存一致性機制需要解決的問題就是 2 點:Yep28資訊網——每日最新資訊28at.com

  • 特性 1 - 寫傳播(Write Propagation): 每個 CPU 核心的寫入操作,需要傳播到其他 CPU 核心;
  • 特性 2 - 事務串行化(Transaction Serialization): 各個 CPU 核心所有寫入操作的順序,在所有 CPU 核心看起來是一致。

總線嗅探 & 總線仲裁

寫傳播和事務串行化在 CPU 中是如何實現的呢?Yep28資訊網——每日最新資訊28at.com

寫傳播 - 總線嗅探: 總線除了能在一個主模塊和一個從模塊之間傳輸數據,還支持一個主模塊對多個從模塊寫入數據,這種操作就是廣播。要實現寫傳播,其實就是將所有的讀寫操作廣播到所有 CPU 核心,而其它 CPU 核心時刻監聽總線上的廣播,再修改本地的數據;Yep28資訊網——每日最新資訊28at.com

可以發現,總線嗅探方法很簡單, CPU 需要每時每刻監聽總線上的一切活動,但是不管別的核心的 Cache 是否緩存相同的數據,都需要發出一個廣播事件,這無疑會加重總線的負載。Yep28資訊網——每日最新資訊28at.com

事務串行化 - 總線仲裁: 總線的獨占性要求同一時刻最多只有一個主模塊占用總線,天然地會將所有核心對內存的讀寫操作串行化。如果多個核心同時發起總線事務,此時總線仲裁單元會對競爭做出仲裁,未獲勝的事務只能等待獲勝的事務處理完成后才能執行。Yep28資訊網——每日最新資訊28at.com

基于總線嗅探和總線仲裁,現代 CPU 逐漸形成了各種緩存一致性協議,例如 MESI 協議。Yep28資訊網——每日最新資訊28at.com

MESI協議

MESI 協議其實是 CPU Cache 的有限狀態機,一共有 4 個狀態(MESI 就是狀態的首字母):Yep28資訊網——每日最新資訊28at.com

  • M(Modified,已修改): 表明 Cache 塊被修改過,但未同步回內存;
  • E(Exclusive,獨占): 表明 Cache 塊被當前核心獨占,而其它核心的同一個 Cache 塊會失效;
  • S(Shared,共享): 表明 Cache 塊被多個核心持有且都是有效的;
  • I(Invalidated,已失效): 表明 Cache 塊的數據是過時的。

在 「獨占」 和 「共享」 狀態下,Cache 塊的數據是 “清” 的,任何讀取操作可以直接使用 Cache 數據;Yep28資訊網——每日最新資訊28at.com

在 「已失效」 和 「已修改」 狀態下,Cache 塊的數據是 “臟” 的,它們和內存的數據都可能不一致。在讀取或寫入 “已失效” 數據時,需要先將其它核心 “已修改” 的數據寫回內存,再從內存讀取;Yep28資訊網——每日最新資訊28at.com

「獨占」和「共享」的差別在于,獨占狀態的時候,數據只存儲在一個 CPU 核心的 Cache 里,而其他 CPU 核心的 Cache 沒有該數據。這個時候,如果要向獨占的 Cache 寫數據,就可以直接自由地寫入,而不需要通知其他 CPU 核心,因為只有你這有這個數據,就不存在緩存一致性的問題了,于是就可以隨便操作該數據。Yep28資訊網——每日最新資訊28at.com

另外,在「獨占」狀態下的數據,如果有其他核心從內存讀取了相同的數據到各自的 Cache ,那么這個時候,獨占狀態下的數據就會變成共享狀態。Yep28資訊網——每日最新資訊28at.com

那么,「共享」狀態代表著相同的數據在多個 CPU 核心的 Cache 里都有,所以當我們要更新 Cache 里面的數據的時候,不能直接修改,而是要先向所有的其他 CPU 核心廣播一個請求,要求先把其他核心的 Cache 中對應的 Cache Line 標記為「無效」狀態,然后再更新當前 Cache 里面的數據。Yep28資訊網——每日最新資訊28at.com

事實上,完整的 MESI 協議更復雜,但我們沒必要記得這么細。我們只需要記住最關鍵的 2 點:Yep28資訊網——每日最新資訊28at.com

  • 關鍵 1 - 阻止同時有多個核心修改的共享數據: 當一個 CPU 核心要求修改數據時,會先廣播 RFO 請求獲得 Cache 塊的所有權,并將其它 CPU 核心中對應的 Cache 塊置為已失效狀態;
  • 關鍵 2 - 延遲回寫: 只有在需要的時候才將數據寫回內存,當一個 CPU 核心要求訪問已失效狀態的 Cache 塊時,會先要求其它核心先將數據寫回內存,再從內存讀取。

提示: MESI 協議在 MSI 的基礎上增加了 E(獨占)狀態,以減少只有一份緩存的寫操作造成的總線通信。Yep28資訊網——每日最新資訊28at.com

寫緩沖區 & 失效隊列

MESI 協議保證了 Cache 的一致性,但完全地遵循協議會影響性能。 因此,現代的 CPU 會在增加寫緩沖區和失效隊列將 MESI 協議的請求異步化,以提高并行度:Yep28資訊網——每日最新資訊28at.com

  • 寫緩沖區(Store Buffer)

由于在寫入操作之前,CPU 核心 1 需要先廣播 RFO 請求獲得獨占權,在其它核心回應 ACK 之前,當前核心只能空等待,這對 CPU 資源是一種浪費。因此,現代 CPU 會采用 “寫緩沖區” 機制:寫入指令放到寫緩沖區后并發送 RFO 請求后,CPU 就可以去執行其它任務,等收到 ACK 后再將寫入操作寫到 Cache 上。Yep28資訊網——每日最新資訊28at.com

  • 失效隊列(Invalidation Queue)

由于其他核心在收到 RFO 請求時,需要及時回應 ACK。但如果核心很忙不能及時回復,就會造成發送 RFO 請求的核心在等待 ACK。因此,現代 CPU 會采用 “失效隊列” 機制:先把其它核心發過來的 RFO 請求放到失效隊列,然后直接返回 ACK,等當前核心處理完任務后再去處理失效隊列中的失效請求。Yep28資訊網——每日最新資訊28at.com

事實上,寫緩沖區和失效隊列破壞了 Cache 的一致性。Yep28資訊網——每日最新資訊28at.com

因為在未同步的情況下,程序可能會有多種執行順序。這也是為什么Java里還需要volatile關鍵字,因為引入寫緩沖區或失效隊列后就變成弱數據一致性,不能滿足 強數據一致性: 保證在任意時刻任意副本上的同一份數據都是相同的,或者允許不同,但是每次使用前都要刷新確保數據一致,所以最終還是一致。Yep28資訊網——每日最新資訊28at.com

總結

  1. 在 CPU Cache 的三級緩存中,會存在 2 個緩存一致性問題:

縱向 - Cache 與內存的一致性問題: 在修改 Cache 數據后,如何同步回內存?Yep28資訊網——每日最新資訊28at.com

橫向 - 多核心 Cache 的一致性問題: 在一個核心修改 Cache 數據后,如何同步給其他核心 Cache?Yep28資訊網——每日最新資訊28at.com

  1. Cache 與內存的一致性問題有 2 個策略:

寫直達策略: 始終保持 Cache 數據和內存數據一致,在每次寫入操作中都會寫入內存;Yep28資訊網——每日最新資訊28at.com

寫回策略: 只有在臟 Cache 塊被替換出去的時候寫回內存,減少寫回內存的次數;Yep28資訊網——每日最新資訊28at.com

  1. 多核心 Cache 一致性問題需要滿足 2 點特性:

寫傳播(總線嗅探): 每個 CPU 核心的寫入操作,需要傳播到其他 CPU 核心;Yep28資訊網——每日最新資訊28at.com

事務串行化(總線仲裁): 各個 CPU 核心所有寫入操作的順序,在所有 CPU 核心看起來是一致。Yep28資訊網——每日最新資訊28at.com

  1. MESI 協議能夠滿足以上 2 點特性,通過 “已修改、獨占、共享、已失效” 4 個狀態實現了 CPU Cache 的一致性;
  2. 現代 CPU 為了提高并行度,會在增加 寫緩沖區 & 失效隊列 將 MESI 協議的請求異步化, 從內存的視角看就是指令重排,破壞了 CPU Cache 的一致性。也是為什么使用volatile關鍵字的原因

本文鏈接:http://m.rrqrq.com/showinfo-26-5716-0.html計算機底層原理~CPU緩存一致性

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Go的Net/Http有哪些值得關注的細節?

下一篇: 停止過度設計中等規模的前端應用程序

標簽:
  • 熱門焦點
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 天貓精靈Sound Pro體驗:智能音箱沒有音質?來聽聽我的

    這幾年除了手機作為智能生活終端最主要的核心之外,第二個可以成為中心點的產品是什么?——是智能音箱。 手機在執行命令的時候有兩種操作方式,手和智能語音助手,而智能音箱只
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • iQOO Neo8 Pro搶先上架:首發天璣9200+ 安卓性能之王

    經過了一段時間的密集爆料,昨日iQOO官方如期對外宣布:將于5月23日推出全新的iQOO Neo8系列新品,官方稱這是一款擁有旗艦級性能調校的作品。隨著發布時
  • Windows 11發布,微軟一改往常對老機型開放的態度

    距離 Windows 11 發布已經過去一周,在過去一周里,很多數碼愛好者圍繞其對 Android 應用的支持、對老機型的升級問題展開了激烈討論。與以往不同的是,在這次大
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
波多野结衣欧美| 韩国中文字幕2020精品| 久久精品视频一区二区| 欧美精品亚洲二区| 伊人成人网在线看| 亚洲国产免费看| 日韩一本二本av| 亚洲自拍都市欧美小说| 丁香亚洲综合激情啪啪综合| 国产视频不卡| 久久免费精品国产久精品久久久久| 亚洲一区在线观看网站| 成人黄色小视频| 在线免费一区三区| 国产精品福利一区二区三区| 狠狠色丁香久久婷婷综| 国产欧美一区二区三区另类精品 | 一区二区久久久久| 成人小视频在线| 久热精品视频| 国产精品久久久爽爽爽麻豆色哟哟| 久久99精品国产麻豆婷婷洗澡| 亚洲午夜精品久久久久久浪潮| 制服丝袜亚洲精品中文字幕| 亚洲大型综合色站| 国产在线观看一区| 日韩欧美一二三| 美女一区二区视频| 国产欧美日韩综合一区在线观看 | 亚洲裸体俱乐部裸体舞表演av| 日韩一区二区三区电影| 日本成人在线不卡视频| 亚洲伦理一区| 欧美国产日韩亚洲一区| 成人夜色视频网站在线观看| 欧美亚洲国产bt| 亚洲成a人片在线不卡一二三区 | 午夜精品视频一区| 亚洲人成久久| 国产精品欧美综合在线| av在线播放成人| 欧美一级理论性理论a| 免费欧美高清视频| 久久99伊人| 亚洲综合男人的天堂| 亚洲香蕉网站| 国产精品激情偷乱一区二区∴| 成人美女视频在线观看| 欧美日韩在线不卡| 青青国产91久久久久久| 噜噜噜噜噜久久久久久91| 亚洲女爱视频在线| 在线精品一区二区| 精品理论电影在线| 国产精品亚洲一区二区三区在线 | 国产精品99久久久久久似苏梦涵| 欧美在线综合视频| 亚洲电影激情视频网站| 午夜在线a亚洲v天堂网2018| 亚洲宅男天堂在线观看无病毒| 欧美成人高清| 国产精品萝li| 91日韩一区二区三区| 日韩欧美你懂的| 国产伦精品一区二区三区在线观看| 欧美日韩中文字幕精品| 日韩国产一区二| 美女亚洲精品| 美日韩一区二区三区| 88在线观看91蜜桃国自产| 欧美午夜在线| 日韩精品一区二区三区四区| 成人黄色av网站在线| 久久综合色综合88| 国产一区二区三区四区hd| 亚洲欧美日韩国产成人精品影院| 国产亚洲欧美一区二区三区| 日韩一区精品视频| 日本高清不卡在线观看| 国产伦精品一区二区三区在线观看 | 中文乱码免费一区二区| 亚洲黄色成人| 婷婷丁香久久五月婷婷| 欧美精品三级在线观看| 成人一级片在线观看| 国产精品久久久久久久蜜臀| 一区二区冒白浆视频| 日本成人在线看| 日韩免费观看高清完整版在线观看| 欧美一区二区三区在线免费观看 | 在线观看网站黄不卡| 国产91精品一区二区麻豆亚洲| 久久久亚洲国产美女国产盗摄| 在线精品观看| 久久国产欧美日韩精品| 久久久久久免费网| 亚洲一区自拍| 国产成人综合在线观看| 亚洲天堂精品在线观看| 日韩欧美一二三| 在线免费观看一区二区三区| 男女男精品视频| 久久精品夜夜夜夜久久| 久久国产精品亚洲77777| 国产成人综合在线| 亚洲视频一区二区在线观看| 欧美午夜视频网站| 欧美日韩日本国产亚洲在线| 日韩精品电影一区亚洲| 精品国产自在久精品国产| 亚洲高清免费| 精品一区二区久久久| 国产精品免费丝袜| 欧美日韩mp4| 亚洲成色精品| 国产精品自拍三区| 亚洲色图色小说| 日韩视频免费观看高清完整版在线观看 | 51精品久久久久久久蜜臀| 国产一区二区三区自拍| 另类专区欧美蜜桃臀第一页| 国产精品区一区二区三| 日本道色综合久久| 97精品久久久久中文字幕| 丝袜美腿亚洲一区二区图片| 久久久99免费| 欧美日韩国产欧美日美国产精品| 亚洲无线观看| 国产成人在线免费| 午夜精品视频一区| 国产精品看片你懂得| 7777精品伊人久久久大香线蕉完整版| 亚洲国产精品日韩| www.亚洲激情.com| 久久av中文字幕片| 亚洲国产欧美在线| 中文在线资源观看网站视频免费不卡| 制服丝袜在线91| 91福利资源站| 国产视频久久| 亚洲国产美女| 欧美日韩国产综合视频在线| 国产不卡在线视频| 久久国产日韩欧美精品| 亚洲6080在线| 亚洲一区二区三区影院| 中文在线免费一区三区高中清不卡| 欧美一区二区三区人| 色婷婷av久久久久久久| 亚洲精品一区二| 欧美三级网页| 欧美人成网站| 欧美va天堂| 欧美 日韩 国产一区二区在线视频 | 91麻豆精品国产无毒不卡在线观看 | 五月天久久比比资源色| 一区二区三区精品在线观看| 中文字幕在线观看不卡| 国产色婷婷亚洲99精品小说| 亚洲一卡二卡三卡四卡| 中文字幕亚洲在| 国产精品电影院| 国产精品全国免费观看高清| 国产日韩欧美电影| 欧美成人一区二区三区在线观看| 51精品视频一区二区三区| 欧美性受极品xxxx喷水| 欧美最猛性xxxxx直播| 在线观看av一区二区| 91精品福利视频| 色诱视频网站一区| 色呦呦网站一区| 欧美伊人精品成人久久综合97| 色诱亚洲精品久久久久久| 一本大道久久a久久综合婷婷| 久久久99国产精品免费| 色欧美日韩亚洲| 欧美在线不卡一区| 欧美久久久久久蜜桃| 欧美久久一二三四区| 欧美三级三级三级爽爽爽| 在线观看一区日韩| 欧美日韩国产综合一区二区| 欧美一级免费观看| 26uuu国产日韩综合| 欧美激情中文字幕一区二区| 中文字幕中文字幕在线一区| 亚洲精品欧美专区| 午夜成人免费电影| 激情深爱一区二区| 成人黄页毛片网站| 国内精品嫩模av私拍在线观看| 亚洲麻豆av| 91国产视频在线观看| 日韩一区二区三| 国产午夜精品理论片a级大结局| 亚洲女同一区二区| 日本强好片久久久久久aaa| 国产精品一线二线三线| 色综合久久中文综合久久97 |