L1 L2 L3 Cache到底放在哪里好呢?
本文轉(zhuǎn)載自微信公眾號「虛機」,作者cloud3 。轉(zhuǎn)載本文請聯(lián)系虛機公眾號。
我是cloud3,前段時間寫了幾篇關(guān)于高速緩存的文章,很多朋友加我好友也聊了不少。今天我們看看Cache的發(fā)展歷史,這L1 L2 L3 Cache一開始是放哪里的?
好了,今天不講原理,只看歷史(intel):
無需Cache
Cache(高速緩存)的發(fā)展是計算歷史上最重要的技術(shù)之一。幾乎所有的現(xiàn)代CPU內(nèi)核都設(shè)計有高速緩存。但是一開始CPU是沒有Cache的,因為早期的CPU主頻很低,甚至都沒有內(nèi)存的頻率高,所以無需Cache,CPU直接讀寫內(nèi)存。
外部Cache出現(xiàn)
從80386開始CPU主頻開始遠高于內(nèi)存頻率。80386DX為25MHz,一個總線周期為2拍80ns,當時已沒有速度相匹配的DRAM可用。在馮諾依曼結(jié)構(gòu)下,CPU的訪存速度就成了瓶頸,為了能夠加速內(nèi)存訪問,Intel主板上增加了外部Cache來配合80386運行,當時的Cache都是Write-Through的。這就是最初的Cache。
內(nèi)部L1 Cache
80486開始Cache被設(shè)計在了在CPU內(nèi)部,加入了8KB的L1 Cache,但是不分指令和數(shù)據(jù)Cache,同時也可以使用CPU外部主板上的Cache,即L2 Cache,大小從128KB到256KB不等。80486內(nèi)部的Cache是4路組相聯(lián)的設(shè)計,并且增加了Write-back的Cache屬性。
指令和數(shù)據(jù)Cache分開
到了80586/Pentium-1,Intel采用了雙路執(zhí)行的超標量結(jié)構(gòu),有2條并行整數(shù)流水線,需要對數(shù)據(jù)和指令進行雙重訪問,為了使訪問互不干涉,于是L1 Cache被一分為二,分為指令Cache和數(shù)據(jù)Cache,都是8KB大小。這就是iCache和dCache的鼻祖了。另外此時的一致性協(xié)議采用了MESI緩存一致性協(xié)議。
但是此時L2 Cache還是外部的,后面的Pentium Pro才把L2放到CPU內(nèi)部,到此為止,就確定了現(xiàn)代緩存的基本模式,并且一直沿用至今。
雙核上的L2 Cache
來到雙核時代之后,Intel雙核心CPU陸續(xù)推出了Pentium D、Pentium EE、Core Duo,其中Pentium D、Pentium EE的CPU內(nèi)部兩個內(nèi)核具有互相獨立的二級緩存,不是共享的呀。所以兩個CPU核之間的緩存數(shù)據(jù)同步是依靠北橋芯片上的仲裁單元通過前端總線在兩個核心之間傳輸來實現(xiàn)的,延遲還比較大。
多核共享L2 Cache
雙核CPU中的Core Duo在二級緩存上有了巨大突破,就是兩個核共享2MB的二級緩存,使用Intel的“Smart cache”共享緩存技術(shù),實現(xiàn)了真正意義上的緩存同步,極大發(fā)揮了二級緩存的作用。
現(xiàn)在Cache
現(xiàn)在CPU都有L3 Cache,一般是多核共享模式,而L2則被每個核單獨占據(jù)。這時L2也叫做MLC(Middle Level Cache),而L3被叫做LLC(Last Level Cache)。最后我們看看幾個典型的Cache設(shè)計圖:
了解了高速緩存的歷史基本就能窺出一點CPU的設(shè)計歷史。