複製鏈接
請複製以下鏈接發送給好友

緩存

鎖定
緩存(cache),原始意義是指訪問速度比一般隨機存取存儲器(RAM)快的一種高速存儲器,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。緩存的設置是所有現代計算機系統發揮高性能的重要因素之一。
中文名
緩存
外文名
cache
學    科
計算機
目    的
提高數據存取速度
類    別
高速緩存、磁盤緩存
原    理
程序局部性原理

緩存簡介

緩存的工作原理 緩存的工作原理
緩存是指可以進行高速數據交換的存儲器,它先於內存CPU交換數據,因此速率很快。L1 Cache(一級緩存)是CPU第一層高速緩存。內置的L1高速緩存的容量和結構對CPU的性能影響較大,不過高速緩衝存儲器均由靜態RAM組成,結構較複雜,在CPU管芯面積不能太大的情況下,L1級高速緩存的容量不可能做得太大。一般L1緩存的容量通常在32—256KB。L2 Cache(二級緩存)是CPU的第二層高速緩存,分內部和外部兩種芯片。內部的芯片二級緩存運行速率主頻相同,而外部的二級緩存則只有主頻的一半。L2高速緩存容量也會影響CPU的性能,原則是越大越好,普通台式機CPU的L2緩存一般為128KB到2MB或者更高,筆記本、服務器工作站上用CPU的L2高速緩存最高可達1MB-3MB。由於高速緩存的速度越高價格也越貴,故有的計算機系統中設置了兩級或多級高速緩存。緊靠CPU的一級高速緩存的速度最高,而容量最小,二級高速緩存的容量稍大,速度也稍低 [1] 
緩存只是內存中少部分數據的複製品,所以CPU到緩存中尋找數據時,也會出現找不到的情況(因為這些數據沒有從內存複製到緩存中去),這時CPU還是會到內存中去找數據,這樣系統的速率就慢下來了,不過CPU會把這些數據複製到緩存中去,以便下一次不要再到內存中去取。隨着時間的變化,被訪問得最頻繁的數據不是一成不變的,也就是説,剛才還不頻繁的數據,此時已經需要被頻繁的訪問,剛才還是最頻繁的數據,又不頻繁了,所以説緩存中的數據要經常按照一定的算法來更換,這樣才能保證緩存中的數據是被訪問最頻繁的。

緩存工作原理

緩存工作原理 緩存工作原理
緩存的工作原理是當CPU要讀取一個數據時,首先從CPU緩存中查找,找到就立即讀取並送給CPU處理;沒有找到,就從速率相對較慢的內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。正是這樣的讀取機制使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是説CPU下一次要讀取的數據90%都在CPU緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來説,CPU讀取數據的順序是先緩存後內存
RAM(Random-Access Memory)和ROM(Read-Only Memory)相對的,RAM是掉電以後,其中的信息就消失那一種,ROM在掉電以後信息也不會消失那一種。RAM又分兩種,一種是靜態RAM,SRAM(Static RAM);一種是動態RAM,DRAM(Dynamic RAM)。前者的存儲速率要比後者快得多,使用的內存一般都是動態RAM。為了增加系統的速率,把緩存擴大就行了,擴的越大,緩存的數據越多,系統就越快了,緩存通常都是靜態RAM,速率是非常的快, 但是靜態RAM集成度低(存儲相同的數據,靜態RAM的體積是動態RAM的6倍), 價格高(同容量的靜態RAM是動態RAM的四倍), 由此可見,擴大靜態RAM作為緩存是一個非常愚蠢的行為, 但是為了提高系統的性能和速率,必須要擴大緩存, 這樣就有了一個折中的方法,不擴大原來的靜態RAM緩存,而是增加一些高速動態RAM做為緩存, 這些高速動態RAM速率要比常規動態RAM快,但比原來的靜態RAM緩存慢, 把原來的靜態RAM緩存叫一級緩存,而把後來增加的動態RAM叫二級緩存

緩存功能作用

硬盤的緩存主要起三種作用:

緩存預讀取

數據緩存 數據緩存
當硬盤受到CPU指令控制開始讀取數據時,硬盤上的控制芯片會控制磁頭把正在讀取的的下一個或者幾個簇中的數據讀到緩存中(由於硬盤上數據存儲時是比較連續的,所以讀取命中率較高),當需要讀取下一個或者幾個簇中的數據的時候,硬盤則不需要再次讀取數據,直接把緩存中的數據傳輸到內存中就可以了,由於緩存的速率遠遠高於磁頭讀寫的速率,所以能夠達到明顯改善性能的目的。

緩存寫入

緩存
緩存(16張)
當硬盤接到寫入數據的指令之後,並不會馬上將數據寫入到盤片上,而是先暫時存儲在緩存裏,然後發送一個“數據已寫入”的信號給系統,這時系統就會認為數據已經寫入,並繼續執行下面的工作,而硬盤則在空閒(不進行讀取或寫入的時候)時再將緩存中的數據寫入到盤片上。雖然對於寫入數據的性能有一定提升,但也不可避免地帶來了安全隱患——數據還在緩存裏的時候突然掉電,那麼這些數據就會丟失。對於這個問題,硬盤廠商們自然也有解決辦法:掉電時,磁頭會藉助慣性將緩存中的數據寫入零磁道以外的暫存區域,等到下次啓動時再將這些數據寫入目的地。

緩存臨時存儲

有時候,某些數據是會經常需要訪問的,像硬盤內部的緩存(暫存器的一種)會將讀取比較頻繁的一些數據存儲在緩存中,再次讀取時就可以直接從緩存中直接傳輸。緩存就像是一台計算機的內存一樣,在硬盤讀寫數據時,負責數據的存儲、寄放等功能。這樣一來,不僅可以大大減少數據讀寫的時間以提高硬盤的使用效率。同時利用緩存還可以讓硬盤減少頻繁的讀寫,讓硬盤更加安靜,更加省電。更大的硬盤緩存,你將讀取遊戲時更快,拷貝文件時候更快,在系統啓動中更為領先。
硬盤緩存 硬盤緩存
緩存容量的大小不同品牌、不同型號的產品各不相同,早期的硬盤緩存基本都很小,只有幾百KB,已無法滿足用户的需求。16MB和32MB緩存是現今主流硬盤所採用,而在服務器或特殊應用領域中還有緩存容量更大的產品,甚至達到了64MB、128MB等。大容量的緩存雖然可以在硬盤進行讀寫工作狀態下,讓更多的數據存儲在緩存中,以提高硬盤的訪問速率,但並不意味着緩存越大就越出眾。緩存的應用存在一個算法的問題,即便緩存容量很大,而沒有一個高效率的算法,那將導致應用中緩存數據的命中率偏低,無法有效發揮出大容量緩存的優勢。算法是和緩存容量相輔相成,大容量的緩存需要更為有效率的算法,否則性能會大大折扣,從技術角度上説,高容量緩存的算法是直接影響到硬盤性能發揮的重要因素。更大容量緩存是未來硬盤發展的必然趨勢。

緩存技術發展

緩存集羣的配置 緩存集羣的配置
最早先的CPU緩存是個整體的,而且容量很低,英特爾公司從Pentium時代開始把緩存進行了分類。當時集成CPU內核中的緩存已不足以滿足CPU的需求,而製造工藝上的限制又不能大幅度提高緩存的容量。因此出現了集成在與CPU同一塊電路板上或主板上的緩存,此時就把 CPU內核集成的緩存稱為一級緩存,而外部的稱為二級緩存一級緩存中還分數據緩存(Data Cache,D-Cache)和指令緩存(Instruction Cache,I-Cache)。二者分別用來存放數據和執行這些數據的指令,而且兩者可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了處理器效能。英特爾公司在推出Pentium 4處理器時,用新增的一種一級追蹤緩存替代指令緩存,容量為12KμOps,表示能存儲12K條微指令。
隨着CPU製造工藝的發展,二級緩存也能輕易的集成在CPU內核中,容量也在逐年提升。再用集成在CPU內部與否來定義一、二級緩存,已不確切。而且隨着二級緩存集成入CPU內核中,以往二級緩存與CPU大差距分頻的情況也被改變,此時其以相同於主頻速率工作,可以為CPU提供更高的傳輸速率二級緩存是CPU性能表現的關鍵之一,在CPU核心不變化的情況下,增加二級緩存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二級緩存上有差異,由此可見二級緩存對於CPU的重要性。
CPU在緩存中找到有用的數據被稱為命中,當緩存中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有二級緩存的CPU中,讀取一級緩存的命中率為80%。也就是説CPU一級緩存中找到的有用數據數據總量的80%,剩下的20%從二級緩存中讀取。由於不能準確預測將要執行的數據,讀取二級緩存的命中率也在80%左右(從二級緩存讀到有用的數據佔總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。較高端的CPU中,還會帶有三級緩存,它是為讀取二級緩存後未命中的數據設計的—種緩存,在擁有三級緩存的CPU中,只有約5%的數據需要從內存中調用 [5]  ,這進一步提高了CPU的效率。為了保證CPU訪問時有較高的命中率,緩存中的內容應該按一定的算法替換。一種較常用的算法是“最近最少使用算法”(LRU算),它是將最近一段時間內最少被訪問過的行淘汰出局。因此需要為每行設置一個計數器,LRU算法是把命中行的計數器清零,其他各行計數器加1。當需要替換時淘汰行計數器計數值最大的數據行出局。這是一種高效、科學的算法,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出緩存,提高緩存的利用率。CPU產品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量則分為128KB、256KB、512KB、1MB、2MB、4MB等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高CPU性能的關鍵。二級緩存容量的提升是由CPU製造工藝所決定的,容量增大必然導致CPU內部晶體管數的增加,要在有限的CPU面積上集成更大的緩存,對製造工藝的要求也就越高。主流的CPU二級緩存都在2MB左右,其中英特爾公司07年相繼推出了台式機用的4MB、6MB二級緩存的高性能CPU,不過價格也是相對比較高的,對於對配置要求不是太高的朋友,一般的2MB二級緩存的雙核CPU基本也可以滿足日常上網需要了。
2022年,新一代的奔騰處理器採用了與 12 代酷睿一樣的 Intel 7 工藝,但沒有大小核架構。參數方面,奔騰 G7400 為 2 核 4 線程,3.7GHz,6MB 三級緩存,46W TDP,支持 DDR4-3200 內存和 DDR5-4800 內存。核顯為 UHD 710,16 EU 1.35GHz。 [4] 

緩存主要意義

緩存的工作方式 緩存的工作方式
緩存工作的原則,就是“引用的局部性”,這可以分為時間局部性和空間局部性。空間局部性是指CPU在某一時刻需要某個數據,那麼很可能下一步就需要其附近的數據;時間局部性是指當某個數據被訪問過一次之後,過不了多久時間就會被再一次訪問。對於應用程序而言,不管是指令流還是數據流都會出現引用的局部性現象。
舉個簡單的例子,比如在播放DVD影片的時候,DVD數據由一系列字節組成,這個時候CPU會依次從頭處理到尾地調用DVD數據,如果CPU這次讀取DVD數據為1分30秒,那麼下次讀取的時候就會從1分31秒開始,因此這種情況下有序排列的數據都是依次被讀入CPU進行處理。從數據上來看,對於Word一類的應用程序通常都有着較好的空間局部性。用户在使用中不會一次打開7、8個文檔,不會在其中某一個文檔中打上幾個詞就換另一個。大多數用户都是打開一兩個文檔,然後就是長時間對它們進行處理而不會做其他事情。這樣在內存中的數據都會集中在一個區域中,也就可以被CPU集中處理。
從程序代碼上來考慮,設計者通常也會盡量避免出現程序的跳躍和分支,讓CPU可以不中斷地處理大塊連續數據。遊戲、模擬和多媒體處理程序通常都是這方面的代表,以小段代碼連續處理大塊數據。不過在辦公運用程序中,情況就不一樣了。改動字體,改變格式,保存文檔,都需要程序代碼不同部分起作用,而用到的指令通常都不會在一個連續的區域中。於是CPU就不得不在內存中不斷跳來跳去尋找需要的代碼。這也就意味着對於辦公程序而言,需要較大的緩存來讀入大多數經常使用的代碼,把它們放在一個連續的區域中。如果緩存不夠,就需要內存中的數據,而如果緩存足夠大的話,所有的代碼都可以放入,也就可以獲得最高的效率。同理,高端的數據應用以及遊戲應用則需要更高容量的緩存。

緩存CPU緩存

CPU緩存 CPU緩存
CPU緩存(Cache Memory)是位於CPU與內存之間的臨時存儲器,它的容量比內存小的多但是交換速率卻比內存要快得多。緩存的出現主要是為了解決CPU運算速率與內存讀寫速率不匹配的矛盾,因為CPU運算速率要比內存讀寫速率快很多,這樣會使CPU花費很長時間等待數據到來或把數據寫入內存。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速率。由此可見,在CPU中加入緩存是一種高效的解決方案,這樣整個內存儲器(緩存+內存)就變成了既有緩存的高速率,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是因為CPU的數據交換順序和CPU與緩存間的帶寬引起的。
緩存基本上都是採用SRAM存儲器,SRAM是英文Static RAM的縮寫,它是一種具有靜態存取功能的存儲器,不需要刷新電路即能保存它內部存儲的數據。不像DRAM內存那樣需要刷新電路,每隔一段時間,固定要對DRAM刷新充電一次,否則內部的數據即會消失,因此SRAM具有較高的性能,但是SRAM也有它的缺點,即它的集成度較低,相同容量的DRAM內存可以設計為較小的體積,但是SRAM卻需要很大的體積,這也是不能將緩存容量做得太大的重要原因。它的特點歸納如下:優點是節能、速率快、不必配合內存刷新電路、可提高整體的工作效率,缺點是集成度低、相同的容量體積較大、而且價格較高,只能少量用於關鍵性系統以提高效率。

緩存工作原理

1、讀取順序
CPU要讀取一個數據時,首先從Cache中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入Cache中,可以使得以後對整塊數據的讀取都從Cache中進行,不必再調用內存。
正是這樣的讀取機制使CPU讀取Cache的命中率非常高(大多數CPU可達90%左右),也就是説CPU下一次要讀取的數據90%都在Cache中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來説,CPU讀取數據的順序是先Cache後內存
2、緩存分類
Intel從Pentium開始將Cache分開,通常分為一級高速緩存L1和二級高速緩存L2。在以往的觀念中,L1 Cache是集成在CPU中的,被稱為片內Cache。在L1中還分數據Cache(D-Cache)和指令Cache(I-Cache)。它們分別用來存放數據和執行這些數據的指令,而且兩個Cache可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了處理器效能。
3、讀取命中率
CPU在Cache中找到有用的數據被稱為命中,當Cache中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有2級Cache的CPU中,讀取L1 Cache的命中率為80%。也就是説CPU從L1 Cache中找到的有用數據佔數據總量的80%,剩下的20%從L2 Cache讀取。由於不能準確預測將要執行的數據,讀取L2的命中率也在80%左右(從L2讀到有用的數據佔總數據的16%)。那麼還有的數據就不得不從內存調用,但這已經是一個相當小的比例了。在一些高端領域的CPU(像Intel的Itanium)中,我們常聽到L3 Cache,它是為讀取L2 Cache後未命中的數據設計的—種Cache,在擁有L3 Cache的CPU中,只有約5%的數據需要從內存中調用,這進一步提高了CPU的效率。

緩存一級緩存

一級緩存(Level 1 Cache)簡稱L1 Cache,位於CPU內核的旁邊,是與CPU結合最為緊密的CPU緩存,也是歷史上最早出現的CPU緩存。由於一級緩存的技術難度和製造成本最高,提高容量所帶來的技術難度增加和成本增加非常大,所帶來的性能提升卻不明顯,性價比很低,而且現有的一級緩存的命中率已經很高,所以一級緩存是所有緩存中容量最小的,比二級緩存要小得多。
一級緩存可以分為一級數據緩存(Data Cache,D-Cache)和一級指令緩存(Instruction Cache,I-Cache)。二者分別用來存放數據以及對執行這些數據的指令進行即時解碼,而且兩者可以同時被CPU訪問,減少了爭用Cache所造成的衝突,提高了處理器效能。大多數CPU的一級數據緩存和一級指令緩存具有相同的容量,例如AMD的Athlon XP就具有64KB的一級數據緩存和64KB的一級指令緩存,其一級緩存就以64KB+64KB來表示,其餘的CPU的一級緩存表示方法以此類推。
Intel的採用NetBurst架構的CPU(最典型的就是Pentium 4)的一級緩存有點特殊,使用了新增加的一種一級追蹤緩存(Execution Trace Cache,T-Cache或ETC)來替代一級指令緩存,容量為12KμOps,表示能存儲12K條即12000條解碼後的微指令。一級追蹤緩存與一級指令緩存的運行機制是不相同的,一級指令緩存只是對指令作即時的解碼而並不會儲存這些指令,而一級追蹤緩存同樣會將一些指令作解碼,這些指令稱為微指令(micro-ops),而這些微指令能儲存在一級追蹤緩存之內,無需每一次都作出解碼的程序,因此一級追蹤緩存能有效地增加在高工作頻率下對指令的解碼能力,而μOps就是micro-ops,也就是微型操作的意思。它以很高的速率將μops提供給處理器核心。Intel NetBurst微型架構使用執行跟蹤緩存,將解碼器從執行循環中分離出來。這個跟蹤緩存以很高的帶寬將uops提供給核心,從本質上適於充分利用軟件中的指令級並行機制。Intel並沒有公佈一級追蹤緩存的實際容量,只知道一級追蹤緩存能儲存12000條微指令(micro-ops)。所以,不能簡單地用微指令的數目來比較指令緩存的大小。實際上,單核心的NetBurst架構CPU使用8Kμops的緩存已經基本上夠用了,多出的4kμops可以大大提高緩存命中率。而要使用超線程技術的話,12KμOps就會有些不夠用,這就是為什麼有時候Intel處理器在使用超線程技術時會導致性能下降的重要原因。例如Northwood核心一級緩存為8KB+12KμOps,就表示其一級數據緩存為8KB,一級追蹤緩存為12KμOps;而Prescott核心的一級緩存為16KB+12KμOps,就表示其一級數據緩存為16KB,一級追蹤緩存為12KμOps。在這裏12KμOps絕對不等於12KB,單位都不同,一個是μOps,一個是Byte(字節),而且二者的運行機制完全不同。所以那些把Intel的CPU一級緩存簡單相加,例如把Northwood核心説成是20KB一級緩存,把Prescott核心説成是28KB一級緩存,並且據此認為Intel處理器的一級緩存容量遠遠低於AMD處理器128KB的一級緩存容量的看法是完全錯誤的,二者不具有可比性。在架構有一定區別的CPU對比中,很多緩存已經難以找到對應的東西,即使類似名稱的緩存在設計思路和功能定義上也有區別了,此時不能用簡單的算術加法來進行對比;而在架構極為近似的CPU對比中,分別對比各種功能緩存大小才有一定的意義。

緩存二級緩存

二級緩存結構剖析 二級緩存結構剖析
二級緩存(Level2cache),它是處理器內部的一些緩衝存儲器,其作用跟內存一樣。上溯到上個世紀80年代,由於處理器的運行速率越來越快,慢慢地,處理器需要從內存中讀取數據的速率需求就越來越高了。然而內存速率提升速率卻很緩慢,而能高速讀寫數據的內存價格又非常高昂,不能大量採用。從性能價格比的角度出發,英特爾等處理器設計生產公司想到一個辦法,就是用少量的高速內存和大量的低速內存結合使用,共同為處理器提供數據。這樣就兼顧了性能和使用成本的最優。而那些高速的內存因為是處於cpu和內存之間的位置,又是臨時存放數據的地方,所以就叫做緩衝存儲器了,簡稱“緩存”。它的作用就像倉庫中臨時堆放貨物的地方一樣,貨物從運輸車輛上放下時臨時堆放在緩存區中,然後再搬到內部存儲區中長時間存放。貨物在這段區域中存放的時間很短,就是一個臨時貨場。 最初緩存只有一級,後來處理器速率又提升了,一級緩存不夠用了,於是就添加了二級緩存二級緩存是比一級緩存速率更慢,容量更大的內存,主要就是做一級緩存和內存之間數據臨時交換的地方用。為了適應速率更快的處理器p4ee,已經出現了三級緩存了,它的容量更大,速率相對二級緩存也要慢一些,但是比內存可快多了。 緩存的出現使得cpu處理器的運行效率得到了大幅度的提升,這個區域中存放的都是cpu頻繁要使用的數據,所以緩存越大處理器效率就越高,同時由於緩存的物理結構比內存複雜很多,所以其成本也很高。
大量使用二級緩存帶來的結果是處理器運行效率的提升和成本價格的大幅度不等比提升。舉個例子,服務器上用的至強處理器和普通的p4處理器其內核基本上是一樣的,就是二級緩存不同。至強的二級緩存是2mb~16mb,p4的二級緩存是512kb,於是最便宜的至強也比最貴的p4貴,原因就在二級緩存不同。即l2cache。由於l1級高速緩存容量的限制,為了再次提高cpu運算速率,在cpu外部放置一高速存儲器,即二級緩存。工作主頻比較靈活,可與cpu同頻,也可不同。cpu在讀取數據時,先在l1中尋找,再從l2尋找,然後是內存,在後是外存儲器。所以l2對系統的影響也不容忽視。
最早先的cpu緩存是個整體的,而且容量很低,英特爾公司從pentium時代開始把緩存進行了分類。當時集成cpu內核中的緩存已不足以滿足cpu的需求,而製造工藝上的限制又不能大幅度提高緩存的容量。因此出現了集成在與cpu同一塊電路板上或主板上的緩存,此時就把cpu內核集成的緩存稱為一級緩存,而外部的稱為二級緩存。隨着cpu製造工藝的發展,二級緩存也能輕易的集成cpu內核中,容量也在逐年提升。再用集成在cpu內部與否來定義一、二級緩存,已不確切。而且隨着二級緩存被集成入cpu內核中,以往二級緩存與cpu大差距分頻的情況也被改變,此時其以相同於主頻的速率工作,可以為cpu提供更高的傳輸速率。

緩存三級緩存

L3 Cache(三級緩存),分為兩種,早期的是外置,逐漸都變為內置的。而它的實際作用即是,L3緩存的應用可以進一步降低內存延遲,同時提升大數據量計算時處理器的性能。降低內存延遲和提升大數據量計算能力對遊戲都很有幫助。而在服務器領域增加L3緩存在性能方面仍然有顯著的提升。比方具有較大L3緩存的配置利用物理內存會更有效,故它比較慢的磁盤I/O子系統可以處理更多的數據請求。具有較大L3緩存的處理器提供更有效的文件系統緩存行為及較短消息和處理器隊列長度。
其實最早的L3緩存被應用在AMD發佈的K6-III處理器上,當時的L3緩存受限於製造工藝,並沒有被集成進芯片內部,而是集成在主板上。在只能夠和系統總線頻率同步的L3緩存同主內存其實差不了多少。後來使用L3緩存的是英特爾服務器市場所推出的Itanium處理器。接着就是P4EE和至強MP。Intel還打算推出一款9MB L3緩存的Itanium2處理器,和以後24MB L3緩存的雙核心Itanium2處理器。
但基本上L3緩存對處理器的性能提高顯得不是很重要,比方配備1MB L3緩存的Xeon MP處理器卻仍然不是Opteron的對手,由此可見前端總線的增加,要比緩存增加帶來更有效的性能提升。

緩存超級緩存

SuperCache,也就是超級緩存,計算機的速度瓶頸主要在於機械硬盤的讀寫速度,SuperCache就是給硬盤的讀寫用高速內存來做緩存,是大內存機器的提速首選,服務器的必備利器。
工作原理:對於SuperCache而言,硬盤上沒有文件的概念,只是用户指定大小的一個一個小格子,例如32k,硬盤上某個小格子裏面的內容被讀取了,則被緩存在內存裏面,下次還讀這個小格子的時候,直接從內存讀取,硬盤沒有任何動作,從而達到了加速的目的。有兩種緩存模式,1、MFU模式,每個小格子被讀取的時候,做一個簡單的計數,當緩存滿的時候,計數值小的先被清出緩存;2、MRU模式,簡單的隊列,先進先出。

緩存系統緩存

緩存設計 緩存設計
將CPU比作一個城裏的傢俱廠,而將存儲系統比作郊區的木料廠,那麼實際情況就是木料廠離傢俱廠越來越遠,即使使用更大的卡車來運送木料,傢俱廠也得停工來等待木料送來。在這樣的情況下,一種解決方法是在市區建立一個小型倉庫,在裏面放置一些傢俱廠最常用到的木料。這個倉庫實際上就是傢俱廠的“Cache”,傢俱廠就可以從倉庫不停的及時運送需要的木料。當然,倉庫越大,存放的木料越多,效果就越好,因為這樣即使是些不常用的東西也可以在倉庫裏找到。需要的木料倉庫裏沒有,就要從城外的木料廠裏繼續找,而傢俱廠就得等着了。倉庫就相對於L1緩存,可以由CPU及時快速的讀寫,所以存儲的是CPU最常用代碼和數據(後面會介紹一下如何挑選“最常用”)。L1緩存的速率系統內存快的多是因為使用的是SRAM,這種內存單晶元使用四到六個晶體管。這也使得SRAM的造價相當的高,所以不能拿來用在整個存儲系統上。在大多數CPU上,L1緩存和核心一起在一塊芯片上。在傢俱廠的例子中,就好比工廠和倉庫在同一條街上。這樣的設計使CPU可以從最近最快的地方得到數據,但是也使得“城外的木料廠”到“倉庫”和到“傢俱廠”的距離差不多遠。這樣CPU需要的數據不在L1緩存中,也就是“Cache Miss”,從存儲設備取數據就要很長時間了。處理器速率越快,兩者之間的差距就越大。使用Pentium4那樣的高頻率處理器,從內存中取得數據就相當於“木料廠”位於另一個國家。
其實,緩存是CPU的一部分,它存在於CPU中 CPU存取數據速率非常的快,一秒鐘能夠存取、處理十億條指令和數據(術語:CPU主頻1G),而內存就慢很多,快的內存能夠達到幾十兆就不錯了,可見兩者的速率差異是多麼的大 緩存是為了解決CPU速率和內存速率的速率差異問題 內存中被CPU訪問最頻繁的數據和指令被複制入CPU中的緩存,這樣CPU就可以不經常到象“蝸牛”一樣慢的內存中去取數據了,CPU只要到緩存中去取就行了,而緩存的速率要比內存快很多。
這裏要特別指出的是:
1 因為緩存只是內存中少部分數據的複製品,所以CPU到緩存中尋找數據時,也會出現找不到的情況(因為這些數據沒有從內存複製到緩存中去),這時CPU還是會到內存中去找數據,這樣系統的速率就慢下來了,不過CPU會把這些數據複製到緩存中去,以便下一次不要再到內存中去取。
2 因為隨着時間的變化,被訪問得最頻繁的數據不是一成不變的,也就是説,剛才還不頻繁的數據,此時已經需要被頻繁的訪問,剛才還是最頻繁的數據,後來又不頻繁了,所以説緩存中的數據要經常按照一定的算法來更換,這樣才能保證緩存中的數據是被訪問最頻繁的。
3 關於一級緩存二級緩存為了分清這兩個概念,我們先了解一下RAM ram和ROM相對的,RAM是掉電以後,其中信息才消失的那一種,ROM是在掉電以後信息也不會消失的那一種。RAM又分兩種: 一種是靜態RAM、SRAM;一種是動態RAM、DRAM。

緩存磁盤緩存

磁盤緩存 磁盤緩存
磁盤緩存分為讀緩存和寫緩存。讀緩存是指,操作系統為已讀取的文件數據,在內存較空閒的情況下留在內存空間中(這個內存空間被稱之為“內存池”),當下次軟件或用户再次讀取同一文件時就不必重新從磁盤上讀取,從而提高速率。寫緩存實際上就是將要寫入磁盤的數據先保存於系統為寫緩存分配的內存空間中,當保存到內存池中的數據達到一個程度時,便將數據保存到硬盤中。這樣可以減少實際的磁盤操作,有效的保護磁盤免於重複的讀寫操作而導致的損壞,也能減少寫入所需的時間。
根據寫入方式的不同,有寫通式和回寫式兩種。寫通式在讀硬盤數據時,系統先檢查請求指令,看看所要的數據是否在緩存中,在的話就由緩存送出響應的數據,這個過程稱為命中。這樣系統就不必訪問硬盤中的數據,由於SDRAM的速率比磁介質快很多,因此也就加快了數據傳輸的速率。回寫式就是在寫入硬盤數據時也在緩存中找,找到就由緩存就數據寫入盤中,多數硬盤都是採用的回寫式緩存,這樣就大大提高了性能。緩存英文名為 Cache。CPU 緩存也是內存的一種,其數據交換速率快且運算頻率高。磁盤緩存則是操作系統為磁盤輸入輸出而在普通物理內存中分配的一塊內存區域。
硬盤的緩衝區,硬盤的緩衝區是硬盤與外部總線交換數據的場所。硬盤的讀數據的過程是將磁信號轉化為電信號後,通過緩衝區一次次地填充與清空,再填充,再清空,一步步按照PCI總線的週期送出,可見,緩衝區的作用是相當重要的。它的作用也是提高性能,但是它與緩存的不同之處在於:
一 它是容量固定的硬件,而不像緩存是可以由操作系統內存中動態分配的。
二 它對性能的影響大大超過磁盤緩存對性能的影響,因為沒有緩衝區,就會要求每傳一個字(通常是4字節)就需要讀一次磁盤或寫一次磁盤。

緩存緩存映射

高速緩存可以被分為直接映射緩存,組相聯緩存和全相聯緩存。

緩存直接映射緩存

緩存的映射 緩存的映射
這種緩存中,每個組只有一行,E = 1,結構很簡單,整個緩存就相當於關於組的一維數組。不命中時的行替換也很簡單,就一個行嘛,哪不命中替換哪。為了適應容量小的情況,第n+1層存儲器中的某個數據塊,你只能被替換到上一層(也就是第n層)存儲器中的某個位置的子集中。假設一個直接映射的高速緩存,(S,E,B,m) = ( 4,1,2,4 ),也就是説,地址是4位(16個),有四個組,每個組一行,每個塊兩個字節。由於有16個地址,表徵16個字節,所以總共有8個塊,但只有4個組,也就是4行。只能把多個塊映射到相同的緩存組,比如0和4都映射到組1,1和5都映射到組2,等等。這下問題就來了,比如先讀塊0,此時塊0的數據cache到組0。然後我再讀塊4,因為塊4也是被映射到組0的,組0又只有一行,那就只有把以前塊0的數據覆蓋了,要是之後我又讀塊0,就數據丟失了,只能到下級的存儲器去找。實際的循環程序中,很容易引起這種情況,稱其為抖動。這種情況的存在,自然大大影響了性能。所以,需要更好的映射方案。

緩存組相聯緩存

在組相聯緩存裏,E大於1,就是説一個組裏面有多個cacheline。E等於多少,就叫有多少路,所以叫E路組相聯。
組相聯的行匹配就要複雜一些了,因為要檢查多個行的標記位和有效位。如果最終找到了,還好。當然,找不到會從下一級存儲器中取出包含所需求數據的行來替換,但一個組裏面這麼多行,替換哪個行。如果有一個空行,自然就是替換空行,如果沒有空行,那就引發了一些其他的替換策略了。除了剛才介紹過的隨機策略,還有最不常使用策略,最近最少使用策略。這些策略本身是需要一定開銷的,但要知道,不命中的開銷是很大的,所以為了保證命中率,採取一些相對複雜的策略是值得的。

緩存全相聯緩存

所謂全相聯,就是由一個包含所有緩存行的組組成的緩存(塊可以放在高速緩存中的任意位置) [2]  。由於只有一個組,所以組選擇特別簡單,此時地址就沒有組索引了,只有標記和偏移,也就是t部分和b部分。其他的步驟,行匹配和數據選擇,和組相聯原理是一樣的,只是規模大得多了。如果説上面關於這三種映射方法的描述非常抽象,為了能理解得更加透徹,把存儲器比作一家大超市,超市裏面的東西就是一個個字節或者數據。為了讓好吃好玩受歡迎的東西能夠容易被看到,超市可以將這些東西集中在一塊放在一個專門的推薦櫃枱中,這個櫃枱就是緩存。如果僅僅是把這些貨物放在櫃枱中即完事,那麼這種就是完全關聯的方式。
可是如果想尋找自己想要的東西,還得在這些推薦貨物中尋找,而且由於位置不定,甚至可能把整個推薦櫃枱尋找個遍,這樣的效率無疑還是不高的。於是超市老總決定採用另一種方式,即將所有推薦貨物分為許多類別,如“果醬餅乾”,“巧克力餅乾”,“核桃牛奶”等,櫃枱的每一層存放一種貨物。這就是直接關聯的訪問原理。這樣的好處是容易讓顧客有的放矢,尋找更快捷,更有效。
但這種方法還是有其缺點,那就是如果需要果醬餅乾的顧客很多,需要巧克力餅乾的顧客相對較少,顯然對果醬餅乾的需求量會遠多於對巧克力餅乾的需求量,可是放置兩種餅乾的空間是一樣大的,於是可能出現這種情況:存放的果醬餅乾的空間遠不能滿足市場需求的數量,而巧克力餅乾的存放空間卻被閒置。為了克服這個弊病,老闆決定改進存貨方法:還是將貨物分類存放,不過分類方法有所變化,按“餅乾”,“牛奶”,“果汁”等類別存貨,也就是説,無論是什麼餅乾都能存入“ 餅乾”所用空間中,這種方法顯然提高了空間利用的充分性,讓存儲以及查找方法更有彈性。

緩存技術指標

CPU緩存 CPU緩存
CPU產品中,一級緩存的容量基本在4kb到64kb之間,二級緩存的容量則分為128kb、256kb、512kb、1mb、2mb等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高cpu性能的關鍵。二級緩存容量的提升是由cpu製造工藝所決定的,容量增大必然導致cpu內部晶體管數的增加,要在有限的cpu面積上集成更大的緩存,對製造工藝的要求也就越高
緩存(cache)大小是CPU的重要指標之一,其結構與大小對CPU速率的影響非常大。簡單地講,緩存就是用來存儲一些常用或即將用到的數據或指令,當需要這些數據或指令的時候直接從緩存中讀取,這樣比到內存甚至硬盤中讀取要快得多,能夠大幅度提升cpu的處理速率。所謂處理器緩存,通常指的是二級高速緩存,或外部高速緩存。即高速緩衝存儲器,是位於CPU和主存儲器dram(dynamic ram)之間的規模較小的但速率很高的存儲器,通常由sram(靜態隨機存儲器)組成。用來存放那些被cpu頻繁使用的數據,以便使cpu不必依賴於速率較慢的dram(動態隨機存儲器)。l2高速緩存一直都屬於速率極快而價格也相當昂貴的一類內存,稱為sram(靜態ram),sram(static ram)是靜態存儲器的英文縮寫。由於sram採用了與製作cpu相同的半導體工藝,因此與動態存儲器dram比較,sram的存取速率快,但體積較大,價格很高。
處理器緩存的基本思想是用少量的sram作為cpu與dram存儲系統之間的緩衝區,即cache系統。80486以及更高檔微處理器的一個顯著特點是處理器芯片內集成了sram作為cache,由於這些cache裝在芯片內,因此稱為片內cache。486芯片內cache的容量通常為8k。高檔芯片如pentium為16kb,power pc可達32kb。pentium微處理器進一步改進片內cache,採用數據雙通道cache技術,相對而言,片內cache的容量不大,但是非常靈活、方便,極大地提高了微處理器的性能。片內cache也稱為一級cache。由於486,586等高檔處理器的時鐘頻率很高,一旦出現一級cache未命中的情況,性能將明顯惡化。在這種情況下采用的辦法是在處理器芯片之外再加cache,稱為二級cache。二級cache實際上是cpu和主存之間的真正緩衝。由於系統板上的響應時間遠低於cpu速率,沒有二級cache就不可能達到486,586等高檔處理器的理想速率。二級cache的容量通常應比一級cache大一個數量級以上。在系統設置中,常要求用户確定二級cache是否安裝及尺寸大小等。二級cache的大小一般為128kb、256kb或512kb。在486以上檔次的微機中,普遍採用256kb或512kb同步cache。所謂同步是指cachecpu採用了相同的時鐘週期,以相同的速率同步工作。相對於異步cache,性能可提高30%以上。pc及其服務器系統的發展趨勢之一是cpu主頻越做越高,系統架構越做越先進,而主存dram的結構和存取時間改進較慢。因此,緩存(cache)技術愈顯重要,在pc系統中cache越做越大。廣大用户已把cache做為評價和選購pc系統的一個重要指標。

緩存光驅緩存

光存儲驅動器都帶有內部緩衝器或高速緩存存儲器。這些緩衝器是實際的存儲芯片,安裝在驅動器的電路板上,它在發送數據給PC之前可能準備或存儲更大的數據段。CD/DVD典型的緩衝器大小為128KB,不過具體的驅動器可大可小(通常越多越好)。可刻錄CD或DVD驅動器一般具有2MB-4MB以上的大容量緩衝器,用於防止緩存欠載(buffer underrun)錯誤,同時可以使刻錄工作平穩、恆定的寫入。一般來説,驅動器越快,就有更多的緩衝存儲器,以處理更高的傳輸速率
CD/DVD驅動器帶有緩衝或高速緩存具有很多好處。緩衝可以保證PC以固定速率接收數據。當一個應用程序從驅動器請求數據時,數據可能位於分散在光盤上不同地方。因為驅動器的訪問速率相對較慢,在數據讀取時會使驅動器不得不間隔性向PC發送數據。驅動器的緩衝在軟件的控制下可以預先讀取並準備光盤的內容目錄,從而加速第一次數據請求。
光驅讀取數據的規律是首先在緩存裏尋找,如果在緩存中沒有找到才會去光盤上尋找,大容量的緩存可以預先讀取的數據越多,但在實際應用中CD-ROM、DVD-ROM等讀取操作時,讀取重複信息的機會是相對較少的,大部分的光盤更多的時候是一次讀取數量較多的文件內容,因此在CD-ROM、DVD-ROM驅動器上緩存重要性得不到體現,因此大多此類產品採用較小的緩存容量。CD-ROM一般有128KB、256KB、512KB幾種;而DVD一般有128KB、256KB、512KB,只有個別的外置式DVD光驅採用了較大容量的緩存。
在刻錄機或COMMBO產品上,緩存就變得十分重要了。在刻錄光盤時,系統會把需要刻錄的數據預先讀取到緩存中,然後再從緩存讀取數據進行刻錄,緩存就是數據和刻錄盤之間的橋樑。系統在傳輸數據到緩存的過程中,不可避免的會發生傳輸的停頓,如在刻錄大量小容量文件時,硬盤讀取的速率很可能會跟不上刻錄的速率,就會造成緩存內的數據輸入輸出不成比例,如果這種狀態持續一段時間,就會導致緩存內的數據被全部輸出,而得不到輸入,此時就會造成緩存欠載錯誤,這樣就會導致刻錄光盤失敗。因此刻錄機和COMMBO產品都會採用較大容量的緩存容量,再配合防刻死技術,就能把刻壞盤的幾率降到最低。同時緩存還能協調數據傳輸速率,保證數據傳輸的穩定性和可靠性。
刻錄機產品一般有2MB、4MB、8MB,COMBO產品一般有2MB、4MB、8MB的緩存容量,受制造成本的限制,緩存不可能製作到足夠大,但適量的緩存容量還是選擇光儲需要考慮的關鍵之一。

緩存網絡緩存

緩存概念

WWW是互聯網上最受歡迎的應用之一,其快速增長造成網絡擁塞和服務器超載,導致客户訪問延遲增大,WWW服務質量日益顯現出來。緩存技術被認為是減輕服務器負載、降低網絡擁塞、增強WWW可擴展性的有效途徑之一,其基本思想是利用客户訪問的時間局部性(Temproral Locality)原理,將客户訪問過的內容在Cache中存放一個副本,當該內容下次被訪問時,不必連接到駐留網站,而是由Cache中保留的副本提供。
Web內容可以緩存在客户端、代理服務器以及服務器端。研究表明,緩存技術可以顯著地提高WWW性能,它可以帶來以下好處:
(1)減少網絡流量,從而減輕擁塞。
(2)降低客户訪問延遲,其主要原因有:
①緩存在代理服務器中的內容,客户可以直接從代理獲取而不是從遠程服務器獲取,從而減小了傳輸延遲;
②沒有被緩存的內容由於網絡擁塞及服務器負載的減輕而可以較快地被客户獲取。
(3)由於客户的部分請求內容可以從代理處獲取,從而減輕了遠程服務器負載。
(4)如果由於遠程服務器故障或者網絡故障造成遠程服務器無法響應客户的請求,客户可以從代理中獲取緩存的內容副本,使得WWW服務的魯棒性得到了加強。
Web緩存系統也會帶來以下問題:
(1)客户通過代理獲取的可能是過時的內容。
(2)如果發生緩存失效,客户的訪問延遲由於額外的代理處理開銷而增加。因此在設計Web緩存系統時,應力求做到Cache命中率最大化和失效代價最小化。
(3)代理可能成為瓶頸。因此應為一個代理設定一個服務客户數量上限及一個服務效率下限,使得一個代理系統的效率至少同客户直接和遠程服務器相連的效率一樣。

緩存影響Internet訪問速率

訪問網站的過程是通過建立在TCP/IP協議之上的HTTP協議來完成的。從客户端發出一個HTTP請求開始,用户所經歷的等待時間主要決定於DNS和網站的響應時間。網站域名首先必須被DNS服務器解析為IP地址,HTTP的延時則由在客户端和服務器間的若干個往返時間所決定。往返時間是指客户端等待每次請求的響應時間,平均往返時間取決於三個方面:
網站服務器的延時
網站服務器造成的延時在往返時間中佔主要比例。當某個服務器收到多個併發HTTP請求時,會產生排隊延時。由於響應一個HTTP請求,往往需要多次訪問本地硬盤,所以即使是一台負載並不大的服務器,也可能產生幾十或幾百微秒的延時。
路由器網關、代理服務器防火牆引入的延時
通常在客户端和服務器之間的路徑上會存在多個網絡設備,如路由器、網關、代理和防火牆等。它們對經過的IP包都要做存儲/轉發的操作,於是會引入排隊延時和處理延時。在網絡擁塞時,這些設備甚至會丟包,此時會寄希望於客户端和服務器通過端到端的協議來恢復通信。
不同通信鏈路上的數據傳輸速率
廣域網中,從一個網絡設備到另一個網絡設備間的數據傳輸速率是決定往返時間的一個重要因素。但基本帶寬的作用並不是像人們想象的那麼重要,一項測試表明,當網站採用T3速率接入Internet時,也僅有2%的網頁或對象能以64kbps的速率提供給客户端,這顯然表明,帶寬在網絡性能上不是最關鍵的因素。
Internet在向世界的每一個角落延伸,用户向一個服務器發出的 請求可能會經過8000公里到1.6萬公里的距離,光速帶來的延時和網絡設備的延時是網絡如此緩慢的最根本原因。
網絡緩存解決根本問題
既然影響網絡速率的原因是由距離和光速引起,那麼加速Web訪問的唯一途徑就是縮短客户端與網站之間的距離。通過將用户頻繁訪問的頁面和對象存放在離用户更近的地方,才能減少光速引入的延時,同時由於減少了路由中的環節,也相應地減少了路由器、防火牆和代理等引入的延時。
傳統的解決辦法是建立鏡像服務器來達到縮短距離的目的。但這個辦法存在很大的不足,對於某個站點而言,不可能在離每個用户羣較近的地方都建立鏡像站點,若對大多數網站都用這樣的辦法就更不經濟,同時管理和維護鏡像站點是一項非常困難的工作。
網絡緩存是一種降低Internet流量和提高終端用户響應時間的新興網絡技術。它的觀念來自於計算機和網絡的其他領域,如流行的Intel架構的CPU中就存在緩存,用於提高內存存取的速率;各種操作系統在進行磁盤存取時也會利用緩存來提高速率;分佈式文件系統通常也通過緩存來提高客户機和服務器之間的速率。

緩存類型

靜態頁面的緩存可能有2種形式:其實主要區別就是CMS是否自己負責關聯內容的緩存更新管理。
1 靜態緩存:是在新內容發佈的同時就立刻生成相應內容的靜態頁面,比如:2003年3月22日,管理員通過後台內容管理界面錄入一篇文章後,並同步更新相關索引頁上的鏈接。
2 動態緩存:是在新內容發佈以後,並不預先生成相應的靜態頁面,直到對相應內容發出請求時,如果前台緩存服務器找不到相應緩存,就向後台內容管理服務器發出請求,後台系統會生成相應內容的靜態頁面,用户第一次訪問頁面時可能會慢一點,但是以後就是直接訪問緩存了。
靜態緩存的缺點:
網絡緩存系統結構圖 網絡緩存系統結構圖
複雜的觸發更新機制:這兩種機制在內容管理系統比較簡單的時候都是非常適用的。但對於一個關係比較網絡緩存系統結構圖複雜的網站來説,頁面之間的邏輯引用關係就成為一個非常非常複雜的問題。最典型的例子就是一條新聞要同時在新聞首頁和相關的3個新聞專題中出現,在靜態緩存模式中,每發一篇新文章,除了這篇新聞內容本身的頁面外,還需要系統通過觸發器生成多個新的相關靜態頁面,這些相關邏輯的觸發也往往就會成為內容管理系統中最複雜的部分之一。
舊內容的批量更新: 通過靜態緩存發佈的內容,對於以前生成的靜態頁面的內容很難修改,這樣用户訪問舊頁面時,新的模板根本無法生效。
在動態緩存模式中,每個動態頁面只需要關心,而相關的其他頁面能自動更新,從而大大減少了設計相關頁面更新觸發器的需要。
網絡緩存可以在客户端,也可以在網絡上,由此我們將緩存分為兩類:瀏覽器緩存代理緩存
幾乎所有的瀏覽器都有一個內置的緩存,它們通常利用客户端本地的內存和硬盤來完成緩存工作,同時允許用户對緩存的內容大小作控制。瀏覽器緩存是網絡緩存的一個極端的情況,因為緩存設在客户機本地。通常一個客户端只有一個用户或幾個共享計算機用户,瀏覽器緩存要求的硬盤空間通常在5MB到50MB的範圍內。但是瀏覽器緩存在用户之間難以共享,不同客户端的緩存無法實現交流,因而緩存的內容與效果相當有限。
代理緩存則是一種獨立的應用層網絡服務,它更像E-mail、Web、DNS等服務。許多用户不僅可以共享緩存,而且可以同時訪問緩存中的內容。企業級代理緩存一般需要配置高端的處理器和存儲系統,採用專用的軟件,要求的硬盤空間在5MB到50GB左右,內存為64MB到512MB。
代理處於客户端與網站服務器之間,在某些情況下,這種連接是不允許的,如網站在防火牆內,這時客户端必須與代理建立TCP連接,然後由代理建立與網站服務器的TCP連接。代理在服務器和客户端之間起到了數據接力的作用。代理發出的HTTP請求與一般的HTTP請求有細小的不同,主要在於它包含了完整的URL,而不只是URL的路徑。
代理緩存的工作原理
代理緩存收到客户端的請求時,它首先檢查所請求的內容是否已經被緩存。如果沒有找到,緩存必須以客户端的名義轉發請求,並在收到服務器發出的文件時,將它以一定的形式保存在本地硬盤,並將其發送給客户端。
如果客户端請求的內容已被緩存,還存在兩種可能:
其一,緩存的內容已經過時,即緩存中保存的內容超過了預先設定的時限,或網站服務器的網頁已經更新,這時緩存會要求原服務器驗證緩存中的內容,要麼更新內容,要麼返回“未修改”的消息;
其二,緩存的內容是新的,即與原網站的內容保持同步,此時稱為緩存命中,這時緩存會立即將已保存的內容送給客户端。
在客户端的請求沒有命中時,反而增加了緩存存儲和轉發的處理時間。在這種情況下,代理緩存是否仍有意義呢?實際上,代理緩存能夠同時與網站服務器建立多個併發的TCP/IP連接,並行獲取網站上的內容。緩存的存在從整體上降低了對網站訪問的次數,也就降低了單位時間內服務器端的排隊數目,因而這時併發連接的排隊延時要小得多。優秀的緩存甚至能實現對網頁內相關鏈接內容的預取以加快連接的速率
代理緩存的策略
當原服務器的文件修改或被刪除後,緩存又如何知道它保存的拷貝已經作廢呢?HTTP協議為緩存服務提供了基本的支持,它使緩存能向原服務器查詢,某個文件是否更改,如果緩存的拷貝過時則進行有條件下載。僅當原服務器文件超過指定的日期時,才會發出新的文件。
但是這些詢問操作對網絡服務器造成的負載幾乎和獲取該文件差不多,因此不可能在客户端向緩存發起請求時都執行這樣的操作。HTTP協議使得服務器可以有選擇地為每個文檔指定生存時間,即清楚地指出某個文件的有效生命週期,生存時間很短即意味着“不要對其緩存”。拷貝的保留時間可以是固定的,也可以是通過這個文件的大小、來源、生存時間或內容計算出來的。 [3] 

緩存分佈緩存

分佈式緩存系統是為了解決數據庫服務器和web服務器之間的瓶頸。如果一個網站的流量很大,這個瓶頸將會非常明顯,每次數據庫查詢耗費的時間將會非常可觀。對於更新速度不是很快的網站,我們可以用靜態化來避免過多的數據庫查詢。對於更新速度以秒計的網站,靜態化也不會太理想,可以用緩存系統來構建。如果只是單台服務器用作緩存,問題不會太複雜,如果有多台服務器用作緩存,就要考慮緩存服務器負載均衡
使用Memcached分佈式緩存服務來達到保存用户的會話數據,而達到各個功能模塊都能夠跨省份、跨服務器共享本次會話中的私有數據的目的。每個省份使用一台服務器來做為Memcached服務器來存儲用話的會話中的數據,當然也可以多台服務器,但必須確保每個省份的做Memcached服務器數量必須一致,這樣才能夠保證Memcached客户端操作的是同一份數據,保證數據的一致性。
會話數據的添加、刪除、修改
Memcached客户端,添加、刪除和、修改會話信息數據時,不僅要添加、刪除、修改本省的Memcached服務器數據,而且同時要對其它省份的Memcahed服務器做同樣的操作,這樣用户訪問其它省份的服務器的功能模塊進也能讀取到相同的會話數據。Memcached客户端服務器的列表使用局域網的內網IP(如:192.168.1.179)操作本省的Memcahed服務器,使用公網的IP((如:202.183.62.210))操作其它省份的Memcahe服務器。
會話數據的讀取
系統所有模塊讀取會話數據的Memcached客户端服務器列表都設為本省Memcached服務器地址的內網IP來向Memcahed服務器中讀取會話數據。
同一會話的確認
使用Cookie來保持客户與服務端的聯繫。每一次會話開始就生成一個GUID作為SessionID,保存在客户端的Cookie中,作用域是頂級域名,這樣二級、三級域名就可以共享到這個Cookie,系統中就使用這個SessionID來確認它是否是同一個會話。
會話數據的唯一ID
會話數據存儲在Memcached服務器上的唯一鍵Key也就是會話數據數據的唯一ID定義為:SessionID_Name, SessionID就是保存在客户端Cookie中的SessionID,Name就是會話數據的名稱,同一次會話中各個會話數據的Name必須是唯一的,否則新的會話數據將覆蓋舊的會話數據。
會話的失效時間
會話的失效通過控制Cookie的有效時間來實現,會話的時間設為SessionID或Cookie中的有效時間,且每一次訪問SessionID時都要重新設置一下Cookie的有效時間,這樣就達到的會話的有效時間就是兩次間訪問Cookie中SessionID值的的最長時間,如果兩次訪問的間隔時間超過用效時間,保存在SessionID的Cookie將會失效,並生成新的SessionID存放在Cookie中, SessionID改變啦,會話就結束啦。Memcached服務器中會話數據的失效,每一次向Memcache服務器中添加會話數據時,都把有效時間設為一天也就是24小時,讓Memcached服務使用它內部的機制去清除,不必在程序中特別做會話數據的刪除操作。數據在Memcache服務器中有有效時間只是邏輯上的,就算是過了24 小時,如果分配給Memcached服務的內存還夠用的話,數據還是保存在內存當中的,只是Memcache客户端讀取不到而已。只有到了分配給Memcached服務的內存不夠用時,它才會清理沒用或者比較舊的數據,也就是懶性清除。

緩存增加緩存的方法

緩存CPU的緩存

CPU的緩存分二級:L1(一級緩存)和L2(二級緩存),當處理器要讀取數據時,首先要在L1緩存中查找,其次才是L2緩存,最後才是系統內存。如果有一天你發覺自己的電腦慢了很多,進入到Windows桌面也要幾分鐘,這時候就要檢查一下CPU的一、二級緩存有沒有打開。在BIOS設置中的StandardCMOSSetup(標準CMOS設定)有兩項是用來打開或關閉緩存的:CPUInternalCache設為Enable時開啓CPU內部的一級緩衝區,若設置為Disabl則為關閉,這時系統性能將大大降低;ExternalCache選項是控制主板上二級緩衝區,如果主板上有二級緩存則應設成Enable。

緩存硬盤的緩存

點擊電腦桌面上的“開始”/“運行”,鍵入“Msconfig”啓動“系統配置實用程序”,跟着選中“system.ini”標籤下的“Vcache”項,就可以根據系統的實際情況來調節硬盤的緩存了。在該選項中一般會有三行內容:ChunkSize=1024、MaxFileCache=10240和MinFileCache=10240;其中第一行是緩衝區讀寫單元值,第二、三行是硬盤的最大和最小緩衝值,等號後的數值都是可以修改的,只要右鍵單擊選中任一行就可以進行修改了。如果你的內存是128MB的話,上面這三行的取值就比較合理了,當然也可以自定。如果不知道該如何設置合適的緩衝值,請“Windows優化大師”幫忙吧,這個軟件中有一個“磁盤緩存優化”項,用鼠標就可以方便地設置好緩存;又或者讓“Windows優化大師”自動幫你進行優化設置。當硬盤的緩存值足夠大時,硬盤就不用頻繁地讀寫磁盤,一來可以延長硬盤的壽命,二來也可以提高數據的傳輸速度。
另外,將硬盤的“文件系統緩存”設置為“網絡服務器”,可以加快系統對硬盤的訪問速度,因為文件系統緩存裏存放了硬盤最近被訪問過的文件名和路徑,緩存越大所能儲存的內容也就越多。如果點擊“控制面板”/“系統”/“性能”/“文件系統”/“硬盤”,將“此計算機的主要用途”由“台式機”改為“網絡服務器”,可以將原來10K左右的緩存增加至近50K左右。

緩存軟驅和光驅的緩存

一般來説,軟驅讀寫數據的速度都比較慢,這是因為盤片的轉速不能太高,但是,我們可以提高軟驅的讀寫緩存,讓軟驅一次讀寫更多的數據。方法是:在桌面上的“開始”/“運行”框中鍵入“Regedit”運行註冊表編輯器,依次進入HKEY-LOCAL-MACHINE\System\CurrentControlSet\Services\Class\FDC\0000,新建一個為ForeFifo的“DWORD值”,將其值設為“0”,這樣就對軟驅進行了軟提速。很多人都知道右鍵單擊桌面“我的電腦”圖標,選“屬性”/“性能”/“文件系統”/“CD-ROM”,將最佳的訪問方式設為“四倍速或更高速”,將追加的高速緩存大小滑塊拖到最大處,可以明顯提高光驅的讀盤速度。除了這種方式,我們還可以在註冊表中設置緩衝值,方法是:進入到註冊表,在HKEY-LOCAL-MACHINE\System\CurrentControlSet\Control\FileSystem\CDFS下,將CacheSize(緩存值的大小)和Prefetch(預讀文件大小)兩項進行手工調整,只要右鍵單擊要選的項就可以進行修改了。 [3] 
參考資料