緩存

緩存

緩存(cache),原始意義是指訪問速度比一般隨機存取存儲器(RAM)快的一種高速存儲器,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。緩存的設置是所有現代計算機系統發揮高性能的重要因素之一。

特點


緩存的工作原理
緩存的工作原理
緩存是指可以進行高速數據交換的存儲器,它先於內存與CPU交換數據,因此速率很快。L1Cache(一級緩存)是CPU第一層高速緩存。內置的L1高速緩存的容量和結構對CPU的性能影響較大,不過高速緩衝存儲器均由靜態RAM組成,結構較複雜,在CPU管芯面積不能太大的情況下,L1級高速緩存的容量不可能做得太大。一般L1緩存的容量通常在32—256KB。L2 Cache(二級緩存)是CPU的第二層高速緩存,分內部和外部兩種晶元。內部的晶元二級緩存運行速率與主頻相同,而外部的二級緩存則只有主頻的一半。L2高速緩存容量也會影響CPU的性能,原則是越大越好,普通台式機CPU的L2緩存一般為128KB到2MB或者更高,筆記本、伺服器和工作站上用CPU的L2高速緩存最高可達1MB-3MB。
緩存只是內存中少部分數據的複製品,所以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指令控制開始讀取數據時,硬碟上的控制晶元會控制磁頭把正在讀取的簇的下一個或者幾個簇中的數據讀到緩存中(由於硬碟上數據存儲時是比較連續的,所以讀取命中率較高),當需要讀取下一個或者幾個簇中的數據的時候,硬碟則不需要再次讀取數據,直接把緩存中的數據傳輸到內存中就可以了,由於緩存的速率遠遠高於磁頭讀寫的速率,所以能夠達到明顯改善性能的目的。

寫入

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

臨時存儲

有時候,某些數據是會經常需要訪問的,像硬碟內部的緩存(暫存器的一種)會將讀取比較頻繁的一些數據存儲在緩存中,再次讀取時就可以直接從緩存中直接傳輸。緩存就像是一台計算機的內存一樣,在硬碟讀寫數據時,負責數據的存儲、寄放等功能。這樣一來,不僅可以大大減少數據讀寫的時間以提高硬碟的使用效率。同時利用緩存還可以讓硬碟減少頻繁的讀寫,讓硬碟更加安靜,更加省電。更大的硬碟緩存,你將讀取遊戲時更快,拷貝文件時候更快,在系統啟動中更為領先。
硬碟緩存
硬碟緩存
緩存容量的大小不同品牌、不同型號的產品各不相同,早期的硬碟緩存基本都很小,只有幾百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中,只有約3%的數據需要從內存中調用,這進一步提高了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基本也可以滿足日常上網需要了。

主要意義


緩存的工作方式
緩存的工作方式
緩存工作的原則,就是“引用的局部性”,這可以分為時間局部性和空間局部性。空間局部性是指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模式,簡單的隊列,先進先出。

WEB緩存


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

系統緩存


緩存設計
緩存設計
將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位元組)就需要讀一次磁碟或寫一次磁碟。

緩存分類


靜態頁面的緩存可能有2種形式:其實主要區別就是CMS是否自己負責關聯內容的緩存更新管理。
1、靜態緩存:是在新內容發布的同時就立刻生成相應內容的靜態頁面,比如:2003年3月22日,管理員通過後台內容管理界面錄入一篇文章后,並同步更新相關索引頁上的鏈接。
2、動態緩存:是在新內容發布以後,並不預先生成相應的靜態頁面,直到對相應內容發出請求時,如果前台緩存伺服器找不到相應緩存,就向後台內容管理伺服器發出請求,後台系統會生成相應內容的靜態頁面,用戶第一次訪問頁面時可能會慢一點,但是以後就是直接訪問緩存了。
靜態緩存的缺點:
複雜的觸發更新機制:這兩種機制在內容管理系統比較簡單的時候都是非常適用的。但對於一個關係比較複雜的網站來說,頁面之間的邏輯引用關係就成為一個非常非常複雜的問題。最典型的例子就是一條新聞要同時出現在新聞首頁和相關的3個新聞專題中,在靜態緩存模式中,每發一篇新文章,除了這篇新聞內容本身的頁面外,還需要系統通過觸發器生成多個新的相關靜態頁面,這些相關邏輯的觸發也往往就會成為內容管理系統中最複雜的部分之一。
舊內容的批量更新:通過靜態緩存發布的內容,對於以前生成的靜態頁面的內容很難修改,這樣用戶訪問舊頁面時,新的模板根本無法生效。
在動態緩存模式中,每個動態頁面只需要關心,而相關的其他頁面能自動更新,從而大大減少了設計相關頁面更新觸發器的需要。
軟道語錄
緩存
是把最常用的東西放在最容易取得的地方。

緩存映射


緩存的映射
緩存的映射
根據E的數值,高速緩存可以被分為不用的類,包括直接映射緩存,組相聯緩存和全相聯緩存。

直接映射緩存

這種緩存中,每個組只有一行,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,就 miss了,只能到下級的存儲器去找。實際的循環程序中,很容易引起這種情況,稱其為抖動。這種情況的存在,自然大大影響了性能。所以,需要更好的映射方案。

組相聯緩存

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

全相聯緩存

所謂全相聯,就是由一個包含所有緩存行的組組成的緩存。由於只有一個組,所以組選擇特別簡單,此時地址就沒有組索引了,只有標記和偏移,也就是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。所謂同步是指cache和cpu採用了相同的時鐘周期,以相同的速率同步工作。相對於非同步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的緩存容量,受製造成本的限制,緩存不可能製作到足夠大。但適量的緩存容量還是選擇光儲需要考慮的關鍵之一

網路緩存


World Wide Web(WWW)正在演繹一種新的人類生活,Internet在以前所未有的勢頭推進,一方面,人們為五彩繽紛的網路世界所陶醉,另一方面又為日漸變慢的訪問速率所苦惱……
什麼影響Internet訪問速率
訪問網站的過程是通過建立在TCP/IP協議之上的HTTP協議來完成的。從客戶端發出一個HTTP請求開始,用戶所經歷的等待時間主要決定於DNS和網站的響應時間。網站域名首先必須被DNS伺服器解析為IP地址,HTTP的延時則由在客戶端和伺服器間的若干個往返時間所決定。
往返時間是指客戶端等待每次請求的響應時間,平均往返時間取決於三個方面:
1. 網站伺服器的延時
1.
1. 網站
網站伺服器造成的延時在往返時間中佔主要比例。當某個伺服器收到多個併發HTTP請求時,會產生排隊延時。由於響應一個HTTP請求,往往需要多次訪問本地硬碟,所以即使是一台負載並不大的伺服器,也可能產生幾十或幾百微秒的延時。
2. 由路由器、網關、代理伺服器和防火牆引入的延時
1.
2. 由
通常在客戶端和伺服器之間的路徑上會存在多個網路設備,如路由器、網關、代理和防火牆等。它們對經過的IP包都要做存儲/轉發的操作,於是會引入排隊延時和處理延時。在網路擁塞時,這些設備甚至會丟包,此時會寄希望於客戶端和伺服器通過端到端的協議來恢復通信。
3. 不同通信鏈路上的數據傳輸速率
1.
3. 不同通信鏈路上的
在廣域網中,從一個網路設備到另一個網路設備間的數據傳輸速率是決定往返時間的一個重要因素。但基本帶寬的作用並不是像人們想象的那麼重要,一項測試表明,當網站採用T3速率接入Internet時,也僅有2%的網頁或對象能以64kbps的速率提供給客戶端,這顯然表明,帶寬在網路性能上不是最關鍵的因素。
今天Internet在向世界的每一個角落延伸,用戶向一個伺服器發出的 請求可能會經過8000公里到1.6萬公里的距離,光速帶來的延時和網路設備的延時是網路如此緩慢的最根本原因。
網路緩存解決根本問題
既然影響網路速率的原因是由距離和光速引起,那麼加速Web訪問的唯一途徑就是縮短客戶端與網站之間的距離。通過將用戶頻繁訪問的頁面和對象存放在離用戶更近的地方,才能減少光速引入的延時,同時由於減少了路由中的環節,也相應地減少了路由器、防火牆和代理等引入的延時。
傳統的解決辦法是建立鏡像伺服器來達到縮短距離的目的。但這個辦法存在很大的不足,對於某個站點而言,不可能在離每個用戶群較近的地方都建立鏡像站點,若對大多數網站都用這樣的辦法就更不經濟,同時管理和維護鏡像站點是一項非常困難的工作。
網路緩存是一種降低Internet流量和提高終端用戶響應時間的新興網路技術。它的觀念來自於計算機和網路的其他領域,如目前流行的Intel架構的CPU中就存在緩存,用於提高內存存取的速率;各種操作系統在進行磁碟存取時也會利用緩存來提高速率;分散式文件系統通常也通過緩存來提高客戶機和伺服器之間的速率。
1.緩存的類型
1.
1.緩存的類型
網路緩存可以在客戶端,也可以在網路上,由此我們將緩存分為兩類:瀏覽器緩存和代理緩存。
幾乎目前所有的瀏覽器都有一個內置的緩存,它們通常利用客戶端本地的內存和硬碟來完成緩存工作,同時允許用戶對緩存的內容大小作控制。瀏覽器緩存是網路緩存的一個極端的情況,因為緩存設在客戶機本地。通常一個客戶端只有一個用戶或幾個共享計算機用戶,瀏覽器緩存要求的硬碟空間通常在5MB到50MB的範圍內。但是瀏覽器緩存在用戶之間難以共享,不同客戶端的緩存無法實現交流,因而緩存的內容與效果相當有限。
代理緩存則是一種獨立的應用層網路服務,它更像E-mail、Web、DNS等服務。許多用戶不僅可以共享緩存,而且可以同時訪問緩存中的內容。企業級代理緩存一般需要配置高端的處理器和存儲系統,採用專用的軟體,要求的硬碟空間在5MB到50GB左右,內存為64MB到512MB。
代理處於客戶端與網站伺服器之間,在某些情況下,這種連接是不允許的,如網站在防火牆內,這時客戶端必須與代理建立TCP連接,然後由代理建立與網站伺服器的TCP連接。代理在伺服器和客戶端之間起到了數據接力的作用。代理髮出的HTTP請求與一般的HTTP請求有細小的不同,主要在於它包含了完整的URL,而不只是URL的路徑。
2.代理緩存的工作原理
1.
2.
當代理緩存收到客戶端的請求時,它首先檢查所請求的內容是否已經被緩存。如果沒有找到,緩存必須以客戶端的名義轉發請求,並在收到伺服器發出的文件時,將它以一定的形式保存在本地硬碟,並將其發送給客戶端。
如果客戶端請求的內容已被緩存,還存在兩種可能:其一,緩存的內容已經過時,即緩存中保存的內容超過了預先設定的時限,或網站伺服器的網頁已經更新,這時緩存會要求原伺服器驗證緩存中的內容,要麼更新內容,要麼返回“未修改”的消息;其二,緩存的內容是新的,即與原網站的內容保持同步,此時稱為緩存命中,這時緩存會立即將已保存的內容送給客戶端。
在客戶端的請求沒有命中時,反而增加了緩存存儲和轉發的處理時間。在這種情況下,代理緩存是否仍有意義呢?實際上,代理緩存能夠同時與網站伺服器建立多個併發的TCP/IP連接,并行獲取網站上的內容。緩存的存在從整體上降低了對網站訪問的次數,也就降低了單位時間內伺服器端的排隊數目,因而這時併發連接的排隊延時要小得多。優秀的緩存甚至能實現對網頁內相關鏈接內容的預取以加快連接的速率。
3.代理緩存的策略
1.
3.
當原伺服器的文件修改或被刪除后,緩存又如何知道它保存的拷貝已經作廢呢?HTTP協議為緩存服務提供了基本的支持,它使緩存能向原伺服器查詢,某個文件是否更改,如果緩存的拷貝過時則進行有條件下載。僅當原伺服器文件超過指定的日期時,才會發出新的文件。
但是這些詢問操作對網路伺服器造成的負載幾乎和獲取該文件差不多,因此不可能在客戶端向緩存發起請求時都執行這樣的操作。HTTP協議使得伺服器可以有選擇地為每個文檔指定生存時間,即清楚地指出某個文件的有效生命周期,生存時間很短即意味著“不要對其緩存”。拷貝的保留時間可以是固定的,也可以是通過這個文件的大小、來源、生存時間或內容計算出來的。

分佈緩存


分散式緩存系統是為了解決資料庫伺服器和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(預讀文件大小)兩項進行手工調整,只要右鍵單擊要選的項就可以進行修改了。