新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Cache(高速緩存)技術(shù)詳解

Cache(高速緩存)技術(shù)詳解

作者: 時間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

計算機(jī)系統(tǒng)一般都采用多級存儲器結(jié)構(gòu),如寄存器、主存、磁盤、光盤、磁帶等。這種多級存儲器的特點是從外存儲器到CPU中的寄存器逐級向上,存儲容量逐級減小,而存取速度逐級提高。由于上下兩級存儲器的速度可以相差l—2個數(shù)量級或者更高,因此,上一級和下一級存儲器的數(shù)據(jù)交換常常成為系統(tǒng)瓶頸,大大降低了系統(tǒng)的性能。為了解決這個問題,通常采用的辦法是在兩級存儲器之間增加一個高速緩沖存儲器Cache。

所謂Cache是一個速度等于或者接近上一級存儲器訪問速度的小容量存儲器,其中保存了下級存儲器中部分當(dāng)前所需的數(shù)據(jù),因此CPU可以直接從Cache中取得所需的數(shù)據(jù),而不必訪問下一級存儲器。由于Cache的速度與上一級存儲器相當(dāng),因此保證了不會降低。Cache的設(shè)計依據(jù)是程序存取局部性原理,通常程序存取的一批數(shù)據(jù)總是存放在存儲器相鄰的單元中,只要把這一批數(shù)據(jù)同時調(diào)入中,即可保證近期內(nèi)需要的數(shù)據(jù)都能在Caclle中訪問成功。為了實現(xiàn)上述目標(biāo),在設(shè)計Cache時必須做到以下兩點:

1.保證訪問Cache有較高的命中率;
2.訪問Cache與訪問下級存儲器的方式不變、容量不減。因此對于編程人員來說,Cache是完全透明的,也就是說,他們感覺不到Cache的存在。

由于Cache的容量比下級存儲器小l-2個數(shù)量級、要做到上述兩點,則必須考慮以下問題:

1.如何組織Cache,使得下級存儲器的每個部分都能夠在需要時調(diào)入Cache
2.采用何種替換策略、使得訪問的命中率最高;
3.采用什么方法使得Cache和下級存儲器的數(shù)據(jù)具有—致性,即修改Cache后保證下級存儲器的內(nèi)容也隨之修改(或者相反)。

通過上面的介紹,我們知道Cache也是一種存儲器,其工作速度很高,如Ll和L2 Cache就是為了解決PU和DRAM主存之間的速度匹配而設(shè)置的。因此主存Cache也可以看作是高速CPU和低速DRAM之間的接口?;蛘哒f,把Cache看成一個適配器來解決CPU和DRAM之間的速度匹配問題。

當(dāng)CPU要從存儲器中讀取一個數(shù)據(jù)字時,它首先在Cache中查找。如果找到了,則立即從Cache中讀取并送到CPU中;如果在Cache中找不到,則用一個存儲器讀周期的時間從主存?zhèn)€讀出這個數(shù)據(jù)字送到CPU、并且把包含這個數(shù)據(jù)字的整個內(nèi)存數(shù)據(jù)塊都從主存送到Cache中。之所以要把包含被讀數(shù)據(jù)字的整個內(nèi)存數(shù)據(jù)塊都從主存送到Cache中是因為對存儲器的訪問具有局部性,也就是說連續(xù)讀取的數(shù)據(jù)宇一般在內(nèi)存中都是連續(xù)存放的;調(diào)入一個數(shù)據(jù)塊后,將使得以后若干次的訪存都可以通過訪問Cache來完成。如果調(diào)度算法得當(dāng),Cache的命中率可以很高。這樣,從用戶的角度看來,整個存儲器(Cache+DRAM)就變成了既有Cache這樣高的速度,又有DRAM這樣的大容量的存儲系統(tǒng)了。這對于解決存儲器這個瓶頸是十分有效的。

綜上所述,Cache具有以下一些特點:

·Cache雖然也是一類存儲器.但是不能由用戶直接訪問。
·Cache的容量不大,其中存放的只是主存儲器中某一部分內(nèi)容的拷貝,稱為存儲器映象。
·為了保證CPU訪問時有較高的命中率,Cache中的內(nèi)容應(yīng)該按一定的算法更換。
·Cache中的內(nèi)容應(yīng)該與主存中對應(yīng)的部分保持一致。也就是說,如果主存守的內(nèi)容在調(diào)入Cache之后發(fā)生了改變,那么它在Cache中的拷貝也應(yīng)該隨之改變。反過來,如果CPU修改了Cache中的內(nèi)容,也應(yīng)該修改主存中的相應(yīng)內(nèi)容。

現(xiàn)代的Cache系統(tǒng)常常采用分級組織的方法,在CPU中集成了一級Cache(L1),也稱為片內(nèi)Cache;在主板上配置二級Cache(L2)。CPU中的片內(nèi)Cache雖然容量較小,但是能夠以CPU相同的工作頻率工作,因此速度極快。一般情況下在L1未命中時,才在L2中查找。從賽揚(yáng)處理器開始,甚至已經(jīng)把L2集成到CPU內(nèi)部了(K6-3處理器也內(nèi)置了二級緩存,而這時相應(yīng)的Socket 7主板上的二級緩存就成為“三級”緩存了)。

所謂存儲器映像問題就是如何組織Cache.使得下級存儲器的每個部分都能夠在需要時調(diào)入Cache,并且確定調(diào)入的內(nèi)容放在Cache中的什么地方,以便于準(zhǔn)確迅速地查找。存儲器映像的方法主要有全相聯(lián)映像法、直接映象法和組相聯(lián)映象法。

全相聯(lián)映像法的基本思想是把一個主存塊的地址(塊號)和塊的內(nèi)容都拷貝到Cache行中;由于塊地址也保存在Cache中,因此可以拷貝到Cache中的任意位置。此法的優(yōu)點是靈活,但是查找比較困難,而且硬件的實現(xiàn)較為困難。

直接映像法的基本思想是一個主存塊只能拷貝到Cache中固定的行內(nèi)。該按硬件成本低,但是由于一個Cache行要對應(yīng)多個主存塊,在使用中當(dāng)這些主存塊需要同時調(diào)入Cache時將發(fā)生沖突、增加調(diào)入調(diào)出的開銷。

組相聯(lián)映像法是上述兩種方法的折衷方案。其基本思想是把Cache分為m個組,每個組分為n行。主存塊分配時對組是固定的、而在組內(nèi)的位置可以任意。這樣就綜合了兩者的優(yōu)點,這是目前最常用的方法。

由于Cache的容量總是遠(yuǎn)小于下一級存儲器的容量,因此Cache中只能是下級存儲器的部分映像。為了使下級存儲器的內(nèi)容都能在需要時拷貝到Cache中,必須隨時替換Cache內(nèi)容:即把當(dāng)前不需要的內(nèi)容調(diào)出Cache,騰出空間,調(diào)入當(dāng)前需要的內(nèi)存塊。在這種調(diào)入調(diào)出方法中,最重要的是替換的策略,即在需要時選擇Cache中的哪些行調(diào)出,再調(diào)入所需的內(nèi)存塊。這種替換策略通常稱為調(diào)度算法,它是由硬件實現(xiàn)的。如果算法選擇不當(dāng),將大大增加調(diào)入調(diào)出的頻度。例如把一個當(dāng)前不需要但是很快就將使用的行調(diào)出,必然會降低系統(tǒng)的效率。

常用算法有最不經(jīng)常使用算法、。

最不經(jīng)常使用算法(LFU算法)的思想是把最近一段時間內(nèi)被訪問次數(shù)最少的行調(diào)出。因此需要對每一個行設(shè)置一個計數(shù)器,對該行的訪問次數(shù)計數(shù)、在需要時比較各個計數(shù)器的值,淘汰計數(shù)次數(shù)最少的數(shù)據(jù)行。這種算法的問題是明顯的、那些在程序前期被頻繁訪問而在后期不再使用的行,可能會在相當(dāng)長的時間內(nèi)不被淘沈而那些剛剛調(diào)入并將繼續(xù)反復(fù)使用的行則可能因為其計數(shù)器中的值較小而頻道淘汰。這將嚴(yán)重影響系統(tǒng)的效率。

另一種較常用的算法是(LRU算法)。LRU算法的思想是將最近一段時間內(nèi)最少被訪問過的行淘汰出局。因此也需要為每行設(shè)置一個計數(shù)器、但是計數(shù)方法與LFU算法不同。LRU算法是把命中行的計數(shù)器清零、其它各行計數(shù)器加1。當(dāng)需要替換時淘汰行計數(shù)器計數(shù)值最大的數(shù)據(jù)行出局。

此外還有一些算法,鑒于篇幅不再贅述。

由于Cache中的內(nèi)容只是主存中相應(yīng)單元的“拷貝”。因此必須保持這兩處的數(shù)據(jù)絕對一致,否則就會產(chǎn)生錯誤。造成Cache和相應(yīng)主存單元數(shù)據(jù)不一致的原因來自兩個方面。一是CPU讀人Cache數(shù)據(jù)作了修改后再寫入Cache,而主存中相應(yīng)單元的內(nèi)容并未隨之變化二是在有多個設(shè)備對主存訪問的情況下造成的。如多處理器或有DMA的系統(tǒng),它們直接訪問主存儲器,修改了其中的內(nèi)容,而中的相應(yīng)數(shù)據(jù)卻末隨之修改。

1.CPU修改Cache后的處理

對于CPU修改了Cache的數(shù)據(jù),如何使主存中相應(yīng)單元的數(shù)據(jù)也隨之修改的問題。通常有三種不同的處理方式。

一種方式稱為“直寫式(write—through)”,其原理是在CPU向Cache寫入的同時,也把數(shù)據(jù)寫入主存儲器,以保證Cache和主存中相應(yīng)單元數(shù)據(jù)的一致性。直寫式系統(tǒng)簡單可靠,但由于CPU每次更新Cache時都要對主存儲器寫入,習(xí)此速度受到了影響。

第二種方式稱為“緩沖直寫式(Posted Write)”,其原理是CPU在更新Cache時不直接更新主存中的數(shù)據(jù),而是把更新的數(shù)據(jù)送入一個緩沖器中暫存,這樣CPU就不必等待主存寫入造成的延時而直接進(jìn)入下一周期的操作在適當(dāng)?shù)臅r候再把緩沖器中的內(nèi)容寫入主存中(例如在CPU讀Cache的同時;把緩沖器的內(nèi)容寫入主存)。這種方式在一定程序上提高了速度,但由于緩沖器的容量有限,只能鎖存——次寫入的數(shù)據(jù),如果發(fā)生連續(xù)的寫操作則CPU仍需要等待。上述的直寫式或緩沖直寫式不僅速度低,而且在很多時候向主存寫入是不必要的。例如CPU可能多次對同一個Cache單元更新內(nèi)容,實際上只需把最后更新結(jié)果寫入主存即可,而不必更新一次Cache,就向主存寫入一次。根據(jù)這種思想提出了第三種方式,稱為“回寫式(Write—back)”。有的資料中也稱為“寫回”。這種方式的原理是CPU修改了Cache的內(nèi)容后并不立即修改主存中相應(yīng)的單元,而在被修改的Cache單元的內(nèi)容將從Cache中淘汰時(如更換頁面)才把它寫入主存儲器的相應(yīng)單元中?;貙懯较到y(tǒng)速度快,避免了不必要的冗余寫操作,但結(jié)構(gòu)上比較復(fù)雜。當(dāng)前的微機(jī)普遍采回寫式系統(tǒng)。

2.多處理器或DMA直接訪問主存儲器后的處理

多處理器或DMA直接訪問主存儲器造成主存和cache中的數(shù)據(jù)不一致發(fā)生在以下情形:當(dāng)主存中某單元內(nèi)容調(diào)入Cache后,又由其它處理器或DMA更新了主存儲器該單元的內(nèi)容。為了避免這種情況下的數(shù)據(jù)不一致,通常采用以下三種處理辦法。

一種辦法稱為“總線監(jiān)視”,即由cache控制器隨時監(jiān)視系統(tǒng)的地址總線,若有其它部件向主存中寫入了內(nèi)容,則把Cache中相應(yīng)單元的內(nèi)容置為無效,CPU必須重新從主存中讀人該單元的內(nèi)容。

第二種方式稱為“主存監(jiān)視”、由Cache控制器監(jiān)視所有主存儲器的讀寫操作所有對主存的訪問都必須通過Cache來完成。這樣,凡對主存的寫入也就對Cache中的相應(yīng)單元進(jìn)行拷貝從而保證了兩者數(shù)據(jù)的一致性。

第三種方式是設(shè)置“不可Cache區(qū) (Non Cacheable Block)”,這種方式的基本思想是在主存中開辟一塊區(qū)域,該區(qū)域中數(shù)據(jù)不受cache控制器的管理,不能調(diào)入Cache,CPU只能直接讀寫該區(qū)域的內(nèi)容。其它總線設(shè)備也只能把數(shù)據(jù)直接寫入該區(qū)域中。由于該區(qū)域不與Cache發(fā)生關(guān)系,也就不存在數(shù)據(jù)不一致的問題。不可Cache區(qū)方式是微機(jī)中最主要的方式,不少BIOS設(shè)置程序允許用戶設(shè)置不可Cache區(qū)的首地址和尺寸、以及可Cache區(qū)的地址范圍。

Cache在微機(jī)系統(tǒng)中獲得了廣泛應(yīng)用。除了CPU中的cache外,硬盤、光盤甚至主存中部可找到它的蹤影。

1 CPU中的Cache

從486CPU開始,在CPU芯片內(nèi)集成了Cache,稱為片內(nèi)Cache。此時由于受到工藝上的限制,片內(nèi)Cache的容量很小,只有8KB。片內(nèi)Cache的最大優(yōu)點是,CPU對它的訪問是在芯片內(nèi)部進(jìn)行的,不需要通過總線傳送數(shù)據(jù)因此速度很快;但是由于其容量很小,而處理器的時鐘頻率又很高,一旦出現(xiàn)片內(nèi)cache末命中的情況,性能將明顯化。因此在處理器芯片之外的主板上再加Cache,稱為二級Cache(L2Cache),或稱為板載Cache。

在實際使用中,進(jìn)入Cache的內(nèi)容既可以是指令也可以是數(shù)據(jù),而CPU對于這兩者的處理是不完全相同的。為了使達(dá)到最佳狀態(tài),從Pentium處理器開始把片內(nèi)Cache容量增加到16KB。其中指令CBche和數(shù)據(jù)Cache各占8KB。

Intel公司在1995年末推出了Pentium Pro(P6),為了進(jìn)一步改善系統(tǒng)性能,P6采用了雙穴封裝,即除了CPU外,還把256/5l2KB的二級Cache也封裝在同一個陶瓷片內(nèi)。這樣,L2也能以處理器的時鐘高速運(yùn)行,大大地提高了。

由于P6采用的方式成本很高,在InteI隨后推出的Pentium II中,把L2又從CPU陶瓷封裝中分立出來,和CPU共同安裝在一塊稱為SEC的卡盒內(nèi),而Pentium II處理器則采用了雙獨(dú)立總線結(jié)構(gòu),其中一條總線聯(lián)接L2高速緩存,另一條負(fù)責(zé)主存。由于Pentium II的L2只能以CPU時鐘的一半工作。因此比Pentium Pro的L2慢一些。作為一種補(bǔ)償,Intel將Pentium II上的Ll高速緩存從16K加倍到32K,從而減少了對L2高速緩存的調(diào)用頻率。而在非Intel CPU中,L1的容量則更大,以期求得更好的系統(tǒng)性能。

為了匹配硬盤和主存在數(shù)據(jù)傳送速度上的矛盾,微機(jī)系統(tǒng)中毫無例外地采用了硬盤高速緩存,或稱為硬盤Cache。硬盤高速緩存分為兩種:硬件高速緩存和軟件高速緩存。軟件高速緩存是利用軟件工具(如Smart Drive)在系統(tǒng)主存中開辟的一塊區(qū)域作為數(shù)據(jù)傳送緩沖區(qū),硬件高速緩存則是在磁盤控制器中安裝的一塊RAM,通過RAM緩沖區(qū)讀寫數(shù)據(jù)可以得到更高的訪問速度。早期硬盤中的cache很小,只有數(shù)十KB到數(shù)百KB,目前新型硬盤的高速緩存均達(dá)到2MB。在選購硬盤時除了注意容量、帶寬、轉(zhuǎn)速等參數(shù)外,還應(yīng)該考慮Cache的容量,越大越好。當(dāng)Cache容量大時,能夠保證較穩(wěn)定的突發(fā)數(shù)據(jù)傳送;而如果Cache容量較小,在讀寫大型圖形或視頻文件時,由于連續(xù)傳送的數(shù)據(jù)量很大,緩沖區(qū)則不能表示出其優(yōu)越性,使得數(shù)據(jù)傳送不再能處于突發(fā)傳送方式,而處于持續(xù)傳送方式,降低了數(shù)據(jù)帶寬。

3.光盤

以CD—ROM驅(qū)動器為例,其中配置的Cache通常為128KB或者256KB,高檔CD—ROM驅(qū)動器中的Cache容量可達(dá)512KB甚至更高。在CD ROM中配置Cache的目的仍然是作為光盤的高速緩存,以便減少讀盤的次數(shù),這對于改善CD RoM的性能是很有好處的。
同樣,其它品種的光盤驅(qū)動器,如CD-R、CD—RW、M0、DVD—ROM等,也都配置了Cache。

4.主存儲器中的Cache

主存通常是采用DRAM(動態(tài)隨機(jī)存取存儲器)器件制作的,而Cache一般采用速度更高的SRAM(靜態(tài)隨機(jī)存取存儲器)制作。一種新型的增強(qiáng)DRAM)采用了在DRAM芯片上集成一個小容量SRAM的辦法,我們可以把這一小片SRAM稱為主存中的Cache。這個Cache在突發(fā)式讀寫時非常有利,使DRAM芯片的性能得到了明顯的提高。

本文引用地址:http://www.butianyuan.cn/article/201706/348450.htm


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉