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