⑴ 主存儲器和cpu之間增加高速緩沖存儲器的目的
CPU處理速度快,但主存儲器速度慢,需要與CPU聯系更緊密的高速緩存,作為數據中轉的橋梁。CPU處理好的或需要處理的數據放在高速緩存中,避免CPU直接與慢速存儲器打交道,可以更高效地工作。
⑵ CPU與高速緩存(資料庫)
什麼是高速緩存技術:
高速緩存英文是cache。一種特殊的存儲器子系統,其中復制了頻繁使用的數據,以利於CPU快速訪問。存儲器的高速緩沖存儲器存儲了頻繁訪問的 RAM 位置的內容及這些數據項的存儲地址。當處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。如果存有該地址,則將數據返回處理器;如果沒有保存該地址,則進行常規的存儲器訪問。因為高速緩沖存儲器總是比主RAM 存儲器速度快,所以當 RAM 的訪問速度低於微處理器的速度時,常使用高速緩沖存儲器。
高速緩存的作用:
在CPU開始執行任何指令之前,都會首先從內存中取得該條指令以及其它一些相關數據和信息。為了加快CPU的運行速度,幾乎所有的晶元都採用兩種不同類型的內部存儲器,即高速緩存。緩存被用來臨時存放一些經常被使用的程序片段或數據。
一級高速緩存是性能最好緩存類型,與解釋指令和執行算術運算的處理單元一到構成CPU的核心。CPU可以在全速運行的狀態下讀取存放在一級高速緩存中的指令或數據。Intel的處理器產品一般都會具有32K的一級緩存,而象AMD或Via這種競爭對手的產品則會使用更多的一級緩存。
如果在一級緩存中沒有找到所需要的指令或數據,處理器會查看容量更大的二級緩存。二級緩存既可以被集成到CPU晶元內部,也可以作為外部緩存。Pentium II處理器具有512K的二級緩存,工作速度相當於CPU速度的一半。Celeron以及更新的Pentium III晶元則分別具有128K和256K的在片二級緩存,能夠在處理器全速下運行。
對於存放在速度較慢的二級緩存中的指令或數據,處理器往往需要等待2到4個時鍾周期。為了充分利用計算資源,CPU可以在這段時間內查看和執行其它正在等候處理,但不需要使用額外數據的指令,從而提高整個系統的速度,把空閑時間降低到最低程度。
⑶ 何謂』高速緩存』高速緩存=RAM嗎詳見問題補充說明
1,高速緩存(Cache),全稱「高速緩沖存儲器」。
2,例如:當CPU處理數據時,它會先到高速緩存中去尋找,如果數據因之前的操作已經讀取而被暫存其中,就不需要再從主內存中讀取數據——由於CPU的運行速度一般比主內存快,因此若要經常存取主內存的話,就必須等待數個CPU周期從而造成浪費。
3,提供「高速緩存」的目的是為了讓數據存取的速度適應CPU的處理速度,其基於的原理是內存中「程序執行與數據訪問的局域性行為」。
4,現在Cache的概念已經被擴充了:不僅在CPU和主內存之間有Cache,而且在內存和硬碟之間也有Cache(磁碟高速緩存),乃至在硬碟與網路之間也有某種意義上的「Cache」(Internet臨時文件夾)。
5,凡是位於速度相差較大的兩種硬體之間的,用於協調兩者數據傳輸速度差異的結構,均可稱之為Cache。
6,所以硬碟和內存之間的Cache就叫做磁碟高速緩存。它是在內存中開辟一塊位置,來臨時存取硬碟中的數據。這項技術可使計算機讀寫時的存儲系統平均數據傳輸率提高5-10倍,適應了當前激增的海量數據存儲需求。
7,在DOS時代,我們用:
smartdrv 內存容量
命令來載入硬碟高速緩存。自從有了Windows後,我們就不需要載入硬碟高速緩存了,因為Windows本身有自己的高速緩存管理單元,如果強行使用smartdrv命令載入,反而會影響Windows的性能。
8,我們在用硬碟安裝Win2000/XP時候,系統會提示載入高速緩存,這是因為在安裝的初期還是DOS操作,所以為了達到讀存的速度,安裝程序要求載入高速緩存。
⑷ 高速跟蹤緩存是什麼
、高速緩存的概念和原理
1、高速緩存出現的原因
高速緩存(Cache)的出現主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度要比內存讀寫速度快很多,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。為了減少這種情況的發生,人們就想到了使用Cache,它採用一種讀寫速度要比系統內存快很多的特殊靜態內存。系統工作時,將運行時要經常存取的一些數據從系統內存讀取到Cache中,而CPU會首先到Cache中去讀取或寫入數據,如果Cache中沒有所需數據(或Cache已滿,無法再寫入),則再對系統內存進行讀寫,另外Cache在空閑時也會與內存交換數據。其實質就是是在慢速DRAM和快速CPU之間插入一速度較快、容量較小的SRAM,起到緩沖作用,使CPU既可以以較快速度存取SRAM中的數據,提高系統整體性能,又不使系統成本上升過高。
2、高速緩存的工作原理
Cache的工作原理是基於計算機程序訪問的局部性。對大量典型程序運行情況的分析結果表明,在一個較短的時間間隔內,由程序產生的地址往往集中在存儲器邏輯地址空間的很小范圍內。對這些地址的訪問具有時間上集中分布的傾向。數據分布以及工作單元的選擇都可以使存儲器地址相對集中。這種對局部范圍的存儲器地址頻繁訪問,而對此范圍以外的地址則訪問甚少的現象,就稱為程序訪問的局部性。根據程序的局部性原理,就為Cache的存在提供了理論依據,系統正是依據此原理,不斷地將與當前指令集相關聯的一個不太大的後繼指令集從內存讀到Cache,然後再與CPU高速傳送,從而達到速度匹配。
3、高速緩存的分級結構
CPU高速緩存是分級構造的,一般由L1和L2兩極構成,通常L1 Cache的速度最快,與CPU核心的距離也最近,但容量較小,而L2 Cache 速度稍慢,但容量較大。Cache採用分級結構的主要理由在於:對於一個典型的一級緩存系統的80%的內存申請都發生在CPU內部,只有20%的內存申請是與外部內存打交道。而這20%的外部內存申請中的80%又與二級緩存打交道。因此,採用分級結構將更加有利於效能的提升和成本的合理分配。
這種分層的高速緩存布局有助於彌合處理器與系統內存速度之間不斷加大的差距,處理器速度每年大約提高50%,而DRAM存取速度每年僅提高5%,由於性能不匹配程度的加劇,CPU將增加第三級,甚至第四級高速緩存。
4、高速緩存的構成
目前Cache基本上都是採用SRAM存儲器,SRAM是英文Static RAM的縮寫,它是一種具有靜志存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。不像DRAM內存那樣需要刷新電路,每隔一段時間,固定要對DRAM刷新充電一次,否則內部的數據即會消失,因此SRAM具有較高的性能,但是SRAM也有它的缺點,即它的集成度較低,相同容量的DRAM內存可以設計為較小的體積,但是SRAM卻需要很大的體積,這也是目前不能將Cache容量做得太大的重要原因。它的特點歸納如下:優點,節能、速度快,不必配合內存刷新電路,可提高整體的工作效率。 缺點,集成度低,相同的容量體積較大,而且價格較高,少量用於關鍵性系統以提高效率。
二、CPU 高速緩存的發展歷史
高速緩存最初應用在CPU領域,目前在CPU領域的應用也最為廣泛和深入。下面就簡單談談高速緩存隨CPU的發展而不斷變化的歷史過程。
1、80486開始出現了內部Cache
PC在誕生的初期並不存在Cache的概念,由於CPU主頻很低,DRAM的存取時間甚至快於CPU存取時間,因此無需Cache。 80386時代開始出現了外部Cache。在80486時代CPU內部才正式出現了Cache。實際上80486就是由更高主頻的80386 加80387數字協處理器以及8kB 內部Cache構成。80486晶元內由8kB的Cache來存放指令和數據。同時,80486也可以使用處理器外部的第二級Cache,用以改善系統性能並降低80486要求的匯流排帶寬。
2、Peutium時代Cache技術發展迅速
Peutium不僅分離L1 Cache和L2 Cache ,而且由於Pentium處理器採用了超標量結構雙路執行的流水線,有2條並行整數流水線,處理器也需要對命令和數據進進雙倍的訪問。為使這些訪問不互相干涉,Intel把在486上共用的內部Cache,分成2個彼此獨立的8kB代碼Cache和8kB數據Cache,這兩個Cache可以同時被訪問。這種雙路高速緩存結構減少了爭用Cache所造成的沖突,提高了處理器效能。Pentium的Cache還採用了回寫寫入方式,這同486的貫穿寫入方式相比,可以增加Cache的命中率。此外,還採用了一種稱為MESI高速緩存一致性協議,為確保多處理器環境下的數據一致性提供了保證。在Pentium MMX中更是增大了L1的容量,並改進了相關的演算法。
3、Pentium Pro出現內嵌式L2 Cache
為使Pentium Pro的性能超過Pentium,必需使用創新的設計方法,Pentium Pro使用了內嵌式L2 Cache,大小為512kB。此時的L2已經用線路直接連到CPU上,好處就是減少了對L1 Cache的需求。L2 Cache與CPU同步運行。當L1 Cache不命中時,立刻訪問L2 Cache,不產生附加延遲。為進一步減少因要訪問的信息不在高速緩沖中時所帶來的性能損失,Pentium Pro的L1和L2都設計成非鎖定型。即當哪個Cache中沒有CPU所需的信息時,它不妨礙後面訪問Cache的處理過程。但限於當時的CPU製造工藝,Pentium Pro的內嵌式L2 Cache 良品率太低,生產成本過高, Pentium Pro成為一款壽命短暫的過渡產品。
4、PentiumⅡ的雙重獨立匯流排
PentiumⅡ是Pentium Pro的改進型,具有MMX指令,使用動態執行技術,採用雙獨立匯流排結構。PentiumⅡ同樣有2級Cache,L1為32kB(指令和數據Cache各16kB)是Pentium Pro的一倍。L2為512kB。
Pentium Ⅱ與Pentium Pro在L2 Cache 的不同主要在於L2 Cache已不在內嵌晶元上,而是與CPU通過專用64位高速緩存匯流排相聯,與其它元器件共同被組裝在同一基板上,即「單邊接觸盒」上。雙獨立匯流排結構就是:L2高速緩存匯流排和處理器至主內存的系統匯流排, PentiumⅡ處理器可以同時使用這兩條匯流排,與單一匯流排結構的處理器相比,該處理器可以進出兩倍多的數據。
5、PentiumⅢ L2 Cache進一步改進
PentiumⅢ也是基於Pentium Pro結構為核心,在原有MMX多媒體指令的基礎上,又增了70多條多媒體指令。它使用動態執行技術,採用雙獨立匯流排結構。 PentiumⅢ具有32kB非鎖定L1 Cache和512kB非鎖定L2 Cache。L2可擴充到1~2MB,具有更合理的內存管理,可以有效地對大於L2緩存的數據塊進行處理,使CPU、Cache和主存存取更趨合理,提高了系統整體性能。在執行大數據流量程序時,高效率的高速緩存管理使PⅢ避免了對L2 Cache的不必要的存取。由於消除了緩沖失敗,多媒體和其它對時間敏感的操作性能更高了。對於可緩存的內容,PⅢ通過預先讀取期望的數據到高速緩存里來提高速度,這一特色提高了高速緩存的命中率,減少了存取時間。
三、其他配件中的高速緩存
Cache從本質上說是一種高速設備和低速設備的速度匹配技術,不僅用在提高CPU對內存的讀寫速度上,而且在電腦的其它配件中也得到了廣泛應用。在較慢速的其它外圍設備和內存的數據交換中,甚至在網路通訊中,都需要使用Cache技術。推而廣之,凡是在傳輸速度有較大差異的設備之間,都可以利用Cache的速度匹配技術。
1、主板高速緩存
由於在Pentium II推出之前,CPU只有內部集成的L1 Cache(一級高速緩存),L2Cache(二級高速緩存)都被放置在主板上。Pentium時代的主板上大都用速度較快,容量較大的同步PB SRAM (Pipeline Burst SRAM 管線突發式靜態內存),一般為256KB或512KB。當時在主板上還存在Tag SRAM的概念。
Tag SRAM,即標記的靜態隨機存取存儲器,它是在高速緩存系統中配合高速緩存的附加SRAM,它也是高速緩存,只是用在高速緩存電路中記錄地址數據,當CPU要讀取主存某一個地址中的數據時,會先到高速緩存電路中去尋找,對高速緩存系統的Tag SRAM所記錄的地址數據進行搜尋和對比,當高速緩存內也存有此地址的數據時,高速緩存匯流排的仲裁控制電路即將數據讀取傳回CPU,若對比Tag SRAM記錄的地址數據而找不到此數據的地址時,CPU就會到主存讀取數據。因此Tag SRAM與高速緩存的命中率有很大關系。由於現在CPU內部都集成了L2 Cache,故PII以後,主板上都不再集成Cache了。
2、CPU高速緩存的應用
關於CPU高速緩存的發展歷史等相關情況,前面已經談及。這里主要介紹一下目前主流CPU使用高速緩存的情況。
象最新的Northwood P4處理器,不僅採用了0.13 微米工藝生產,其體系結構也有所改變,提高了運算效率(指令周期)。 並且將L2 CACHE的容量由老P4的256K 增加為512K。在性能上有10%左右的提升。
Tualatin 賽揚的二級緩存採用了全速256KB(8路), Pentium III同樣大小的二級緩存,這對於提高CPU的性能有很大的幫助。Tualatin核心賽揚的性能非常不錯,在很大程度上就是得益於256KB的全速緩存。這也充分反映出高速緩存對電腦配件性能的影響。
AMD 的Morgan實際上和Palomino核心的毒龍規格相同,只是CPU內部L2 Cache有所不同。最引人注意的一點是改進了Cache演算法。在Morgan中包含了一個硬體化的數據預讀取規則。這個功能就是在CPU對數據進行了處理之後,預讀取設備可以猜測哪些數據是CPU所需要的。如果這些數據並沒有在Cache中,那麼這個預讀取設備就會自動到主內存中去重新獲取這個數據;而如果這個數據已經存在於Cache之中的話,那麼CPU就會更加快速地得到這個數據。
Athlon XP無疑是AMD今年最成功的產品,它採用了類似於Pentium 4的硬體預讀技術--執行跟蹤高速緩存,預先將處理器可能需要的數據從主內存讀到緩存中,這一過程能明顯提高系統匯流排和內存帶寬的利用率,進而提升系統性能。
主要用於伺服器的Merced 對Cache的要求更高了。為此,lntel在晶元內開發新的Cache,並增加L1 Cache的容量,來平衡CPU和DRAM間的速度。為此,在Merced的片上最接近執行單元旁再設另一處Cache,稱為L0緩存,是指令/數據分離型。由於L0Cache在物理位置上比L1離執行單元更近,布線距離的縮短,使它與執行單元間的數據交換速度比L1還快,可以進一步提高工作主頻。 同時,還要在晶元內部配置超過1MB的大容量L1 Cache。晶元內部Cache比外部Cache更易於提升與執行單元間的數據傳送速度。
3、硬碟高速緩存
在PC的磁碟系統中,高速緩存也得到了廣泛應用。為提高內存對硬碟的讀寫速度,就要建立磁碟高速緩存,不過硬碟高速緩存不必使用昂貴的SRAM,使用普通的DRAM即可,因為DRAM內存的存取速度對CPU來說較慢,但對磁碟的存取速度卻是很快的。這是因為磁碟存儲系統包含有磁頭的機械運動,而機械運動無法跟傳送電信號的電子速度相比。以前硬碟內部集成的高速緩存只有512K左右,而現在硬碟普遍將高速緩存的容量提升到2M以上,個別產品甚至達到了8M。由於硬碟Cache無需使用高速的SRAM,除了內部集成的SDRAM,我們還可以在系統主內存中劃出一個區域,作為專用的磁碟緩沖區,採用一定的數據結構,即可實現磁碟存取的二級Cache技術。硬碟高速緩存的工作過程及原理與CPU高速緩存類似,也是把即將訪問的數據整塊地拷貝到高速緩存區中,然後內存再到高速緩存中去逐個讀取數據。由於數據在RAM空間內部傳送要比在RAM與磁碟間傳送快得多,從而系統由此提高了存取速度。
下面給大家介紹一下西數WD1000BB-SE 8MB緩存硬碟,由於內存的讀寫速度大大高於硬碟的讀寫速度,因此大容量的緩存可以有效提高存儲器的數據傳輸速度。但目前市面所售的大部分硬碟都只帶512K--2MB的緩存。西數前段時間推出的7200轉,100G硬碟特別版WD1000BB-SE,其單碟容量為33G,介面類型為ATA100,平均尋道時間8.9毫秒,這方面參數與其他硬碟相比並無特別,不過WD1000BB-SE將硬碟的緩存容量從2MB直接提升到了8MB。引起了業界的普遍關注。經過多方面評測,由於緩存容量的加大,這款IDE介面硬碟的實際性能已經接近或超越了不少10000轉SCSI介面硬碟,成為IDE硬碟中的速度王者。這也充分反映出高速緩存對電腦配件性能的影響。
4、刻錄機的緩存
緩存容量的大小是衡量光碟刻錄機性能的重要技術指標之一,刻錄時數據必須先寫入緩存,刻錄軟體再從緩存區調用要刻錄的數據,在刻錄的同時後續的數據再寫入緩存中,以保持要寫入數據良好的組織和連續傳輸。如果後續數據沒有及時寫入緩沖區,傳輸的中斷則將導致刻錄失敗。因而緩沖的容量越大,刻錄的成功率就越高。市場上的光碟刻錄機的緩存容量一般在1MB~4MB之間,目前最大的有8M緩存的產品。尤其對於IDE介面的刻錄機,緩存容量很重要。增加高速緩存既有利於刻錄機的穩定工作,同時也有利於降低CPU的佔用率。 總之緩存大小對刻錄機是非常的重要的,緩存越大刻錄時就越穩定。目前市場上有多款刻錄機都帶有8M緩存,配合其他防刻死技術,有效防止了出現「緩存欠載」導致刻錄失敗的問題。
在普通光碟機中也內置有高速緩存,當然其作用沒有刻錄機中的重要,主要是為了提高讀盤效率,降低CPU佔用率,因此容量也比較小,一般只有512K。
5、其他設備的高速緩存
在PC其他配件中也都存在高速緩存的應用。比如在顯示系統中,由於3D應用的迅猛發展,現在顯卡上的顯示內存普遍達到了32M以上,甚至多達128M,因此也廣泛使用著高速緩存技術,如前台緩存、後台緩存、深度緩存和紋理緩存等。
現在還有所謂CDRAM(Cache DRAM) 帶高速緩存的內存,就是在內存晶元上集成了特殊構造的SRAM。發展好的話過幾年有可能成為主流內存。除此之外,甚至在音效卡、RAID卡、SCSI卡中也帶有高速緩存,
四、高速緩存的調整及應用
1、BIOS中與高速緩存有關的選項
1)Video ROM的Shadow
「影子」內存(ShadowRAM,或稱ROMShadow)是為了提高系統效率而採用的一種專門Cache技術,它把系統主板上的系統ROMBIOS和適配器卡上的視頻ROMBIOS等拷貝到系統RAM內存中去運行,其地址仍使用它們在上位內存中佔用的原地址。更確切地說,是從擴展內存中拿出一部分物理存儲空間,而賦以ROM的原地址,由這部分擴展RAM代替原ROM。由於ROM採用靜態CMOS電路,其存取速度為200ns左右,而系統存儲器RAM採用動態CMOS電路,其存取速度進幾十ns,速度快好幾倍,將存放在ROM中的BIOS代碼(基本輸入輸出例行程序,它們在系統運行期間非常頻繁的被調用)拷貝到系統RAM中去,就可提高系統運行和顯示的速度和效率。
2)CPU Internal Cache
CPU內部快速緩存是否打開,一般設置為Enable。Enternal Cache:是否使用主板緩存,一般設置為Enable。CPU L2 Cache Ecc Checking:CPU的L2 緩存Ecc 檢測,可設置為Disable。
從字面上看,「CPU Internal Cache」和「External Cache」分別指CPU內部和外部的高速緩存,但更准確的說法應該是一級緩存和二級緩存。Socket/Super 7架構的CPU內部只有一級緩存,二級緩存放在了主板上,「Internal」和「External」的說法就源於此,而對PⅡ、PⅢ和K6-Ⅲ等CPU來說,二級緩存也被集成到CPU內部,內外部的說法就不太確切了,因此一些Slot 1主板對此進行了修改,改稱為「CPU Level 1 Cache」和「CPU Level 2 Cache」。除非打開後系統會出現死機等情況,否則這兩個選項都應設為Enabled,以加快CPU讀取內存的速度。
3)二級緩存的潛伏期
在BIOS中,我們還可以調節二級緩存的潛伏期,其中Level 2 Cache Latency(二級緩存潛伏期)有16個值可選(1~15),從理論上來說,數值越小延遲時間越短,性能也越高。如果把數值設得過小,二級緩存有可能停止工作,不僅系統性能會急速下跌,還會發生死機現象。L2 Cache對內存帶寬有重大影響,即使CPU頻率再高,其它設備跟不上亦是無用,增加緩存潛伏期可以讓機器更穩定,避免上述情況。
4)System BIOS Cacheable
「System BIOS Cacheable」、「Video BIOS Cacheable」和「Video RAM Cacheable」分別指定是否可以使用二級高速緩存來緩存系統BIOS、顯卡BIOS和顯示內存,緩存之後,BIOS調用的執行速度以及訪問顯示內存的速度都會加快,因此最好都設成Enabled。不過,當顯示內存可以被緩存時,少數顯卡可能會出現兼容性問題,此時可考慮將第三項設為Disabled。
2、調整高速緩存優化系統
如果你的應用程序需頻繁訪問硬碟,可在擴充或擴展內存中建立「直接寫盤(write-through)」型磁碟高速緩存。用戶可在autoexec.bat文件中加入命令行:c:\dos\smartdrv.exe,則此驅動程序會自動裝入內存高端,其磁碟緩沖區預設值為256KB,你可以改變這個值的大小。一般設置為物理內存的1/8左右比較合適。SMARTDRV.EXE一個外部設備驅動程序。用此程序可啟動或設置磁碟高速緩沖存儲器。與Cache不同,Cache是充分發揮了CPU的速度,而SMARTDRV是加快了磁碟的讀寫速度。在實際應用中,SMARTDRV.EXT高速緩存驅動程序將記住每次應用程序使用磁碟的磁碟扇區數據,不用再訪問磁碟驅動器,而是訪問內存中已包含這些數據的區域。
總的來說,PC中的Cache主要是為了解決高速設備和低速設備間速度匹配的問題,是提高系統性能,降低系統成本而採用的一項技術。隨著電腦技術的飛速發展, Cache已成為PC中大多數配件不可缺少的組成部分,是衡量系統性能優劣的一項重要指標。從系統的性價比考慮,Cache的配備將在很長一段時間內仍然是PC中重要的技術之一。
⑸ 共享存儲區通信有哪些優點使用上有哪些限制
共享存儲區通信的優點有:常用的集中式多處理機使用的通信機制兼容。
限制有:是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。
共享存儲是指兩個或多個處理機共用一個主存儲器的並行體系結構。每一個處理機都可以把信息存入主存儲器,或從中取出信息。處理機之間的通信通過訪問共享存儲器來實現。
系統結構
1、無高速緩沖存儲器的集中式
這種結構的處理機沒有高速緩沖存儲器,多個處理機通過交叉開關或多級互聯網路等直接訪問共享存儲器。由於任一存儲單元在系統中只有一個備份,這類系統不存在高速緩沖存儲器一致性問題,系統的可伸縮性受限於交叉開關或多級互聯網路的帶寬。
2、基於高速緩沖存儲器的集中式
在這種結構的系統中,每個處理機都有高速緩沖存儲器,多個處理機一般通過匯流排與存儲器相連。每個處理機的高速緩沖存儲器通過偵聽匯流排來維持數據一致性。
3、具有高速緩沖存儲器一致性的分布式
這種結構稱為高速緩沖存儲器一致的非均勻存儲訪問結構。這類系統的共享存儲器分布於符結點之間。結點之間通過可伸縮性好的互聯網路相連,每個處理機都能緩存共享單元,高速緩沖存儲器一致性的維護是這類系統的關鍵,決定著系統的可伸縮性。
4、唯高速緩沖存儲器的分布式
在這種結構中,每個結點的存儲器相當於一個大容量的高速緩沖存儲器,數據一致性也在這一級維護。這種系統的共享存儲器的地址是活動的。存儲單元與物理地址分離,數據可以根據訪存模式動態地在各結點的存儲器間移動和復制。
5、無高速緩沖存儲器一致性的分布式
這種結構稱為無高速緩沖存儲器一致性的非均勻存儲訪問結構。它的特點是雖然每個處理機都有高速緩沖存儲器,但硬體不負責維護高速緩沖存儲器一致性,而由編譯器或程序員來維護。
⑹ CPU Cache
title: CPU Cache
date: 2019-11-17 20:20:30
keywords: cache "CPU cache" "三級緩存" 緩存映射 cache原理 多級cache TLB
引入 Cache 的理論基礎是程序局部性原理,包括時間局部性和空間局部性。時間局部性原理即最近被CPU訪問的數據,短期內CPU 還要訪問(時間);空間局部性即被CPU訪問的數據附近的數據,CPU短期內還要訪問(空間)。因此如果將剛剛訪問過的數據緩存在一個速度比主存快得多的存儲中,那下次訪問時,可以直接從這個存儲中取,其速度可以得到數量級的提高。
CPU緩存是(Cache Memory)位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。
在CPU中加入緩存是一種高效的解決方案,是對於存儲器件成本更低,速度更快這兩個互相矛盾的目標的一個最優解決方案,這樣整個內存儲器(緩存+內存)就變成了既有緩存的高速度,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是因為CPU的數據交換順序和CPU與緩存間的帶寬引起的。
下圖是一個典型的存儲器層次結構,我們可以看到一共使用了三級緩存
各級存儲訪問延遲的對比
介於CPU和主存儲器間的高速小容量存儲器,由靜態存儲晶元SRAM組成,容量較小但比主存DRAM技術更加昂貴而快速, 接近於CPU的速度。CPU往往需要重復讀取同樣的數據塊, Cache的引入與緩存容量的增大,可以大幅提升CPU內部讀取數據的命中率,從而提高系統性能。通常由高速存儲器、聯想存儲器、地址轉換部件、替換部件等組成。如圖所示。
早期採用外部(Off-chip)Cache,不做在CPU內而是獨立設置一個Cache。現在採用片內(On-chip)Cache,將Cache和CPU作在一個晶元上,且採用多級Cache,同時使用L1 Cache和L2 Cache,甚至有L3 Cache。
上圖顯示了最簡單的緩存配置。它對應著最早期使用CPU cache的系統的架構。CPU內核不再直接連接到主內存。所有的數據載入和存儲都必須經過緩存。CPU核心與緩存之間的連接是一種特殊的快速連接。在一個簡化的表示中,主存和高速緩存連接到系統匯流排,該系統匯流排也可用於與系統的其他組件進行通信。我們引入了系統匯流排(現代叫做「FSB」)。
引入緩存後不久,系統變得更加復雜。高速緩存和主存之間的速度差異再次增大,使得另一個級別的高速緩存不得不被添加進來,它比第一級高速緩存更大且更慢。出於經濟原因,僅增加第一級緩存的大小不是一種選擇。今天,甚至有機器在生產環境中使用了三級緩存。帶有這種處理器的系統如圖下所示。隨著單個CPU的內核數量的增加,未來的緩存級別數量可能會增加。現在已經出現了擁有四級cache的處理器了。
上圖展示了三級緩存的結構。L1d是一級數據cache,L1i是一級指令cache。請注意,這只是一個示意圖; 現實中的數據流從core到主存的過程中不需要經過任何更高級別的cache。CPU設計人員有很大的自由來設計cache的介面。對於程序員來說,這些設計選擇是不可見的。
另外,我們有擁有多個core的處理器,每個core可以有多個「線程」。核心和線程之間的區別在於,獨立的核心具有所有硬體資源的獨立的副本,早期的多核處理器,甚至具有單獨的第二級緩存而沒有第三級緩存。核心可以完全獨立運行,除非它們在同一時間使用相同的資源,例如與外部的連接。另一方面,線程們共享幾乎所有的處理器資源。英特爾的線程實現只為線程提供單獨的寄存器,甚至是有限的,還有一些寄存器是共享的。
一個現代CPU的完整概貌如圖所示。
由於cache中對應的都是主存地址,即物理地址,在cqu查看具體數據是否在cache中時,如果CPU傳送過來的地址時一個虛擬地址,需要將其轉換成實際物理地址再到cache中去尋找。Cache的實現需要TLB的幫助。可以說TLB命中是Cache命中的基本條件。TLB不命中,會更新TLB項,這個代價非常大,Cache命中的好處基本都沒有了。在TLB命中的情況下,物理地址才能夠被選出,Cache的命中與否才能夠達成。
TLB是一個內存管理單元用於改進虛擬地址到物理地址轉換速度的緩存。TLB是位於內存中的頁表的cache,如果沒有TLB,則每次取數據都需要兩次訪問內存,即查頁表獲得物理地址和取數據。
當cpu對數據進行讀請求時,CPU根據虛擬地址(前20位)到TLB中查找.TLB中保存著虛擬地址(前20位)和頁框號的對映關系,如果匹配到虛擬地址就可以迅速找到頁框號(頁框號可以理解為頁表項),通過頁框號與虛擬地址後12位的偏移組合得到最終的物理地址.
如果沒在TLB中匹配到虛擬地址,就出現TLB丟失,需要到頁表中查詢頁表項,如果不在頁表中,說明要讀取的內容不在內存,需要到磁碟讀取.
TLB是MMU中的一塊高速緩存,也是一種Cache.在分頁機制中,TLB中的數據和頁表的數據關聯,不是由處理器維護,而是由OS來維護,TLB的刷新是通過裝入處理器中的CR3寄存器來完成.如果MMU發現在TLB中沒有命中,它在常規的頁表查找後,用找到的頁表項替換TLB中的一個條目.
當進程進行上下文切換時重新設置cr3寄存器,並且刷新tlb.
有兩種情況可以避免刷tlb.
第一種情況是使用相同頁表的進程切換.
第二種情況是普通進程切換到內核線程.
lazy-tlb(懶惰模式)的技術是為了避免進程切換導致tlb被刷新.
當普通進程切換到內核線程時,系統進入lazy-tlb模式,切到普通進程時退出該模式.
cache是為了解決處理器與慢速DRAM(慢速DRAM即內存)設備之間巨大的速度差異而出現的。cache屬於硬體系統,linux不能管理cache.但會提供flush整個cache的介面.
cache分為一級cache,二級cache,三級cache等等.一級cache與cpu處於同一個指令周期.
CPU從來不從DRAM直接讀/寫位元組或字,從CPU到DRAM的每次讀或寫的第一步都要經過L1 cache,每次以整數行讀或寫到DRAM中.Cache Line是cache與DRAM同步的最小單位.典型的虛擬內存頁面大小為4KB,而典型的Cache line通常的大小為32或64位元組.
CPU 讀/寫內存都要通過Cache,如果數據不在Cache中,需要把數據以Cache Line為單位去填充到Cache,即使是讀/寫一個位元組.CPU 不存在直接讀/寫內存的情況,每次讀/寫內存都要經過Cache.
緩存里有的數據,主存中一定存在。
一級緩存中還分數據緩存(data cache,d-cache)和指令緩存(instruction cache,i-cache)。二者分別用來存放數據和執行這些數據的指令,而且兩者可以同時被cpu訪問,所以一級cache間數據時獨立的。
一級沒有的數據二級可能有也可能沒有。因為一級緩存miss會接著訪問二級緩存。
一級有二級一定有,三級也一定有。因為一級的數據從二級中讀上來的。在一級缺失二級命中時發生。
二級沒有的數據三級可能有也可能沒有。因為二級確實會接著訪問三級緩存。找不到會繼續訪問主存。
二級有的數據三級一定有。在二級缺失三級命中時,數據會從三級緩存提到二級緩存。
三級沒有的數據,主存可能有也可能沒有。三級緩存缺失,會訪問主存,主存也缺失就要從外存訪問數據了。
三級緩存有的數據主存一定有。因為在三級缺失主存命中時,數據會從主存提到三級緩存中來。
一級緩存就是指CPU第一層級的高速緩存,主要是為了緩存指令和緩存數據,一級緩存的容量對CPU性能影響非常大,但是因為成本太高,所以一般容量特別小,也就256KB左右。
二級緩存是CPU第二層級的高速緩存,對於CPU來說,二級緩存容量越大越好,它是直接影響CPU性能的,CPU每個核心都會有自己的緩存,一個CPU的二級緩存容量是所有核心二級緩存容量的總和。
三級緩存就是CPU第三層級的高速緩存,主要是為了降低與內存進行數據傳輸時的延遲問題,三級緩存與一二級不同,三級緩存只有一個,它是所有核心共享,所以在CPU參數中可以看到,三級緩存相對於其他兩級緩存來說都很大。
由於緩存的設置與OS無關且透明,所以對於不同的體系架構下不同的處理器對待緩存區域的處理和方式都不同,不同的處理器也有不同的緩存設置值。從主流的處理器cache大小來看,一般一個cache line的大小都是固定的64B左右,這是經過經驗得到的比較合理的大小,一般一級cache大小在數十KB左右,二級cache大小在數十到數百KB左右,而L3 cache大小在數MB左右。
由於三級cache一般來說是運用於擁有多核的處理器,對於單核處理器來說二級cache就能夠足夠保持夠高的cache命中率。所以一般的三級cache一般只針對於多核處理器。L1和L2級cache是處理器核所單獨的內容。L1又可以看成是L2的cache。L2可以看成是L3級cache的cache。所以我們分兩個部分討論數據放置與數據淘汰策略。
各級cache間的數據放置策略主要有三種。直接相連映射,全相聯映射和組相聯映射。將一個主存塊存儲到唯一的一個Cache行。對應的大小都是一個cache line的大小,一般來說是64B。
多對一的映射關系,但一個主存塊只能拷貝到cache的一個特定行位置上去。cache的行號i和主存的塊號j有如下函數關系:i=j mod m(m為cache中的總行數)。
可以將一個主存塊存儲到任意一個Cache行。
主存的一個塊直接拷貝到cache中的任意一行上
可以將一個主存塊存儲到唯一的一個Cache組中任意一個行。
將cache分成u組,每組v行,主存塊存放到哪個組是固定的,至於存到該組哪一行是靈活的,即有如下函數關系:cache總行數m=u×v 組號q=j mod u
組間採用直接映射,組內為全相聯。硬體較簡單,速度較快,命中率較高。是現代處理器中一般所常用的映射方式。
Cache工作原理要求它盡量保存最新數據,當從主存向Cache傳送一個新塊,而Cache中可用位置已被占滿時,就會產生Cache替換的問題。
常用的替換演算法有下面三種。
LFU(Least Frequently Used,最不經常使用)演算法將一段時間內被訪問次數最少的那個塊替換出去。每塊設置一個計數器,從0開始計數,每訪問一次,被訪塊的計數器就增1。當需要替換時,將計數值最小的塊換出,同時將所有塊的計數器都清零。
這種演算法將計數周期限定在對這些特定塊兩次替換之間的間隔時間內,不能嚴格反映近期訪問情況,新調入的塊很容易被替換出去。
LRU(Least Recently Used,近期最少使用)演算法是把CPU近期最少使用的塊替換出去。這種替換方法需要隨時記錄Cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。每塊也設置一個計數器,Cache每命中一次,命中塊計數器清零,其他各塊計數器增1。當需要替換時,將計數值最大的塊換出。
LRU演算法相對合理,但實現起來比較復雜,系統開銷較大。這種演算法保護了剛調入Cache的新數據塊,具有較高的命中率。LRU演算法不能肯定調出去的塊近期不會再被使用,所以這種替換演算法不能算作最合理、最優秀的演算法。但是研究表明,採用這種演算法可使Cache的命中率達到90%左右。
最簡單的替換演算法是隨機替換。隨機替換演算法完全不管Cache的情況,簡單地根據一個隨機數選擇一塊替換出去。隨機替換演算法在硬體上容易實現,且速度也比前兩種演算法快。缺點則是降低了命中率和Cache工作效率。
處理器微架構訪問Cache的方法與訪問主存儲器有類似之處。主存儲器使用地址編碼方式,微架構可以地址定址方式訪問這些存儲器。Cache也使用了類似的地址編碼方式,微架構也是使用這些地址操縱著各級Cache,可以將數據寫入Cache,也可以從Cache中讀出內容。只是這一切微架構針對Cache的操作並不是簡單的地址訪問操作。為簡化起見,我們忽略各類Virtual Cache,討論最基礎的Cache訪問操作,並藉此討論CPU如何使用TLB完成虛實地址轉換,最終完成對Cache的讀寫操作。
Cache的存在使得CPU Core的存儲器讀寫操作略微顯得復雜。CPU Core在進行存儲器方式時,首先使用EPN(Effective Page Number)進行虛實地址轉換,並同時使用CLN(Cache Line Number)查找合適的Cache Block。這兩個步驟可以同時進行。在使用Virtual Cache時,還可以使用虛擬地址對Cache進行定址。為簡化起見,我們並不考慮Virtual Cache的實現細節。
EPN經過轉換後得到VPN,之後在TLB中查找並得到最終的RPN(Real Page Number)。如果期間發生了TLB Miss,將帶來一系列的嚴重的系統懲罰,我們只討論TLB Hit的情況,此時將很快獲得合適的RPN,並依此得到PA(Physical Address)。
在多數處理器微架構中,Cache由多行多列組成,使用CLN進行索引最終可以得到一個完整的Cache Block。但是在這個Cache Block中的數據並不一定是CPU Core所需要的。因此有必要進行一些檢查,將Cache Block中存放的Address與通過虛實地址轉換得到的PA進行地址比較(Compare Address)。如果結果相同而且狀態位匹配,則表明Cache Hit。此時微架構再經過Byte Select and Align部件最終獲得所需要的數據。如果發生Cache Miss,CPU需要使用PA進一步索引主存儲器獲得最終的數據。
由上文的分析,我們可以發現,一個Cache Block由預先存放的地址信息,狀態位和數據單元組成。一個Cache由多個這樣的Cache Block組成,在不同的微架構中,可以使用不同的Cache Block組成結構。我們首先分析單個Cache Block的組成結構。單個Cache Block由Tag欄位,狀態位和數據單元組成,如圖所示。
其中Data欄位存放該Cache Block中的數據,在多數處理器微架構中,其大小為32或者64位元組。Status欄位存放當前Cache Block的狀態,在多數處理器系統中,這個狀態欄位包含MESI,MOESI或者MESIF這些狀態信息,在有些微架構的Cache Block中,還存在一個L位,表示當前Cache Block是否可以鎖定。許多將Cache模擬成SRAM的微架構就是利用了這個L位。有關MOESIFL這些狀態位的說明將在下文中詳細描述。在多核處理器和復雜的Cache Hierarchy環境下,狀態信息遠不止MOESIF。
RAT(Real Address Tag)記錄在該Cache Block中存放的Data欄位與那個地址相關,在RAT中存放的是部分物理地址信息,雖然在一個CPU中物理地址可能有40,46或者48位,但是在Cache中並不需要存放全部地址信息。因為從Cache的角度上看,CPU使用的地址被分解成為了若干段,如圖所示。
這個地址也可以理解為CPU訪問Cache使用的地址,由多個數據段組成。首先需要說明的是Cache Line Index欄位。這一欄位與Cache Line Number類似,CPU使用該欄位從Cache中選擇一個或者一組Entry。
Bank和Byte欄位之和確定了單個Cache的Data欄位長度,通常也將這個長度稱為Cache 行長度,上圖所示的微架構中的Cache Block長度為64位元組。目前多數支持DDR3 SDRAM的微架構使用的Cache Block長度都是64位元組。部分原因是由於DDR3 SDRAM的一次Burst Line為8,一次基本Burst操作訪問的數據大小為64位元組。
在處理器微架構中,將地址為Bank和Byte兩個欄位出於提高Cache Block訪問效率的考慮。Multi-Bank Mechanism是一種常用的提高訪問效率的方法,採用這種機制後,CPU訪問Cache時,只要不是對同一個Bank進行訪問,即可並發執行。Byte欄位決定了Cache的埠位寬,在現代微架構中,訪問Cache的匯流排位寬為64位或者為128位。
剩餘的欄位即為Real Address Tag,這個欄位與單個Cache中的Real Address Tag的欄位長度相同。CPU使用地址中的Real Address Tag欄位與Cache Block的對應欄位和一些狀態位進行聯合比較,判斷其訪問數據是否在Cache中命中
如果cache miss,就去下一級cache或者主存中去查找數據,並將查找到的數據採用上面的數據淘汰策略將數據替換到cache中。
由於在發生cache miss時會產生數據替換,在運行過程中緩存的數據也可能會被修改。所以需要一個策略來保持數據在緩存和主存間的一致性。
Cache寫機制分為write through和write back兩種。
⑺ 英特爾酷睿的高速緩存
英譯Intel Advanced Smart Cache
以往的多核心處理器,其每個核心的二級緩存是各自獨立的,這就造成了二級緩存不能夠被充分利用,並且兩個核心之間的數據交換路線也更為冗長,必須要通過共享的前端串列總和北橋來進行數據交換,影響了處理器工作效率。
英特爾®酷睿微結構體系結構採用了共享二級緩存的做法,有效加強了多核心架構的效率。這樣的好處是,兩個核心可以共享二級緩存,大幅提高了二級高速緩存的命中率,從而可以較少通過前端串列匯流排和北橋進行外圍交換。
這樣可以降低二級緩存的命中失誤,減少數據延遲,改進處理器效率,增加絕對性能和每瓦性能。
⑻ 通過HTTP Header控制緩存
我們經常通過緩存技術來加快網站的訪問速度,從而提升用戶體驗。HTTP協議中也規定了一些和緩存相關的Header,來允許瀏覽器或共享高速緩存緩存資源。這些Header包括:
Last-Modified 和 If-Modified-Since
ETag 和 If-None-Match
Expires
Cache-Control
以上Header又可以分成兩種類型:
協商緩存:瀏覽器發送驗證到伺服器,由伺服器決定是否從緩存中讀取,如 1 和 2 。
強緩存:瀏覽器驗證緩存的有效性,然後決定是否從緩存中讀取數據,如 3 和 4 。
本文將會分別介紹這四種配置的作用以及可能產生的影響。
1、Last-Modified 和 If-Modified-Since
Last-Modified:伺服器在響應請求時,告知瀏覽器資源的最後修改時間。
If-Modified-Since:瀏覽器再次發送請求時,會通過此Header通知伺服器在上次請求時所得到的資源最後修改時間。伺服器會將If-Modified-Since與被請求資源的最後修改時間進行比對。若資源的最後修改時間晚於If-Modified-Since,表示資源已被改動,則響最新的資源,返回200狀態碼;若資源的最後修改時間早於或等於If-Modified-Since,表示瀏覽器端的資源已經是最新版本,響應304狀態碼,通知瀏覽器繼續使用緩存中的資源。
2、ETag 和 If-None-Match
ETag:伺服器分配給資源的唯一標識符,資源被修改後,ETag也會隨之發生變化。
If-None-Match:瀏覽器再次發送請求時,會通過此Header通知伺服器已緩存資源的ETag。伺服器會將If-None-Match與被請求資源的最新ETag進行比對。若不相同,表示資源已被改動,則響應最新的資源,返回200狀態碼;若值相同,則直接響應304狀態碼,通知瀏覽器繼續使用緩存中的資源。
3、Expires
伺服器可以通過此Header向瀏覽器傳遞一個具體的時間(格林威治格式,例如:Thu, 19 Jul 2018 07:43:05 GMT) ,來明確地宣告資源的有效期。在資源過期之前,瀏覽器不再發送請求,而是直接從緩存中讀取數據。只有當資源過期之後,瀏覽器才會再次向伺服器請求該資源。
4、Cache-Control
伺服器使用此Header來向客戶端建議緩存策略,它有一下幾個可選值:
max-age=秒:告知瀏覽器緩存的有效時長,在該時間內瀏覽器將直接從緩存中讀取數據。
s-maxage=秒:作用同max-age,但是只對共享高速緩存(如CDN)有效,對瀏覽器無效。
no-cache:告知瀏覽器不要直接使用緩存,而是必須向伺服器發送請求。
no-store:告知瀏覽器不要緩存本次請求和響應的任何信息。
public:宣告任何緩存媒介都可以緩存該響應。
private:宣告該響應只允許個體客戶端(如瀏覽器)去緩存,而不允許共享高速緩存(如CDN)去緩存。
在上面的介紹中我們了解到瀏覽器會根據max-age設置的時間進行緩存。而通過研究發現CDN也會識別源站響應頭中Cache-Control屬性,根據max-age設置的時間進行緩存,但是,如果源站同時設置了s-maxage和max-age,那麼CDN會優先採用s-maxage。
下面通過圖例來展示一下這些可選值的效果。
首先了解一下瀏覽器是怎樣根據max-age進行緩存的:
從上圖不難發現,伺服器在Header中返回了Cache-Control: max-age=100後,瀏覽器成功緩存100秒,該時間段內的請求都從直接以本地緩存來響應。
那麼,伺服器在Header中返回Cache-Control:s-maxage=100時,又會對瀏覽器產生什麼樣的影響呢?
如上圖所示,瀏覽器沒有採取任何緩存策略,這是因為s-maxage面向的是共享高速緩。
上面這兩個例子很容易理解,在現實世界中,為了加快網站響應速度,我們可能會在瀏覽器和伺服器之間引入CDN服務。瀏覽器的請求會先到達CDN,然後CDN判斷是從緩存中讀取數據還是回源到伺服器。接下來,讓我們看看max-age和s-maxage會對CDN的緩存策略帶來哪些影響。
可以看出CDN也會利用max-age來緩存,所以在100秒內強制刷新瀏覽器時,CDN會直接用緩存來響應。
如果伺服器使用了s-maxage又會如何呢?
不難發現CDN對max-age和s-maxage採取了同樣的緩存策略,但瀏覽器並不會根據s-maxage來進行緩存。
CDN供應商的特殊規則
我們分別測試了阿里雲和騰訊雲的CDN對Cache-Control的支持情況,發現他們都有一些獨特的規則。阿里雲CDN可以在控制台里設置Cache-Control,該設置會覆蓋源伺服器的Cache-Control。
騰訊雲CDN雖然沒有再控制台提供覆蓋Cache-Control的功能,但其規則卻一點也不簡單,在使用的時候一定要特別注意:
伺服器和CDN均不對緩存進行配置時,CDN會採用默認的緩存機制(靜態文件緩存30天,動態請求不緩存);
CDN配置緩存機制(但並未開啟高級緩存配置)且伺服器設置Cache-Control: s-maxage=200,max-age=100時,CDN會按照其控制台設置的規則進行緩存,瀏覽器則按照max-age進行緩存;
伺服器不設置Cache-Control時,CDN會自動在響應的Header中添加Cache-Control: max-age=600,這就會讓瀏覽器將該資源緩存600秒;
伺服器設置為禁用緩存時,CDN和瀏覽器均不進行緩存;
伺服器設置Cache-Control: s-maxage=200,max-age=100並開啟CDN的高級緩存配置時,CDN會從s-maxage和控制台中設置的緩存時間中選擇最小值來作為緩存時間,而瀏覽器則始終使用max-age;
伺服器設置Cache-Control:max-age=100並開啟CDN的高級緩存配置時,CDN會從max-age和控制台中設置的緩存時間中選擇最小值來作為緩存時間,不影響瀏覽器的緩存策略。
組合使用
如果同時設置了這些Header,瀏覽器和高速共享緩存會按照下面的優先順序進行緩存:
Cache-Control > Expires > ETag > Last-Modified
也就是說,Cache-Control不僅是強緩存,而且擁有最高的優先順序,我們可以為不經常發生變化的資源應用該Header來提升響應時間。
在Ada中使用緩存
Ada提供了UI腳手架和API腳手架,這兩類腳手架的伺服器端入口文件分別為index.server.js和index.js,我們只需要在入口文件的請求處理函數中為響應添加適當的Header,即可通知客戶端進行響應的緩存,比如:
// 設置CDN緩存300秒,瀏覽器緩存200秒 ctx.response.headers.set('Cache-Control',public,s-maxage=300,max-age=200)
在為請求添加緩存Header之前,應該先為其制定適當的緩存策略,需要考慮該URL是否適合緩存(數據是否特定於用戶)以及需要緩存的時長等等。
總結
通過使用這些HTTP Header,我們可以主動影響瀏覽器甚至CDN的緩存策略,從而減少請求數量,提升網頁性能,減輕伺服器壓力。
Ada的靈活機制能讓我們為不同的URL設置不同的緩存策略,能夠更有針對性地進行主動緩存。
⑼ 為什麼多處理器共享高速緩存可以避免高速緩存內容過時
內存包括你說的那兩個,其中高速緩存是在主存上的暫存數據的一個容量很小的存儲器,並且存儲器里有,都是為了解決電腦各硬體之間速度不匹配未設置的一個高速緩存,這樣可以讓電腦的各個部件都能高校的運行,避免資源的浪費。一級二級都是為了一步步解決速度上的不一樣而設計的硬體,一級二級都是dram這樣是為了充分利用內存,不浪費資源,他們是集成到cpu上的。
⑽ 計算機中高速緩存的作用
計算機硬碟的高速緩存:
1.高速緩存的概念。緩存(Cache memory)是硬碟控制器上的一塊內存晶元,具有極快的存取速度,它是硬碟內部存儲和外界介面之間的緩沖器。由於硬碟的內部數據傳輸速度和外界介面傳輸速度不同,緩存在其中起到一個緩沖的作用。緩存的大小與速度是直接關繫到硬碟的傳輸速度的重要因素,能夠大幅度地提高硬碟整體性能。當硬碟存取零碎數據時需要不斷地在硬碟與內存之間交換數據,如果有大緩存,則可以將那些零碎數據暫存在緩存中,減小外系統的負荷,也提高了數據的傳輸速度。
2.高速緩存的作用。硬碟的緩存主要起三種作用:一是預讀取。當硬碟受到CPU指令控制開始讀取數據時,硬碟上的控制晶元會控制磁頭把正在讀取的簇的下一個或者幾個簇中的數據讀到緩存中(由於硬碟上數據存儲時是比較連續的,所以讀取命中率較高),當需要讀取下一個或者幾個簇中的數據的時候,硬碟則不需要再次讀取數據,直接把緩存中的數據傳輸到內存中就可以了,由於緩存的速度遠遠高於磁頭讀寫的速度,所以能夠達到明顯改善性能的目的;二是對寫入動作進行緩存。當硬碟接到寫入數據的指令之後,並不會馬上將數據寫入到碟片上,而是先暫時存儲在緩存里,然後發送一個「數據已寫入」的信號給系統,這時系統就會認為數據已經寫入,並繼續執行下面的工作,而硬碟則在空閑(不進行讀取或寫入的時候)時再將緩存中的數據寫入到碟片上。雖然對於寫入數據的性能有一定提升,但也不可避免地帶來了安全隱患——如果數據還在緩存里的時候突然掉電,那麼這些數據就會丟失。對於這個問題,硬碟廠商們自然也有解決辦法:掉電時,磁頭會藉助慣性將緩存中的數據寫入零磁軌以外的暫存區域,等到下次啟動時再將這些數據寫入目的地;第三個作用就是臨時存儲最近訪問過的數據。有時候,某些數據是會經常需要訪問的,硬碟內部的緩存會將讀取比較頻繁的一些數據存儲在緩存中,再次讀取時就可以直接從緩存中直接傳輸。
緩存容量的大小不同品牌、不同型號的產品各不相同,早期的硬碟緩存基本都很小,只有幾百KB,已無法滿足用戶的需求。2MB和8MB緩存是現今主流硬碟所採用,而在伺服器或特殊應用領域中還有緩存容量更大的產品,甚至達到了16MB、64MB等。
大容量的緩存雖然可以在硬碟進行讀寫工作狀態下,讓更多的數據存儲在緩存中,以提高硬碟的訪問速度,但並不意味著緩存越大就越出眾。緩存的應用存在一個演算法的問題,即便緩存容量很大,而沒有一個高效率的演算法,那將導致應用中緩存數據的命中率偏低,無法有效發揮出大容量緩存的優勢。演算法是和緩存容量相輔相成,大容量的緩存需要更為有效率的演算法,否則性能會大大折扣,從技術角度上說,高容量緩存的演算法是直接影響到硬碟性能發揮的重要因素。更大容量緩存是未來硬碟發展的必然趨勢。
高速緩存產生作用的時機:
3.作用體現及應用。 現在擁有大量數據,但最經常使用的往往只有其中一小部分。如國標漢字有6763個,但經常使用的只有3000個,其中幾百個又佔了50%以上的使用頻率。因此人們想到,如果將這幾百個放到存取最快的地方,就可以用很小的代價大大提高工作速度。高速緩存的工作原理基本就是這樣。例如我們知道內存的存取速度比硬碟快得多,我們可以在一開機時就將宋體字的前3000個、黑體字最常用的500個裝入內存專門開辟的區域,這樣當使用這部分字的時候就可以從內存取字,其餘的才會去讀硬碟。內存開辟的這部分區域就叫做高速緩存,它可能只佔所有字體存儲量的十分之一,但可以將讀寫字型檔的速度提高幾十倍。
具體看一下高速緩存起的使用。假設我們有100M數據,其中1M數據的使用頻率佔到了50%,又知內存存取時間只有硬碟時間的10萬分之一,因此如果我們用1M內存做高速緩存存儲最常用的1M數據就可以差不多將平均存取速度提高一倍。從這個例子可以看出,當數據使用越不平均,兩種存儲器之間的速度差越大時CACHE的作用就越大。
以上是一類使用分布固定的例子,在這種情況下,只要固定將這一部分數據裝入最快的存儲器就可以了。但在許多情況下,數據的使用頻率是不確定的,特別它是與時間相關的。如當我們在寫一篇文章時,對這篇文章的內容存取就特別頻繁。而過一會兒又去修一張照片,存取操作就轉移到了這張照片的數據上去,文章的數據就基本不用了。要讓一個系統能夠自動地根據當前數據的使用頻率改變高速存儲器中的內容才能使我們專門開出的高速緩存起作用。因此整個高速緩存系統應該包含調度數據的軟體。
CACHE系統怎樣調度數據
4.拓展知識-深入了解。 怡泓軟體早在1983年就在軟體內部使用了硬碟的CACHE系統,在早期內存很小的情況下有效地提高了硬碟上大量數據的存取速度。而PC DOS操作系統直到1990年的DR DOS 5.0和MS DOS 4.0中才內含了CACHE程序。從WINDOWS 3.0開始操作系統中都內建了硬碟CACHE系統,CACHE的概念也逐漸延伸到硬碟內部和CPU內部。
CACHE對數據的調度不一定只在兩種存儲器之間進行,如現在的CPU就有片上的一級、二級和內存共3種存儲器。為了便與理解,我們都以兩種存儲器為例。
為使CACHE系統能夠起到提高速度的作用,這兩種存儲器的速度必需有比較大的差異。如果用通用CPU來完成數據調度,兩種存儲器的速度差至少應該達到100倍以上。因為調度程序在每完成一次數據訪問時至少要消耗20-30個指令周期,如果速度只差10倍,用CACHE比不用還要慢。
數據的調度並不像我們想像地那樣簡單。第一高速存儲器中的每一個數據必需帶有地址信息,因為它從第二級存儲器中提出來後已經不是按順序排列。為了避免地址信息過多而造成的空間浪費和查詢時間的浪費,必需將數據分成塊。塊的大小也很有講究。太小了起不到壓縮時間和空間的作用,太大了讀一個數據會造成數百個可能用不著的數據湧入高速存儲器,反而起不到壓縮空間的作用。
高速存儲器中數據的地址信息查詢是數據調度時運算的大頭。當高速存儲器很大時,它的地址表也會很長。從計算機指令發出的是對第二級存儲器的存取指令,為了要看它是否在高速存儲器中,必需去查詢這個地址表。如果地址信息是順序排列的,平均查詢時間將是表長的一半。如果表長到了1000項,平均查一個數據地址就要500次比較。即使兩級存儲器的速度差達1000倍,這種方法也占不了任何便宜。一種方法是優先順序排序法,即每經過一段時間的使用就根據每塊數據的使用頻率修改表的排列,讓頻率最高的數據塊的地址排到最前面去,這樣可以有效地縮短查表次數。這是我們過去使用的方法。Intel發明了一種搶隊頭的方法。即每一個數據一旦被使用,就將它放到地址表的第一位去。它的優點是重整地址表的演算法最簡單,缺點是地址表的排列通常不是最優化的。還有一種方法是通過散列表來用空間換時間,這種演算法稍微復雜一點,但它通常可以在2次查詢就找到所需的地址,不過計算散列地址也要消耗不少時間。
我們從以上演算法的簡單介紹就可以看出,CACHE技術不是在什麼地方都可以使用的靈丹妙葯,它受調度計算的很大制約。在CPU內部,兩級存儲器的速度差往往到不了100倍以上,如何能實現有效的CACHE調度?它其中必須有專用的調度演算法部件,以保證在1/3的速度差之內完成調度運算,否則最多隻能實現一級緩存。
CACHE作用的局限性
從上面對CACHE調度演算法的簡單介紹我們已經看到,在沒有專用演算法部件的情況下,只有當兩級存儲器速度差很大的時候CACHE才起作用。內存和硬碟的速度差通常為105數量級,因此用內存做硬碟的高速緩存通常是很有效的。
另一方面,高頻使用的數據必須遠小於高速緩存的大小才行,如果大於高速緩存的大小就會造成剛進入緩存的數據馬上就被後來的數據擠出去,非但沒有加快速度,反而增加了一道間接傳遞的時間。當我們用PHOTOSHOP處理的圖像數據大於內存的1/3時就會出現這種情況。好在內存的速度遠大於硬碟的存取速度,這點變化我們通常感覺不出來。但在CPU中,就會非常明顯。CPU在處理圖像數據時,每次處理的數據量都遠遠超過它內部的一級和二級緩存,因此它的作用將大大降低,唯一的補償是處理程序的指令在一個操作——如銳化——中是固定的,它可以常駐高速緩存,減少讀指令的時間。這時不同CPU緩存的大小對運算速度的影響就很小了。因為即使再小的緩存,也存得下操作指令;再大的緩存也存不下被操作的圖像數據。
在CACHE調度中,為了保證數據的安全而做的回寫操作也是阻礙效率的因素。在對數據進行寫操作時,可以不將它寫回二級存儲器,如硬碟,一直到文件關閉甚至操作系統退出時再回寫,這樣的效率當然最高,但是非常不安全的。一旦一個程序崩潰,其它所有程序的數據就可能都損失了。所以現在的CACHE調度方案通常都內定必須立即回寫。我們馬上會想到,優化效率的一半沒有了。實際情況並非如此。因為回寫操作其實並不是立即發生的,它可以由一個優先順序較低的線程去完成,當你在考慮怎麼進一步調色時,操作系統插空將數據寫回硬碟。
即使內存非常大,PHOTOSHOP也將它的每一步操作寫回硬碟,這可以從PHOTOSHOP每次崩潰後都留下一個巨大的臨時文件看出。因此如果我們連續對圖像做旋轉、變形等操作,即使用了極大的內存,CACHE作用也只發生了一半。因此要全面提高PHOTOSHOP的效率,必須用RAID等技術提高硬碟的直接讀寫速度。同理,硬碟上的2M或4M緩存對於動輒幾十M的圖像數據是毫無作用的。