色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文吃透Cache處理一致性及工作原理

Linux愛好者 ? 來源:桔里貓 ? 作者:桔里貓 ? 2021-09-01 14:55 ? 次閱讀

可以隨便到網上查一查,各大互聯網公司筆試面試特別喜歡考一道算法題,即 LRU緩存機制,又順手查了一下LRU緩存機制最近有哪些企業喜歡考察,超級大熱門!

今天給大家分享一篇關于 Cache 的硬核的技術文,基本上關于Cache的所有知識點都可以在這篇文章里看到。

關于 Cache 這方面內容圖比較多,不想自己畫了,所以圖都來自《Computer Architecture : A Quantitative Approach》。

這是一本體系架構方面的神書,推薦大家看一下。

本文主要內容如下,基本涉及了Cache的概念,工作原理,以及保持一致性的入門內容。

1、為什么需要 Cache1.1 為什么需要 Cache

我們首先從一張圖來開始講為什么需要 Cache.

28fb4e1a-0ad0-11ec-911a-12bb97331649.png

上圖是 CPU 性能和 Memory 存儲器訪問性能的發展。

我們可以看到,隨著工藝和設計的演進,CPU 計算性能其實發生了翻天覆地的變化,但是DRAM存儲性能的發展沒有那么快。

所以造成了一個問題,存儲限制了計算的發展。

容量與速度不可兼得。

如何解決這個問題呢?可以從計算訪問數據的規律入手。

我們隨便貼段代碼:

for (j = 0; j 《 100; j = j + 1)

for( i = 0; i 《 5000; i = i + 1)

x[i][j] = 2 * x[i][j];

可以看到,由于大量循環的存在,我們訪問的數據其實在內存中的位置是相近的。

換句專業點的話說,我們訪問的數據有局部性。

我們只需要將這些數據放入一個小而快的存儲中,這樣就可以快速訪問相關數據了。

總結起來,Cache是為了給CPU提供高速存儲訪問,利用數據局部性而設計的小存儲單元。

1.2 實際系統中的 Cache

我們展示一下實際系統中的 Cache 。

290dd896-0ad0-11ec-911a-12bb97331649.png

如上圖所示,整個系統的存儲架構包括了 CPU 的寄存器,L1/L2/L3 CACHE,DRAM 和硬盤。

數據訪問時先找寄存器,寄存器里沒有找 L1 Cache, L1 Cache 里沒有找 L2 Cache 依次類推,最后找到硬盤中。

同時,我們可以看到,速度與存儲容量的折衷關系。容量越小,訪問速度越快!

其中,一個概念需要搞清楚。

CPU 和 Cache 是 word 傳輸的,而 Cache 到主存是以塊傳輸的,一塊大約 64Byte 。

現有 SOC 中的 Cache 一般組成如下。

1.3 Cache 的分類

Cache按照不同標準分類可以分為若干類。

按照數據類型劃分:I-Cache與D-Cache。其中I-Cache負責放置指令,D-Cache負責方式數據。兩者最大的不同是D-Cache里的數據可以寫回,I-Cache是只讀的。

按照大小劃分:分為small Cache和large Cache。沒路組(后文組相連介紹)《4KB叫small Cache, 多用于L1 Cache, 大于4KB叫large Cache。多用于L2及其他Cache.

按照位置劃分:Inner Cache和Outer Cache。一般獨屬于CPU微架構的叫Inner Cache, 例如上圖的L1 L2 CACHE。不屬于CPU微架構的叫outer Cache.

按照數據關系劃分:Inclusive/exclusive Cache: 下級Cache包含上級的數據叫inclusive Cache。不包含叫exclusive Cache。舉個例子,L3 Cache里有L2 Cache的數據,則L2 Cache叫exclusive Cache。

2、Cache的工作原理要講清楚 Cache 的工作原理,需要回答 4 個問題:

數據如何放置

數據如何查詢

數據如何被替換

如果發生了寫操作,Cache如何處理

2.1 數據如何放置

這個問題也好解決。我們舉個簡單的栗子來說明問題。

假設我們主存中有 32 個塊,而我們的 Cache 一共有 8 個 Cache 行( 一個 Cache 行放一行數據)。

假設我們要把主存中的塊 12 放到 Cache 里。

那么應該放到 Cache 里什么位置呢?

三種方法:

全相連(Fully associative)。可以放在Cache的任何位置。

直接映射(Direct mapped)。只允許放在Cache的某一行。比如12 mod 8

組相連(set associative)。可以放在Cache的某幾行。例如2路組相連,一共有4組,所以可以放在0,1位置中的一個。

可以看到,全相連和直接映射是Cache組相連的兩種極端情況。

不同的放置方式主要影響有兩點:

1、組相連組數越大,比較電路就越大,但Cache利用率更高,Cache miss發生的概率小。2、組相連數目變小,Cache經常發生替換,但是比較電路比較小。

這也好理解,內存中的塊在Cache中可放置的位置多,自然找起來就麻煩。

2.2 如何在Cache中找數據

其實找數據就是一個比對過程,如下圖所示。

294ef7f4-0ad0-11ec-911a-12bb97331649.png

我們地址都以 Byte 為單位的。

但主存于Cache之間的數據交換單位都是塊(block,現代Cache一般一個block大約64Byte)。所以地址對最后幾位是block offset。

由于我們采用了組相連,則還有幾個比特代表的是存儲到了哪個組。

組內放著若干數據,我們需要比較Tag, 如果組內有Tag出現,則說明我們訪問的數據在緩存中,可以開心的使用了。

比如舉個 2 路組相連的例子,如下圖所示。

295a6350-0ad0-11ec-911a-12bb97331649.png

T表示Tag。直接比較Tag,就能得知是不是命中了。如果命中了,則根據index(組號)將對應的塊取出來即可。

如上圖所示。用index選出位于組相連的哪個組。然后并行的比較Tag, 判斷最后是不是在Cache中。上圖是2路組相連,也就是說兩組并行比較。

那如果不在緩存中呢?這就涉及到另一個問題。

不在緩存中如何替換 Cache ?

2.3 如何替換Cache中的數據

Cache中的數據如何被替換的?這個就比較簡單直接。

隨機替換。如果發生Cache miss里隨機替換掉一塊。

Least recently used. LRU。最近使用的塊最后替換。

First in, first out (FIFO), 先進先出。

實際上第一個不怎么使用,LRU 和 FIFO 根據實際情況選擇即可。

Cache 在什么時候數據會被替換內?也有幾種策略。

不在本 Cache 替換。如果Cache miss了,直接轉發訪問地址到主存,取到的數據不會寫到Cache.

在讀MISS時替換。如果讀的時候Cache里沒有該數據,則從主存讀取該數據后寫入Cache。

在寫MISS時替換。如果寫的時候Cache里沒有該數據,則將本數據調入Cache再寫。

2.4 如果發生了寫操作怎么辦

Cache畢竟是個臨時緩存。

如果發生了寫操作,會造成Cache和主存中的數據不一致。如何保證寫數據操作正確呢?

也有三種策略。

通寫:直接把數據寫回Cache的同時寫回主存。極其影響寫速度。

回寫:先把數據寫回Cache, 然后當Cache的數據被替換時再寫回主存。

通寫隊列:通寫與回寫的結合。先寫回一個隊列,然后慢慢往主存儲寫。如果多次寫同一個數據,直接寫這個隊列。避免頻繁寫主存。

3、Cache一致性Cache 一致性是 Cache 中遇到的比較坑的一個問題。

什么原因需要 Cache 處理一致性呢?

主要是多核系統中,假如core 0讀了主存儲的數據,寫了數據。core 1也讀了主從的數據。這個時候core 1并不知道數據已經被改動了,也就是說,core 1 Cache中的數據過時了,會產生錯誤。

Cache一致性的保證就是讓多核訪問不出錯。

Cache一致性主要有兩種策略。

策略一:基于監聽的一致性策略

這種策略是所有Cache均監聽各Cache的寫操作,如果一個Cache中的數據被寫了,有兩種處理辦法。

寫更新協議:某個Cache發生寫了,就索性把所有Cache都給更新了。

寫失效協議:某個Cache發生寫了,就把其他Cache中的該數據塊置為無效。

策略 1 由于監聽起來成本比較大,所以只應用于極簡單的系統中。

策略二:基于目錄的一致性策略

這種策略是在主存處維護一張表。記錄各數據塊都被寫到了哪些Cache, 從而更新相應的狀態。一般來講這種策略采用的比較多。又分為下面幾個常用的策略。

SI: 對于一個數據塊來講,有share和invalid兩種狀態。如果是share狀態,直接通知其他Cache, 將對應的塊置為無效。

MSI:對于一個數據塊來講,有share和invalid,modified三種狀態。其中modified狀態表表示該數據只屬于這個Cache, 被修改過了。當這個數據被逐出Cache時更新主存。這么做的好處是避免了大量的主從寫入。同時,如果是invalid時寫該數據,就要保證其他所有Cache里該數據的標志位不為M,負責要先寫回主存儲。

MESI:對于一個數據來講,有4個狀態。modified, invalid, shared, exclusive。其中exclusive狀態用于標識該數據與其他Cache不依賴。要寫的時候直接將該Cache狀態改成M即可。

我們著重講講 MESI。圖中黑線:CPU的訪問。紅線:總線的訪問,其他Cache的訪問。

當前狀態時I狀態時,如果發生處理器讀操作 prrd。

如果其他Cache里有這份數據,如果其他Cache里是M態,先 把M態寫回主存再讀。否則直接讀。最終狀態變為S。

其他Cache里沒這個數據,直接變到E狀態。

當前狀態為S態。

如果發生了處理器讀操作,仍然在S態。

如果發生了處理器寫操作,則跳轉到M狀態。

如果其他Cache發生了寫操作,跳到I態。

當前狀態E態

發生了處理器讀操作還是E。

發生了處理器寫操作變成M。

如果其他Cache發生了讀操作,變到S狀態。

當前狀態M態

發生了讀操作依舊是M態。

發生了寫操作依舊是M態。

如果其他Cache發生了讀操作,則將數據寫回主存儲,變換到S態。

4、總結Cache 在計算機體系架構中有非常重要的地位,本文講了 Cache中最主要的內容,具體細節可以再根據某個點深入研究。

作者:桔里貓

來源:https://zhuanlan.zhihu.com/p/386919471

版權說明:此文章只做學術分享,版權歸原作者所有,若有侵權,請聯系修改或刪除

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19400

    瀏覽量

    230744
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10901

    瀏覽量

    212644
  • 數據
    +關注

    關注

    8

    文章

    7133

    瀏覽量

    89376
  • Cache
    +關注

    關注

    0

    文章

    129

    瀏覽量

    28381

原文標題:Cache 工作原理,Cache 一致性,你想知道的都在這里

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一致性測試系統的技術原理和也應用場景

    一致性測試廣泛應用于各種通信協議、網絡設備和系統的驗證中,以確保它們能夠按照既定的標準正常工作。以下是些典型的應用場景: CAN FD網絡:在CAN FD網絡中,各節點的質量不一致
    發表于 11-01 15:35

    異構計算下緩存一致性的重要

    在眾多回復中,李博杰同學的回答被認為質量最高。他首先將緩存一致性分為兩個主要場景:是主機內CPU與設備間的一致性;二是跨主機的一致性
    的頭像 發表于 10-24 17:00 ?716次閱讀
    異構計算下緩存<b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>

    LMK05318的ITU-T G.8262一致性測試結果

    電子發燒友網站提供《LMK05318的ITU-T G.8262一致性測試結果.pdf》資料免費下載
    發表于 09-20 11:21 ?0次下載
    LMK05318的ITU-T G.8262<b class='flag-5'>一致性</b>測試結果

    級聯一致性和移相器校準應用手冊

    電子發燒友網站提供《級聯一致性和移相器校準應用手冊.pdf》資料免費下載
    發表于 08-29 10:48 ?0次下載
    級聯<b class='flag-5'>一致性</b>和移相器校準應用手冊

    電感值和直流電阻的一致性如何提高?

    提高電感值和直流電阻的一致性,可以從以下幾個方面入手: 、提高電感值的一致性 優化磁芯選擇 : 磁芯是電感器的關鍵組成部分,其材料特性和尺寸直接影響電感值。選擇具有高磁導率、低磁阻和穩定性能的材料
    的頭像 發表于 08-19 15:27 ?353次閱讀

    LIN一致性測試規范2.1

    電子發燒友網站提供《LIN一致性測試規范2.1.pdf》資料免費下載
    發表于 08-15 17:14 ?3次下載

    新品發布 | 同星智能正式推出CAN總線一致性測試系統

    CAN總線一致性測試系統CANFD/CAN總線一致性測試系統,在硬件系統上基于同星自主研發的總線分析工具,干擾儀,一致性測試機箱,并搭配程控電源,示波器,數字萬用表等標準外圍儀器設備;在軟件上
    的頭像 發表于 07-06 08:21 ?562次閱讀
    新品發布 | 同星智能正式推出CAN總線<b class='flag-5'>一致性</b>測試系統

    銅線鍵合焊接一致性:如何突破技術瓶頸?

    在微電子封裝領域,銅線鍵合技術以其低成本、高效率和良好的電氣性能等優勢,逐漸成為芯片與基板連接的主流方式。然而,銅線鍵合過程中的焊接一致性問題是制約其進步發展和應用的關鍵難題。焊接一致性不僅
    的頭像 發表于 07-04 10:12 ?1884次閱讀
    銅線鍵合焊接<b class='flag-5'>一致性</b>:如何突破技術瓶頸?

    為什么主機廠愈來愈重視CAN一致性測試?

    新能源汽車迅猛發展下整車CAN網絡架構日益復雜,總線故障等潛在問題時刻影響著運行安全。整車零部件通過CAN一致性測試必將是安全保障的第道門檻。CAN一致性測試,就是要求整車CAN網絡中的節點都滿足
    的頭像 發表于 05-29 08:24 ?1252次閱讀
    為什么主機廠愈來愈重視CAN<b class='flag-5'>一致性</b>測試?

    鋰電池組裝及維修的關鍵:電芯一致性的重要

    鋰電池組裝及維修過程中,電芯一致性個至關重要的概念。電芯一致性指的是在同電池組中,各個電芯在性能參數上的接近程度。這些性能參數包括電壓、容量、內阻、自放電率等。電芯
    的頭像 發表于 04-15 10:57 ?1123次閱讀
    鋰電池組裝及維修的關鍵:電芯<b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>

     QSFP一致性測試的專業測試設備

    、高速度的光纖接口模塊,廣泛應用于數據中心、高速以太網和光纖通信等領域。本文將詳細探討QSFP一致性測試的目的、測試內容、測試方法以及測試的重要等方面。 QSFP一致性測試的目的是確保光模塊的性能符合相關標準和規范,保證其在各
    的頭像 發表于 03-14 10:40 ?648次閱讀
     QSFP<b class='flag-5'>一致性</b>測試的專業測試設備

    銅線鍵合焊接一致性:微電子封裝的新挑戰

    在微電子封裝領域,銅線鍵合技術以其低成本、高效率和良好的電氣性能等優勢,逐漸成為芯片與基板連接的主流方式。然而,銅線鍵合過程中的焊接一致性問題是制約其進步發展和應用的關鍵難題。焊接一致性不僅
    的頭像 發表于 03-13 10:10 ?1360次閱讀
    銅線鍵合焊接<b class='flag-5'>一致性</b>:微電子封裝的新挑戰

    企業數據備份體系化方法論的七大原則:深入理解數據備份的關鍵原則:應用一致性與崩潰一致性的區別

    在數字化時代,數據備份成為了企業信息安全的核心環節。但在備份過程中,兩個關鍵概念——應用一致性和崩潰一致性,常常被誤解或混淆。本文旨在闡明這兩個概念的差異,并分析它們在數據備份中的重要,以便讀者
    的頭像 發表于 03-11 14:05 ?509次閱讀
    企業數據備份體系化方法論的七大原則:深入理解數據備份的關鍵原則:應用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區別

    深入理解數據備份的關鍵原則:應用一致性與崩潰一致性的區別

    深入理解數據備份的關鍵原則:應用一致性與崩潰一致性的區別 在數字化時代,數據備份成為了企業信息安全的核心環節。但在備份過程中,兩個關鍵概念——應用一致性和崩潰一致性,常常被誤解或混淆。
    的頭像 發表于 03-11 11:29 ?985次閱讀
    深入理解數據備份的關鍵原則:應用<b class='flag-5'>一致性</b>與崩潰<b class='flag-5'>一致性</b>的區別

    DDR一致性測試的操作步驟

    DDR一致性測試的操作步驟? DDR(雙數據率)一致性測試是對DDR內存模塊進行測試以確保其性能和可靠。在進行DDR一致性測試時,需要遵循
    的頭像 發表于 02-01 16:24 ?1677次閱讀
    主站蜘蛛池模板: 接吻吃胸摸下面啪啪教程| 久久久综合中文字幕久久| 男男被强bl高h文| 中文字幕久精品视频在线观看| 国内精品七七久久影院| 性欧美videofree中文字幕| 国产成人高清视频| 少妇高潮A视频| 国产电影无码午夜在线播放| 色欲久久综合亚洲精品蜜桃| 国产成人拍精品视频网| 思思久99久女女精品| 国产精品乱码一区二区三 | 国产精品av免费观看| 色哟哟tv| 国产亚洲精品黑人粗大精选 | 帅哥男男GV在线1080P| 国产精品久久久久成人免费| 玩高中女同桌肉色短丝袜脚文| 国产毛片视频网站| 亚洲女人网| 久拍国产在线观看| AV天堂AV亚洲啪啪久久无码| 肉小说高h| 国产在线不卡| 中文在线中文资源| 青青草原直播| 国产精品一国产AV麻豆| 亚洲欧美成人无码久久久| 久久免费精品视频| av先锋影音资源男人站| 日日操夜夜操狠狠操| 国产主播AV福利精品一区| 最近免费中文字幕完整版HD| 欧美日韩精品| 国产欧美日韩亚洲第一页| 永久免费精品精品永久-夜色| 欧美精品熟妇乱| 国产亚洲精品久久7777777| 真人做受120分钟免费看| 日操夜操天天操|