緩存(L1、L2、L3)是什么?
以近代CPU的視角來說,三級緩存(包括L1一級緩存、L2二級緩存、L3三級緩存)都是集成在CPU內(nèi)的緩存,它們的作用都是作為CPU與主內(nèi)存之間的高速數(shù)據(jù)緩沖區(qū),L1最靠近CPU核心;L2其次;L3再次。運行速度方面:L1最快、L2次快、L3最慢;容量大小方面:L1最小、L2較大、L3最大。CPU會先在最快的L1中尋找需要的數(shù)據(jù),找不到再去找次快的L2,還找不到再去找L3,L3都沒有那就只能去內(nèi)存找了。
L1和L2cache是每個cpu核獨享的,L3cache是多個cpu核共享。L1cache中又分為L1D(L1 Data Cahce)和L1I(L1 Instruction Cache)
一級緩存(L1 Cache)
一級緩存這個名詞出現(xiàn)應(yīng)該是在Intel公司Pentium處理器時代把緩存開始分類的時候,當時在CPU內(nèi)部集成的CPU緩存已經(jīng)不能滿足整機的性能需求,而制造工藝上的限制不能在CPU內(nèi)部大幅提高緩存的數(shù)量,所以出現(xiàn)了集成在主板上的緩存,當時人們把CPU內(nèi)部集成的CPU緩存成為一級緩存,在CPU外部主板上的緩存稱為二級緩存。
而一級緩存其實還分為一級數(shù)據(jù)緩存(Data Cache,D-Cache,L1d)和一級指令緩存(Instruction Cache,I-Cache,L1i),分別用于存放數(shù)據(jù)及執(zhí)行數(shù)據(jù)的指令解碼,兩者可同時被CPU訪問,減少了CPU多核心、多線程爭用緩存造成的沖突,提高了處理器的效能。一般CPU的L1i和L1d具備相同的容量,例如I7-8700K的L1即為32KB+32KB。
二級緩存(L2 Cache)
隨著CPU制造工藝的發(fā)展,本來處于CPU外部的二級緩存也可以輕易地集成進CPU內(nèi)部,這種時候再用緩存是否處于CPU內(nèi)部來判斷一二級緩存已經(jīng)不再確切。集成進CPU的L2二級緩存運行速率漸漸可以跟上CPU的運行速度了,,其主要作用為當CPU在L1中沒讀取到所需要的數(shù)據(jù)時再把數(shù)據(jù)展示給CPU篩選(CPU未命中L1的情況下繼續(xù)在L2尋求命中,緩存命中的工作原理我們稍后再講)。
L2二級緩存比L1一級緩存的容量要更大,但是L2的速率要更慢,為什么呢?首先L2比L1要更遠離CPU核心,L1是最靠近CPU核心的緩存,CPU需要讀取L2的數(shù)據(jù)從物理距離上比L1要更遠;L2的容量比L1更大,打個簡單的比喻,在小盒子里面找東西要比在大房間里面找要方便快捷。這里也可以看出,緩存并非越大越好,越靠近CPU核心的緩存運行速率越快越好,非最后一級緩存的緩存容量自然是夠用即可。
L2二級緩存實際上就是L1一級緩存跟主內(nèi)存之間的緩沖器,在2006年的時間點上,Intel和AMD當家在售的幾款處理器可以看出他們對最后一級緩存不同的見解:Intel Core Duo不同于它的前輩Pentium D、EE,采用了雙核心共享的2M L2二級緩存,是屬于當時最先二級緩存架構(gòu),即“Smart Cache”共享緩存技術(shù),這種技術(shù)沿用到以后的Intel推出的所有多核心處理器上;而AMD Athlon 64 X2處理器則是每個CPU核心都具備獨立的二級緩存,Manchester核心的處理器為每核心512KB、Toledo核心為每核心1MB,兩個核心之間的緩存的數(shù)據(jù)同步是通過CPU內(nèi)置的SRI(系統(tǒng)請求接口)控制,這樣的數(shù)據(jù)延遲及占用資源情況都要比Intel的Pentium D、EE核心要好,但還是比不上Core為代表的Smart Cache緩存共享。
三級緩存(L3 Cache)
最初出現(xiàn)L3三級緩存的應(yīng)該是AMD的K6-III處理器,當時受限于制造工藝,L3只能集成在主板上。然后Intel首次出現(xiàn)L3三級緩存的是Itanium安騰服務(wù)器處理器,接著就是P4EE和至強MP。L3三級緩存的出現(xiàn)其實對CPU性能提升呈一個爬坡曲線——L3從0到2M的情況CPU性能提升非常明顯,L3從2M到6M提升可能就只有10%不到了,這是在近代CPU多核共享L3的情況下;當L3集成進CPU正式成為CPU內(nèi)部緩存后,CPU處理數(shù)據(jù)時只有5%需要在內(nèi)存中調(diào)用數(shù)據(jù),進一步地減少了內(nèi)存延遲,使系統(tǒng)的響應(yīng)更為快速。
Intel Nehalem L3 SmartCache示意圖
同理,L3即為L2與主內(nèi)存之間的緩沖器,主要體現(xiàn)在提升處理器大數(shù)據(jù)處理方面的性能,對游戲表現(xiàn)方面有較大的幫助。那么也許有人就會問了,是不是選擇CPU的時候看準L3買,哪個CPU的L3大就買哪個?非也,只有同架構(gòu)的情況下這種比較才具有意義,先舉個比較久遠的例子:Intel具備1MB L3的Xeon MP處理器仍然不是AMD沒有L3的皓龍?zhí)幚砥鲗κ?,再來個現(xiàn)有的:Intel I7-8700K 12MB L3和AMD Threadripper 1950X 32MB L3相比,自然是32MB比12MB大,但是平均下來也是一個核心2MB L3,性能就見仁見智了。
由于數(shù)據(jù)的局限性,CPU往往需要在短時間內(nèi)重復(fù)多次讀取數(shù)據(jù),內(nèi)存的運行頻率自然是遠遠跟不上CPU的處理速度的,怎么辦呢?緩存的重要性就凸顯出來了,CPU可以避開內(nèi)存在緩存里讀取到想要的數(shù)據(jù),稱之為命中(hit)。L1的運行速度很快,但是它的數(shù)據(jù)容量很小,CPU能在L1里命中的概率大概在80%左右——日常使用的情況下;L2、L3的機制也類似如此,這樣一來,CPU需要在內(nèi)存中讀取的數(shù)據(jù)大概為5%-10%,其余數(shù)據(jù)命中全部可以在L1、L2、L3中做到,大大減少了系統(tǒng)的響應(yīng)時間,總的來說,所有CPU讀取數(shù)據(jù)的順序都是先緩存再內(nèi)存。
二? ?MESI緩存一致性
cpu中的高速緩存分成四種狀態(tài)分別是:
M(Modified):已修改-數(shù)據(jù)被修改了
E(Exclusive):獨占的-數(shù)據(jù)是此cpu核獨占的
S(Shared):共享的-此數(shù)據(jù)是多個cpu核所共享的
I(Invalid):失效的-此數(shù)據(jù)被其他cpu核所修改了,失效
上圖中,假使有一個數(shù)據(jù)int a = 1,這個數(shù)據(jù)被兩個線程讀取到了,線程1在cpu核心1上面執(zhí)行,線程2在cpu核心2上面執(zhí)行,此時數(shù)據(jù)a的狀態(tài)在cup核心1和cpu核心2上面就是S(Shared)共享的,
線程1執(zhí)行指“a=a+1”,此時數(shù)據(jù)a在cpu核心1中的狀態(tài)就是M(Modified)修改的,數(shù)據(jù)a在cpu核心2上面的狀態(tài)就變成了I(Invalid)失效的,此時如果cpu核心2再去讀取a的數(shù)據(jù),會發(fā)現(xiàn)a數(shù)據(jù)的狀態(tài)是Invalid,那么就會直接去內(nèi)存讀取。
如果數(shù)據(jù)a,只在cpu核心1的高速緩存里面,而在cpu核心2的高速緩存里面沒有,此時數(shù)據(jù)a在cpu核心1中就是E(Exclusive)獨占的。
每個cpu核心與其他cpu核心交互,還要與一些內(nèi)存等等數(shù)據(jù)通信,這樣復(fù)雜度會很高。如果有一根總線,所有的cpu都與這根總線通信,復(fù)雜度就會降低很多,而真實的cpu的核心也是這樣的,最新的Intel處理器中,有一種快速通道互聯(lián)的技術(shù)。
審核編輯:湯梓紅
評論