伺服器緩存機制
MySQL緩存機制簡單的說就是緩存sql文本及查詢結果,如果運行相同的sql,伺服器直接從緩存中取到結果,而不需要再去解析和執行sql。如果表更改 了,那麼使用這個表的所有緩沖查詢將不再有效,查詢緩存值的相關條目被清空。更改指的是表中任何數據或是結構的改變,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改變了的表的使用MERGE表的查詢。顯然,這對於頻繁更新的表,查詢緩存是不適合的,而對於一些不常改變數據且有 大量相同sql查詢的表,查詢緩存會節約很大的性能。
命中條件
緩存存在一個hash表中,通過查詢SQL,查詢資料庫,客戶端協議等作為key.在判斷是否命中前,MySQL不會解析SQL,而是直接使用SQL去查詢緩存,SQL任何字元上的不同,如空格,注釋,都會導致緩存不命中.
如果查詢中有不確定數據,例如CURRENT_DATE()和NOW()函數,那麼查詢完畢後則不會被緩存.所以,包含不確定數據的查詢是肯定不會找到可用緩存的
工作流程
1. 伺服器接收SQL,以SQL和一些其他條件為key查找緩存表(額外性能消耗)
2. 如果找到了緩存,則直接返回緩存(性能提升)
3. 如果沒有找到緩存,則執行SQL查詢,包括原來的SQL解析,優化等.
4. 執行完SQL查詢結果以後,將SQL查詢結果存入緩存表(額外性能消耗)
緩存失效
當某個表正在寫入數據,則這個表的緩存(命中檢查,緩存寫入等)將會處於失效狀態.在Innodb中,如果某個事務修改了表,則這個表的緩存在事務提交前都會處於失效狀態,在這個事務提交前,這個表的相關查詢都無法被緩存.
緩存的內存管理
緩存會在內存中開辟一塊內存(query_cache_size)來維護緩存數據,其中有大概40K的空間是用來維護緩存的元數據的,例如空間內存,數據表和查詢結果的映射,SQL和查詢結果的映射等.
MySQL將這個大內存塊分為小的內存塊(query_cache_min_res_unit),每個小塊中存儲自身的類型,大小和查詢結果數據,還有指向前後內存塊的指針.
MySQL需要設置單個小存儲塊的大小,在SQL查詢開始(還未得到結果)時就去申請一塊空間,所以即使你的緩存數據沒有達到這個大小,也需要用這個大小的數據塊去存(這點跟Linux文件系統的Block一樣).如果結果超出這個內存塊的大小,則需要再去申請一個內存塊.當查詢完成發現申請的內存塊有富餘,則會將富餘的空間釋放掉,這就會造成內存碎片問題,見下圖
此處查詢1和查詢2之間的空白部分就是內存碎片,這部分空閑內存是有查詢1查詢完以後釋放的,假設這個空間大小小於MySQL設定的內存塊大小,則無法再被使用,造成碎片問題
在查詢開始時申請分配內存Block需要鎖住整個空閑內存區,所以分配內存塊是非常消耗資源的.注意這里所說的分配內存是在MySQL初始化時就開辟的那塊內存上分配的.
緩存的使用時機
衡量打開緩存是否對系統有性能提升是一個很難的話題
1. 通過緩存命中率判斷, 緩存命中率 = 緩存命中次數 (Qcache_hits) / 查詢次數 (Com_select)
2. 通過緩存寫入率, 寫入率 = 緩存寫入次數 (Qcache_inserts) / 查詢次數 (Qcache_inserts)
3. 通過 命中-寫入率 判斷, 比率 = 命中次數 (Qcache_hits) / 寫入次數 (Qcache_inserts), 高性能MySQL中稱之為比較能反映性能提升的指數,一般來說達到3:1則算是查詢緩存有效,而最好能夠達到10:1
緩存配置參數
1. query_cache_type: 是否打開緩存
可選項
1) OFF: 關閉
2) ON: 總是打開
3) DEMAND: 只有明確寫了SQL_CACHE的查詢才會吸入緩存
2. query_cache_size: 緩存使用的總內存空間大小,單位是位元組,這個值必須是1024的整數倍,否則MySQL實際分配可能跟這個數值不同(感覺這個應該跟文件系統的blcok大小有關)
3. query_cache_min_res_unit: 分配內存塊時的最小單位大小
4. query_cache_limit: MySQL能夠緩存的最大結果,如果超出,則增加 Qcache_not_cached的值,並刪除查詢結果
5. query_cache_wlock_invalidate: 如果某個數據表被鎖住,是否仍然從緩存中返回數據,默認是OFF,表示仍然可以返回
GLOBAL STAUS 中 關於 緩存的參數解釋:
Qcache_free_blocks: 緩存池中空閑塊的個數
Qcache_free_memory: 緩存中空閑內存量
Qcache_hits: 緩存命中次數
Qcache_inserts: 緩存寫入次數
Qcache_lowmen_prunes: 因內存不足刪除緩存次數
Qcache_not_cached: 查詢未被緩存次數,例如查詢結果超出緩存塊大小,查詢中包含可變函數等
Qcache_queries_in_cache: 當前緩存中緩存的SQL數量
Qcache_total_blocks: 緩存總block數
減少碎片策略
1. 選擇合適的block大小
2. 使用 FLUSH QUERY CACHE 命令整理碎片.這個命令在整理緩存期間,會導致其他連接無法使用查詢緩存
PS: 清空緩存的命令式 RESET QUERY CACHE
❷ 資料庫緩存機制是什麼緩存是如何作用資料庫
我們都知道 MySQL 的 Table Cache 是表定義的緩存,江湖上流傳著各種對這個參數的調優方法。
table cache 的作用,就是節約讀取表結構文件的開銷。對於table cache 是否命中,其實table cache 是針對於線程的,每個線程有自己的緩存,只緩存本線程的表結構定義。不過我們發現,strace 中沒有關於表結構文件的 open 操作(只有 stat 操作,定位表結構文件是否存在),也就是說 table cache 不命中,不一定需要讀取表結構文件。這種感覺好像是:在不命中 table cache 時,命中了另外一個表結構緩存。
運維建議:
我們讀一下 MySQL 的文檔,關於 table_open_cache 的建議值公式:建議值 = 最大並發數 * join 語句涉及的表的最大個數。
通過實驗我們容易理解:table_cache 是針對於線程的,所以需要最大並發數個緩存。另外,一個語句 join 涉及的表,需要同時在緩存中存在。所以最小的緩存大小,等於語句 join 涉及的表的最大個數。將這兩個數相乘,就得到了 MySQL 的建議值公式。
❸ 什麼叫緩存
所謂的緩存,就是將程序或系統經常要調用的對象存在內存中,一遍其使用時可以快速調用,不必再去創建新的重復的實例。這樣做可以減少系統開銷,提高系統效率。
1、通過文件緩存;顧名思義文件緩存是指把數據存儲在磁碟上,不管你是以XML格式,序列化文件DAT格式還是其它文件格式;
2、內存緩存;也就是創建一個靜態內存區域,將數據存儲進去,例如我們B/S架構的將數據存儲在Application中或者存儲在一個靜態Map中。
3、本地內存緩存;就是把數據緩存在本機的內存中。
4、分布式緩存機制;可能存在跨進程,跨域訪問緩存數據
對於分布式的緩存,此時因為緩存的數據是放在緩存伺服器中的,或者說,此時應用程序需要跨進程的去訪問分布式緩存伺服器。
(3)伺服器緩存機制擴展閱讀
當我們在應用中使用跨進程的緩存機制,例如分布式緩存memcached或者微軟的AppFabric,此時數據被緩存在應用程序之外的進程中。
每次,當我們要把一些數據緩存起來的時候,緩存的API就會把數據首先序列化為位元組的形式,然後把這些位元組發送給緩存伺服器去保存。
同理,當我們在應用中要再次使用緩存的數據的時候,緩存伺服器就會將緩存的位元組發送給應用程序,而緩存的客戶端類庫接受到這些位元組之後就要進行反序列化的操作了,將之轉換為我們需要的數據對象。
❹ php的緩存機制有哪些
主要有:
①普遍緩存技術②頁面緩存③時間觸發緩存④內容觸發緩存⑤靜態緩存(就生成html文件)
⑥內存緩存⑦php的緩沖器⑧MYSQL緩存⑨基於反向代理的Web緩存,DNS輪詢
但是一般常用的就 ①②④,其他的是網站數據量大,交互多,為減小伺服器壓力才用到
參考資料:http://blog.163.com/yuzhongfeiyan338@126/blog/static/38688323200981604944905/
❺ haproxy dns緩存機制
haproxy dns緩存機制如下:
1.Haproxy支持http反向代理。
2.aproxy支持動態程序的反向代理。
3.Haproxy支持基於資料庫的反向代理。
HAProxy是法國人Willy Tarreau開發的一款可應對客戶端10000以上的同時連接的高性能的TCP和HTTP負載均衡器。由於其豐富強大的功能在國內備受推崇,是目前主流的負載均衡器。Haproxy是一個開源的高性能的反向代理或者說是負載均衡服務軟體之一,它支持雙機熱備、虛擬主機、基於TCP和HTTP應用代理等功能。其配置簡單,而且擁有很好的對伺服器節點的健康檢查功能(相當於keepalived健康檢查),當其代理的後端伺服器出現故障時,Haproxy會自動的將該故障伺服器摘除,當伺服器的故障恢復後haproxy還會自動重新添加回伺服器主機。
Haproxy實現了一種事件驅動、單一進程模型,此模型支持非常大的並發連接數。多進程或多線程模型受內存限制、系統調度器限制以及無處不在的鎖限制,很少能處理數千並發連接。事件驅動模型因為在有更好的資源和時間管理的用戶空間(User-Space)實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程序通常擴展性較差。這就是為什麼必須對其進行優化以使每個CPU時間片(Cycle)做更多的工作。
Haproxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。haproxy運行在當前的硬體上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進當前架構中,同時可以保護web伺服器不被暴露到網路上。
Haproxy軟體引入了frontend,backend的功能,frontend(acl規則匹配)可以根據任意HTTP請求頭做規則匹配,然後把請求定向到相關的backend(server pools等待前端把請求轉過來的伺服器組)。通過frontend和backend,可以很容易的實現Haproxy的7層負載均衡代理功能。
Haproxy是一種高效、可靠、免費的高可用及負載均衡解決方案,非常適合於高負載站點的七層數據請求。客戶端通過Haproxy代理伺服器獲得站點頁面,而代理伺服器收到客戶請求後根據負載均衡的規則將請求數據轉發給後端真實伺服器。
同一客戶端訪問伺服器,Haproxy保持回話的三種方案:
1) Haproxy將客戶端ip進行Hash計算並保存,由此確保相同IP訪問時被轉發到同一真實伺服器上。
2) Haproxy依靠真實伺服器發送給客戶端的cookie信息進行回話保持。
3) Haproxy保存真實伺服器的session及伺服器標識,實現會話保持功能。
❻ 聯網緩存是什麼情況
CPU緩存是介於CPU和內存之間的臨時內存。它的容量比內存小,但交換速度快。緩存中的數據是內存的一小部分,但這一小部分會在短時間內被CPU訪問。當CPU調用大量數據時,可以避開內存,直接從緩存中調用,從而加快讀取速度。可以看出,給CPU增加緩存是一種高效的解決方案,這樣整個內存(cache memory)就變成了一個高速存儲系統,既有緩存又有內存。緩存對CPU的性能影響很大,主要是CPU的數據交換順序和CPU與緩存之間的帶寬造成的。緩存是為了解決CPU速度和內存速度的速度差。將內存中CPU最頻繁訪問的數據和指令復制到CPU中的緩存中,這樣CPU就可以不像「蝸牛」那樣頻繁的從內存中取數據,CPU只需要從緩存中取,比內存快很多。這里,需要指出的是:1。因為緩存只是內存中少量數據的副本,所以CPU在緩存中查找數據時,會出現找不到的情況(因為這些數據還沒有從內存中復制到緩存中)。這個時候CPU還是會在內存中搜索數據,這樣系統的速度會變慢,但是CPU會把這些數據復制到緩存中,以免下次再從內存中取回來。2.因為隨著時間的變化,最頻繁訪問的數據並不是一成不變的,也就是說,剛才不頻繁訪問的數據此時已經需要頻繁訪問了,但剛才是最頻繁訪問的數據,現在是不頻繁訪問的,所以要按照一定的演算法頻繁替換緩存中的數據,這樣才能保證緩存中的數據是最頻繁訪問的數據。緩存的工作原理【編輯本段】緩存的工作原理是,當CPU要讀取一條數據時,先從緩存中查找,如果找到,立即讀取並發送給CPU處理;如果沒有找到,則以相對較慢的速度從內存中讀取,並發送給CPU進行處理。同時將這個數據所在的數據塊轉移到緩存中,這樣以後就可以從緩存中讀取整個數據,而不需要調用內存。正是這種讀取機制,使得CPU讀取緩存的命中率非常高(大部分CPU可以達到90%左右),也就是說,CPU下次讀取的數據有90%在緩存中,只有10%左右需要從內存中讀取。這大大節省了CPU直接讀取內存的時間,也使得CPU在讀取數據時基本上不需要等待。一般來說,CPU讀取數據的順序是先緩存後內存。一級緩存和二級緩存【編輯本段】為了區分這兩個概念,我們先來看看RAM。相對於RAM,RAM是斷電後信息消失的那種,ROM斷電後不會消失。RAM有兩種,一種是靜態RAM和SRAM。一個是動態RAM和DRAM。前者的存儲速度比後者快很多,我們現在用的內存一般都是動態RAM。有菜鳥說,為了提高系統速度,就不能直接擴展緩存嗎?擴展越大,緩存的數據就越多,系統就越快?緩存通常是靜態RAM,速度很快,但是靜態RAM的集成度低(存儲同樣的數據,靜態RAM的體積是動態RAM的6倍),價格高(同樣容量的靜態RAM是動態RAM的4倍),所以可以看出擴展靜態RAM作為緩存是一個非常愚蠢的行為,但是為了提高系統的性能和速度,就必須擴展緩存。這樣,就有了一個折中的方法。不是擴展原有的靜態ram緩存,而是增加一些高速動態RAM作為緩存。這些高速動態RAM比傳統的動態RAM快,但比原來的靜態RAM緩存慢。我們把原來的靜態RAM緩存稱為一級緩存,後面增加的動態RAM稱為二級緩存。一級緩存和二級緩存的內容是內存中頻繁訪問的數據的副本(映射),它們的存在是為了減少高速CPU對慢速內存的訪問。通常CPU找數據或指令的順序是:先在一級緩存里找,找不到就在二級緩存里找,找不到就要在內存里找。緩存技術的發展【編輯本段】最早的CPU緩存是一個整體,容量很低。英特爾公司從奔騰時代就開始對高速緩存進行分類。當時集成在CPU內核中的緩存還不足以滿足CPU的需求,製造工藝的限制也無法大幅提升緩存容量。因此,出現了與CPU集成在同一電路板或主板上的緩存。此時CPU內核集成的緩存稱為一級緩存,外部緩存稱為二級緩存。一級緩存包括數據緩存(D-Cache)和指令緩存(I-Cache)。它們分別用於存儲數據和執行這些數據的指令,同時可以被CPU訪問,減少了因爭用緩存而產生的沖突,提高了處理器效率。當英特爾推出奔騰4處理器時,它用容量為12KμOps的新一級跟蹤高速緩存取代了指令高速緩存,這意味著它可以存儲12K微指令。隨著CPU製造技術的發展,L2緩存可以很容易地集成在CPU內核中,其容量也在逐年增加。現在用是否集成到CPU來定義一級和二級緩存是不準確的。而且,隨著L2緩存整合到CPU內核中,以前L2緩存和CPU大差距分頻的情況也改變了。此時與主頻同速工作,可以為CPU提供更高的傳輸速度。L2緩存是CPU性能的關鍵之一。增加L2緩存容量可以在不改變CPU內核的情況下大幅提高性能。而同一個核的高端和低端CPU的區別往往在L2緩存,可見L2緩存對CPU的重要性。當CPU在緩存中找到有用的數據時,稱為命中。當緩存中沒有CPU需要的數據時(這稱為未命中),CPU會訪問內存。理論上,在一個有L2緩存的CPU中,讀取L1緩存的命中率是80%。也就是說,在CPU的一級緩存中找到的有用數據占總數據的80%,剩下的20%是從二級緩存中讀取的。由於無法准確預測要執行的數據,讀取L2緩存的命中率在80%左右(從L2緩存讀取的有用數據占總數據的16%)。然後其他的數據都要從內存中調用,但這已經是相當小的比例了。目前更高端的CPU也會有三級緩存,是為讀取二級緩存後遺漏的數據而設計的。在三級緩存的CPU中,只需要從內存中調用5%左右的數據,進一步提高了CPU的效率。為了保證CPU訪問時的高命中率,緩存中的內容要用一定的演算法進行替換。一種常用的演算法是「最近最少使用演算法」(LRU演算法),這是為了消除最近最少訪問的行。因此,有必要為每一行設置一個計數器。LRU演算法是將命中行的計數器重置為零,並將其他行的計數器加1。當需要替換時,消除行計數器的計數值最大的數據行被消除。這是一種高效科學的演算法,其計數器清零過程可以從緩存中清除一些頻繁調用後不再需要的數據,提高緩存的利用率。在CPU產品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量分為128KB、256KB、512KB、1MB、2MB、4MB等。一級緩存容量和二級緩存容量差別不大是提升CPU性能的關鍵。L2緩存容量的增加是由CPU的製造工藝決定的,容量的增加必然導致CPU中晶體管數量的增加。要在有限的CPU面積上集成更大的緩存,對製造工藝的要求會更高。目前主流的CPU L2緩存在2MB左右,其中Intel公司在2007年陸續推出了台式機用4MB和6MB L2緩存的高性能CPU,但價格相對較高。對於配置沒有太高要求的朋友,一般雙核CPU配2MB L2緩存基本可以滿足日常上網需求。
嗯,怎麼說呢?很抽象...比如我和你之間的一個小倉庫,你給了我一批5噸的貨物,叫我去取,但是我的車一次只能拖3噸,所以你可以把5噸的貨物全部放進倉庫,我花兩次時間去搬,這樣可以節省你的時間...讓我們專業點...以新浪為例...第一次訪問新浪對我來說有點慢。現在新浪的主頁已經完全開放了。好的,我會做的。網頁關閉了…然後我這個時候打開新浪,完全打開了。不知道大家平時有沒有注意到,沒有這個東西,就是第一次訪問緩存的時候,網頁上的一些信息,比如flash圖片和文字,是下載到你的電腦上,也就是你的緩存里的。這個緩存可以設置大小…當緩存滿了,你可以把文件放入其中,並在緩存中保持最長的時間。擠出上面的——下載一些資料到自己電腦的緩存里,然後你訪問網頁電腦。這時候他不是先找這個站點能不能連接到這個站點,而是說他先去緩存里找一下,有沒有你現在想訪問的信息。如果有,他直接從這台電腦上打電話找到並連接到你想訪問的網站...這是緩存,不知道你懂不懂...呵呵,不會表達。
緩存大小是CPU的重要指標之一,其結構和大小對CPU速度有很大影響。簡單來說,緩存就是用來存儲一些常用的或者即將出現的數據或者指令。當需要這些數據或指令時,可以直接從緩存中讀取,這比讀入內存甚至硬碟要快得多,可以大大提高CPU的處理速度。所謂處理器緩存通常是指L2緩存或外部緩存。即緩存是介於CPU和主存DRAM(動態RAM)之間的一種小規模但高速的存儲器,通常由SRAM(靜態隨機存取存儲器)組成。用於存儲CPU經常使用的數據,使CPU不必依賴於速度較慢的DRAM(動態隨機存取存儲器)。L2緩存一直是一種速度極快且價格昂貴的存儲器,稱為SRAM (static RAM),SRAM(Static RAM)是靜態存儲器的縮寫。因為SRAM採用和CPU一樣的半導體工藝,所以和DRAM相比,SRAM的存取速度更快,尺寸更大,價格也更高。處理器緩存的基本思想是用少量的SRAM作為CPU和DRAM存儲系統之間的緩沖,即緩存系統。8486及更高級別的微處理器的一個顯著特點是在處理器晶元中集成了SRAM作為緩存,由於這些緩存都安裝在晶元中,所以稱之為片上緩存。86片上緩存的容量通常是8K。奔騰等高檔晶元16KB,Power PC可達32KB。奔騰微處理器通過使用數據和雙通道高速緩存技術進一步改進了片上高速緩存。相對來說,片上緩存容量小,但是非常靈活方便,大大提高了微處理器的性能。片上緩存也稱為一級緩存。由於486、586等高端處理器時鍾頻率較高,一旦一級緩存未命中,性能會明顯變差。在這種情況下,採用的方法是在處理器晶元外部添加緩存,稱為L2緩存。L2緩存實際上是CPU和主存之間的真正緩沖區。因為系統板上的響應時間遠低於CPU,沒有L2緩存是不可能達到486、586等高端處理器的理想速度的。L2緩存的容量通常比L1緩存大一個數量級以上。在系統設置中,用戶通常需要確定是否安裝了L2緩存及其大小。L2緩存的大小一般為128KB、256KB或512KB。256KB或512KB同步緩存廣泛應用於486以上的微機。所謂同步,就是緩存和CPU以相同的時鍾周期、相同的速度同步工作。與非同步緩存相比,性能可以提高30%以上。目前PC及其伺服器系統的發展趨勢之一是CPU頻率越來越高,系統架構越來越先進,主存DRAM的結構和訪問時間提升緩慢。因此,緩存技術越重要,PC系統中的緩存就越大。大多數用戶已經把緩存作為評價和購買PC系統的一個重要指標。
❼ php 中如何使用緩存,使用哪種緩存機制最好;
php的緩存三種.有文件緩存,資料庫緩存,memcache緩存;
memcache緩存要求對伺服器支持,而且它的緩存是由期限的,一般是30天。這種緩存的效率是最高的。讀存取的速度最快。
資料庫緩存
和
文件緩存比較簡單。適用小的項目。和php新手
❽ CPU緩存的工作原理
CPU要讀取一個數據時,首先從Cache中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入Cache中,可以使得以後對整塊數據的讀取都從Cache中進行,不必再調用內存。
正是這樣的讀取機制使CPU讀取Cache的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在Cache中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先Cache後內存。 前面是把Cache作為一個整體來考慮的,下面分類分析。Intel從Pentium開始將Cache分開,通常分為一級高速緩存L1和二級高速緩存L2。在以往的觀念中,L1 Cache是集成在CPU中的,被稱為片內Cache。在L1中還分數據Cache(D-Cache)和指令Cache(I-Cache)。它們分別用來存放數據和執行這些數據的指令,而且兩個Cache可以同時被CPU訪問,減少了爭用Cache所造成的沖突,提高了處理器效能。
在P4處理器中使用了一種先進的一級指令Cache——動態跟蹤緩存。它直接和執行單元及動態跟蹤引擎相連,通過動態跟蹤引擎可以很快地找到所執行的指令,並且將指令的順序存儲在追蹤緩存里,這樣就減少了主執行循環的解碼周期,提高了處理器的運算效率。
以前的L2 Cache沒集成在CPU中,而在主板上或與CPU集成在同一塊電路板上,因此也被稱為片外Cache。但從PⅢ開始,由於工藝的提高L2 Cache被集成在CPU內核中,以相同於主頻的速度工作,結束了L2 Cache與CPU大差距分頻的歷史,使L2 Cache與L1 Cache在性能上平等,得到更高的傳輸速度。L2Cache只存儲數據,因此不分數據Cache和指令Cache。在CPU核心不變化的情況下,增加L2 Cache的容量能使性能提升,同一核心的CPU高低端之分往往也是在L2 Cache上做手腳,可見L2 Cache的重要性。CPU的L1 Cache與L2 Cache惟一區別在於讀取順序。 CPU在Cache中找到有用的數據被稱為命中,當Cache中沒有CPU所需的數據時(這時稱為未命中),CPU才訪問內存。從理論上講,在一顆擁有2級Cache的CPU中,讀取L1 Cache的命中率為80%。也就是說CPU從L1 Cache中找到的有用數據占數據總量的80%,剩下的20%從L2 Cache讀取。在一些高端領域的CPU(像Intel的Itanium)中,我們常聽到L3 Cache,它是為讀取L2 Cache後未命中的數據設計的—種Cache。
為了保證CPU訪問時有較高的命中率Cache中的內容應該按一定的演算法替換,其計數器清零過程可以把一些頻繁調用後再不需要的數據淘汰出Cache,提高Cache的利用率。緩存技術的發展
總之,在傳輸速度有較大差異的設備間都可以利用Cache作為匹配來調節差距,或者說是這些設備的傳輸通道。在顯示系統、硬碟和光碟機,以及網路通訊中,都需要使用Cache技術。但Cache均由靜態RAM組成,結構復雜,成本不菲,使用現有工藝在有限的面積內不可能做得很大,不過,這也正是技術前進的源動力,有需要才有進步! 隨著CPU製造工藝的發展,二級緩存也能輕易的集成在CPU內核中,容量也在逐年提升。用集成在CPU內部與否來定義一、二級緩存,已不確切。而且隨著二級緩存被集成入CPU內核中,以往二級緩存與CPU大差距分頻的情況也被改變,此時其以相同於主頻的速度工作,可以為CPU提供更高的傳輸速度。同一核心的CPU高低端之分往往也是在二級緩存上有差異,由此可見二級緩存對於CPU的重要性。
CPU產品中,一級緩存的容量基本在4KB到64KB之間,二級緩存的容量則分為128KB、256KB、512KB、1MB、2MB等。一級緩存容量各產品之間相差不大,而二級緩存容量則是提高CPU性能的關鍵。二級緩存容量的提升是由CPU製造工藝所決定的,容量增大必然導致CPU內部晶體管數的增加,要在有限的CPU面積上集成更大的緩存,對製造工藝的要求也就越高。
雙核心CPU的二級緩存比較特殊,和以前的單核心CPU相比,最重要的就是兩個內核的緩存所保存的數據要保持一致,否則就會出現錯誤,為了解決這個問題不同的CPU使用了不同的辦法。
❾ 網路中的緩存是什麼
CPU緩存(Cache Memory)位於CPU與內存之間的臨時存儲器,它的容量比內存小但交換速度快。在緩存中的數據是內存中的一小部分,但這一小部分是短時間內CPU即將訪問的,當CPU調用大量數據時,就可避開內存直接從緩存中調用,從而加快讀取速度。由此可見,在CPU中加入緩存是一種高效的解決方案,這樣整個內存儲器(緩存+內存)就變成了既有緩存的高速度,又有內存的大容量的存儲系統了。緩存對CPU的性能影響很大,主要是因為CPU的數據交換順序和CPU與緩存間的帶寬引起的。
緩存是為了解決CPU速度和內存速度的速度差異問題。內存中被CPU訪問最頻繁的數據和指令被復制入CPU中的緩存,這樣CPU就可以不經常到象「蝸牛」一樣慢的內存中去取數據了,CPU只要到緩存中去取就行了,而緩存的速度要比內存快很多。
這里要特別指出的是:
1.因為緩存只是內存中少部分數據的復製品,所以CPU到緩存中尋找數據時,也會出現找不到的情況(因為這些數據沒有從內存復制到緩存中去),這時CPU還是會到內存中去找數據,這樣系統的速度就慢下來了,不過CPU會把這些數據復制到緩存中去,以便下一次不要再到內存中去取。
2.因為隨著時間的變化,被訪問得最頻繁的數據不是一成不變的,也就是說,剛才還不頻繁的數據,此時已經需要被頻繁的訪問,剛才還是最頻繁的數據,現在又不頻繁了,所以說緩存中的數據要經常按照一定的演算法來更換,這樣才能保證緩存中的數據是被訪問最頻繁的。
緩存的工作原理
[編輯本段]
緩存的工作原理是當CPU要讀取一個數據時,首先從緩存中查找,如果找到就立即讀取並送給CPU處理;如果沒有找到,就用相對慢的速度從內存中讀取並送給CPU處理,同時把這個數據所在的數據塊調入緩存中,可以使得以後對整塊數據的讀取都從緩存中進行,不必再調用內存。
正是這樣的讀取機制使CPU讀取緩存的命中率非常高(大多數CPU可達90%左右),也就是說CPU下一次要讀取的數據90%都在緩存中,只有大約10%需要從內存讀取。這大大節省了CPU直接讀取內存的時間,也使CPU讀取數據時基本無需等待。總的來說,CPU讀取數據的順序是先緩存後內存。
一級緩存和二級緩存
[編輯本段]
為了分清這兩個概念,我們先了解一下RAM 。RAM和ROM相對的,RAM是掉電以後,其中的信息就消失那一種,ROM在掉電以後信息也不會消失那一種。
RAM又分兩種,一種是靜態RAM,SRAM;一種是動態RAM,DRAM。前者的存儲速度要比後者快得多,我們現在使用的內存一般都是動態RAM。
有的菜鳥就說了,為了增加系統的速度,把緩存擴大不就行了嗎,擴大的越大,緩存的數據越多,系統不就越快了嗎?緩存通常都是靜態RAM,速度是非常的快, 但是靜態RAM集成度低(存儲相同的數據,靜態RAM的體積是動態RAM的6倍), 價格高(同容量的靜態RAM是動態RAM的四倍), 由此可見,擴大靜態RAM作為緩存是一個非常愚蠢的行為, 但是為了提高系統的性能和速度,我們必須要擴大緩存, 這樣就有了一個折中的方法,不擴大原來的靜態RAM緩存,而是增加一些高速動態RAM做為緩存, 這些高速動態RAM速度要比常規動態RAM快,但比原來的靜態RAM緩存慢, 我們把原來的靜態ram緩存叫一級緩存,而把後來增加的動態RAM叫二級緩存。
一級緩存和二級緩存中的內容都是內存中訪問頻率高的數據的復製品(映射),它們的存在都是為了減少高速CPU對慢速內存的訪問。 通常CPU找數據或指令的順序是:先到一級緩存中找,找不到再到二級緩存中找,如果還找不到就只有到內存中找了。
緩存的技術發展
[編輯本段]
最早先的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%的數據需要從內存中調用,這進一步提高了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基本也可以滿足日常上網需要了。