當前位置:首頁 » 文件管理 » 緩存一致性協議

緩存一致性協議

發布時間: 2024-01-21 16:16:25

Ⅰ 有誰知道cache的發展過程

縱觀PC系統和CPU二十年的發展,隨著半導體加工工藝水平的不斷提高,CPU和存儲器的性能都有了很大的提高。
CPU頻率的提高,必然要求系統中存儲器的存取速度要提高,還要求其容量要增大。主存儲器DRAM容量的提高還是比較快的,但是DRAM讀取時間的提高卻很慢。從而在速度上與CPU主頻的提高產生了極不相配的情況,這樣會影響整個系統的性能。二十年來,CPU設計的問題之一就是解決高速CPU和低速DRAM之間的平衡或匹配問題,以求系統性能的整體提高。
在它們之間加入高速緩沖存儲器Cache,就是這個問題的解決方案之一。
Cache隨CPU的發展而不斷改變,可以概括為:從無到有,由小到大,先外後內,縱深配備,軟硬兼施。初期的CPU沒有Cache,在80386時期出現外部Cache;80486時期開始有內部僅8kB的Cache。Cache的分級也由L1和L2級,發展到L0和L3級的縱深配備;Cache的大小由當初的8kB,直到Merced的1~2MB。為了更好地利用Cache,還專門配有緩存控制指令。
本文回顧了在過去的二十年中,Cache技術的發展歷程,並對PC其它設備使用Cache技術作了簡單陳述。 PC初期無需Cache在八十年代初,由於CPU主頻很低,DRAM的存取時間甚至快於CPU存取時間,因此無需Cache。例如,當時PC機採用8088CPU,系統主頻為4.77MHz,一個基本匯流排周期為4拍,即840ns。此時64kB的DRAM存取周期200ns,造成DRAM等待CPU的執行的局面,無需Cache。
在PC/AT機採用80286CPU後,系統主頻增加到10MHz,1個基本匯流排周期為2拍,即200ns。此時必須用讀取時間為100ns的DRAM。在採用25MHz的80386DX時,一個基本匯流排周期為2拍,即80ns,當時已沒有速度相匹配的DRAM可用。解決方案有2種:一種是在基本匯流排周期中插入等待,降低CPU的處理能力;另一種是採用內部和外部Cache,使用SRAM晶元以提高存儲器的讀取速度。80386沒有L1 Cache80386初期主頻為20MHz。Intel公司十分重視80386的設計製造,把它定位於「新一代個人電腦架構」,想把一些新技術設計在晶元中。但由於當時工藝所限,內置高速緩存的晶元體積過大,造成成本上升,同時工期有限,幾經權衡,最後決定在80386晶元不設置高速緩沖存儲器,可以生產另外的Cache,以配合80386運作。
盡管人們意識到CPU主頻的增加與內存DRAM存取時間過慢的矛盾已愈加突出,但因條件所限,80386內部沒有L1 Cache,只有外部的Cache。80486出現Cache80486是由80386CPU加80387數字協處理器以及8kB Cache構成。
當CPU的時鍾頻率繼續增加時,外部Cache的SRAM晶元速度也要相應提高,這樣會增加系統成本,為此在設計80486時採用了內部Cache。
80486晶元內由8kB的Cache來存放指令和數據。同時,80486也可以使用處理器外部的第二級Cache,用以改善系統性能並降低80486要求的匯流排帶寬。Cache可以工作在80486所有的操作模式:實地址模式、保護模式和X86模式。對Cache的操作是由系統自動進行的,對程序員透明。而在多處理器系統中,可能要求系統軟體的干預。對於一般的計算機,在系統CMOS設置中均有Cache使用模式的設置。
80486內部Cache是一個4路組相聯Cache,在主存儲器中給定單元的數據能夠存儲在Cache內4個單元中的任何一個。這種4路相聯方式是高命中率的全相聯Cache和快速的直接映像Cache的一種折衷,因而能進行快速查找並獲得高的命中率。Peutium的分離L1 Cache和L2 CachePentium處理器採用了超標量結構雙路執行的流水線,有分支預測技術。
由於Pentium設計有2條並行整數流水線,可同時執行2條命令。整數單元的潛在處理能力實際可增加一倍,處理器也需要對命令和數據進進雙倍的訪問。為使這些訪問不互相干涉,Intel把在486上共用的內部Cache,分成2個彼此獨立的8kB代碼Cache和8kB數據Cache,這兩個Cache可以同時被訪問。這種雙路高速緩存結構減少了爭用Cache所造成的沖突,提高了處理器效能。Pentium的Cache還採用了回寫寫入方式,這同486的貫穿寫入方式相比,可以增加Cache的命中率。此外,還採用了一種稱為MESI高速緩存一致性協議,為確保多處理器環境下的數據一致性提供了保證。Pentium Pro內嵌式L2 Cache為使Pentium Pro的性能超過Pentium,必需使用創新的設計方法。Pentium Pro使用了新的超標量和級流水線技術,包括無序執行、動態分支預測和推測執行的動態執行新技術。它可以使CPU在一個時鍾周期執行3條微操作。CPU並行處理速度的加快,意味著它同時處理指令和數據的數量增加,為不使CPU處於等待狀態,需要重新設計Cache。
Pentium Pro在片內第一級Cache的設計方案中,使指令Cache與數據Cache分別設置。指令Cache的容量為8kB,採用2路組相聯映像方式。數據Cache的容量也為8kB,但採用4路組相聯映像方式。Pentium Pro採用MESI(修改、排他、共享、作廢)協議來維持Cache和主存儲器之間的一致性。通常,人們總以為,像Pentium Pro這樣的3路超標量結構的微處理器會採用更大容量的片內第一級Cache和更大的第二級Cache。然而,Intel公司的設計者卻選擇了另一條設計思路——設計一種Cache存儲階層結構,使得能夠從一個Cache流動到另一個Cache,而不用阻塞執行。
Pentium Pro採用了內嵌式或稱捆綁式L2Cache,大小為256kB或512kB。此時的L2已經用線路直接連到CPU上,益處之一就是減少了對急劇增多L1 Cache的需求。L2 Cache還能與CPU同步運行。即當L1 Cache不命中時,立刻訪問L2 Cache,不產生附加延遲。為進一步減少因要訪問的信息不在高速緩沖中時所帶來的性能損失,Pentium Pro的L1和L2都設計成非鎖定型。即當哪個Cache中沒有CPU所需的信息時,它不妨礙後面訪問Cache的處理過程。Cache可以直接處理最多4次的Cache缺頁情況,藉助CPU的內存有序緩沖區可以順序保存最多12次的內存訪問。非鎖定型Cache適用於Pentium Pro的亂序執行核心,因為在可能引發流水線延遲的長等待內存操作期間,這些Cache可以讓CPU繼續運行。
Pentium Pro的如此捆綁封裝,帶來器件成本提高。一方面專用的L2 cache晶元成本高,另一方面兩個不同功能的晶元只有放在一起聯結後才能最後測試其性能的完整性。而當其中有一個有缺陷時,兩個晶元都被報廢。在以後的Pentium Pro產品中,又將L2 Cache從晶元中去掉。Pentium MMX容量增大的L1和L2CachePentium MMX是能運行多媒體指令MMX的高能奔騰處理器。Pentium MMX具有改進的分支預測和增強型流水線技術,並將L1 Cache容量增加到32kB,L2 Cache為512kB。
Pentium MMX的片內L1數據和指令的Cache,每個增到16kB,4路相聯。較大的獨立內部Cache、減少平均內存存取時間,同時提供對近期所用指令和數據的快速存取,性能因此得到提高。數據Cache支持採用回寫方式更新內存。
由於CacheL1容量的增大,使當時的應用程序運行速度提高了10%左右。PentiumⅡ設有雙獨立匯流排連接L2 CachePentiumⅡ是Pentium Pro的改進型,具有MMX指令,使用動態執行技術,採用雙獨立匯流排結構。PentiumⅡ同樣有2級Cache,L1為32kB(指令和數據Cache各16kB)是Pentium Pro的一倍。L2為512kB。
Pentium Ⅱ與Pentium Pro在L2 Cache 的不同是由於製作成本原因。L2 Cache已不在內嵌晶元上,而是與CPU通過專用64位高速緩存匯流排相聯,與其它元器件共同被組裝在同一基板上,即「單邊接觸盒」上。雙獨立匯流排結構就是:L2高速緩存匯流排和處理器至主內存(Processor-to-main-memory)的系統匯流排。 PentiumⅡ處理器可以同時使用這兩條匯流排,與單一匯流排結構的處理器相比,該處理器可以進出兩倍多的數據,可允許 PentiumⅡ處理器的L2高速緩存比Pentium處理器的L2高速緩存要快1倍。隨著 PentiumⅡ處理器主頻的提高,L2高速緩存的速度也將加快。最後,流水線型系統匯流排可允許同時並行傳輸,而不是單個順序型傳輸。改進型的雙重獨立匯流排結構,可以產生超過與單匯流排結構三倍帶寬的性能。另外,在PentiumⅡ中,採用了ECC技術,此技術應用到二級高速緩存中,大大提高了數據的完整性和可靠性。
為開發低端市場,曾在 PentiumⅡ的基板上除去L2,犧牲一些性能,製造廉價CPU。這就是最初的Celeron處理器。以後的Celeron仍加有較小的片上L2 Cache,其大小為128kB。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Ⅲ通過預先讀取期望的數據到高速緩存里來提高速度,這一特色提高了高速緩存的命中率,減少了存取時間。Merced設有L0即將推出的第7代處理器Merced主頻可達1GHz。很明顯,對Cache的要求更高了。為此,lntel本著「大力提高執行單元和緩存間數據交換速度」的思想,在晶元內開發新的Cache,並增加L1 Cache的容量,來平衡CPU和DRAM間的速度。
為此,在Merced的片上最接近執行單元旁再設另一處Cache,稱為L0緩存,是指令/數據分離型。由於L0Cache在物理位置上比L1離執行單元更近,布線距離的縮短,使它與執行單元間的數據交換速度比L1還快,可以進一步提高工作主頻。
同時,還要在晶元內部配置超過1MB的大容量L1 Cache。晶元內部Cache比外部Cache更易於提升與執行單元間的數據傳送速度。內部Cache的加大,執行單元不易發生「等待」。現行的內部Cache容量僅為32kB~128kB。內部Cache容量的增加會引起晶元面積增大,提高製造成本。但大部分公司認為,由於內部Cache容量增大而導致成本的上揚,可以用製造技術來彌補。與Cache相配合的緩存控制指令為進一步發揮Cache的作用,改進內存性能並使之與CPU發展同步來維護系統平衡,一些製造CPU的廠家增加了控制緩存的指令。如Intel公司在PentiumⅢ處理器中新增加了70條3D及多媒體的SSE指令集。其中有很重要的一組指令是緩存控制指令。AMD公司在K6-2和K6-3中的3DNow!多媒體指令中,也有從L1數據Cache中預取最新數據的數據預取指令(Prefetch)。
PentiumⅢ處理器的緩存控制指令,用於優化內存連續數據流。針對數據流的應用需要對以前的Cache運作方式進行了改進,減少了一些不必要的中間環節,節省了時間,增加了CPU數據匯流排的實際可用帶寬,也提高了Cache的效率。
有兩類緩存控制指令。一類是數據據預存取(Prefetch)指令,能夠增加從主存到緩存的數據流;另一類是內存流優化處理(Memory Streaming)指令,能夠增加從處理器到主存的數據流。這兩類指令都賦予了應用開發人員對緩存內容更大控制能力,使他們能夠控制緩存操作以滿足其應用的需求。
數據預存取指令允許應用識別出所需的信息,並預先將其從主存中取出存入緩存。這樣一來,處理器可以更快地獲取信息,從而改進應用性能。為了進一步削減內存延遲,內存訪問還可以與計算機周期保持流水操作。例如,如果一個應用需要計算一些數值以供3D圖形使用,當它在計算一個值的同時就可以預取下一個需要計算的數值。
內存流優化處理指令允許應用越過緩存直接訪問主存。通常情況下,處理器寫出的數據都將暫時存儲在緩存中以備處理器稍後使用。如果處理器不再使用它,數據最終將被移至主存。然而,對於多媒體應用來就,通常不再需要使用這些數據。因此,這時將數據盡快地移到主存中則顯得至關重要。採用了PentiumⅢ處理器的內存流優化處理指令後,應用程序就能讓數據搭乘「直達快車」,直接到達主存。當數據流直接到達主存時,處理器負責維護緩存的一致性。因為這種方式避免了為數據流留出空間清空緩存的當前內容,從而也提高了緩存的利用率。
總而言之,緩存控制指令改進了進出處理器的數據據流,使處理器保持其高速率運作。通過這些指令(同時還需要一些專為其設計以使其發揮優勢的軟體),商業用戶可以在操作系統和圖形設備驅動程序中感受其性能優勢。Cache在PC中其它設備的應用Cache作為一種速度匹配技術,不僅用在提高CPU對內存的讀寫速度上,而且也用在CPU結構的其它部分和PC系統中。
PC的顯示系統中,由於3D應用的迅猛發展,大量的顯示內存使用著高速緩存技術,如前台緩存、後台緩存、深度緩存和紋理緩存等。
PC的磁碟系統中,為提高內存對磁碟(主要是硬碟)的讀寫速度,就要建立磁碟高速緩存。因為DRAM內存的存取速度對CPU來說較慢,但對磁碟的存取速度卻是很快的。這是因為磁碟存儲系統包含有磁頭的機械運動,而機械運動無法跟傳送電信號的電子速度相比。此外,磁頭中電與磁的信號轉換也對速度有影響。這樣,為了提高磁碟存取速度而採用Cache也就順理成章了。硬碟Cache無需使用高速的SRAM,它只需在內存(DRAM)中劃出一個區域,作為專用的磁碟緩沖區,採用一定的數據結構,即可實現磁碟存取的Cache技術。它的過程也是把即將訪問的數據整塊地拷貝到高速緩存區中,然後內存再到高速緩存中去逐個讀取數據。由於數據在RAM空間內部傳送要比在RAM與磁碟間傳送快得多,系統由此提高了存取速度。
硬碟的Cache可以放在常規內存中。不過,為了不佔用寶貴的用戶程序空間,通常是把它設在擴展內存或擴充內存里。硬碟Cache是由人們共知的SMARTDRIVE.EXE文件自動建立的,用戶只需在AUTOEXEC.BAT與CONFIG.SYS中加入相應的命令行就成了。
在較慢速的其它外圍設備和內存的數據交換中,在網路通訊中,都需要使用Cache技術。推而廣之,凡是在傳輸速度有較大差異的設備之間,都可以利用Cache的速度匹配技術。結束語PC中的Cache主要是為了解決高速CPU和低速DRAM內存間速度匹配的問題,是提高系統性能,降低系統成本而採用的一項技術。隨著CPU和PC的發展,20年來,現在的Cache已成為CPU和PC不可缺少的組成部分,是廣大用戶衡量系統性能優劣的一項重要指標。據預測,在21世紀初期,CPU主頻加快發展的趨勢,加上內存DRAM的存取時間也會提高,從系統的性價比考慮,Cache的配備仍然是重要的技術之一。

Ⅱ 緩存一致性協議

鎖緩存行有一套協議叫做 緩存一致性協梁咐議 。緩滾渣仔存一致性協議有MSI、MESI、MOSI、Synapse、Firefly以及DragonProtocol等等。

MESI分別代表緩存行數據的4中狀態,通過對這四種狀態的切換,來達到對大汪緩存數據進行管理的目的

假設有三個CPU-A、B、C,對應三個緩存分別是cache-a、b、c。在主內存中定義了x的引用值0

單核讀取

MESI優化和引入的問題:各CPU緩存行的狀態是通過消息傳遞來進行的。如果CPU0要對一個在緩存中共享的變數進行寫入,首先需要發送一個失效的消息給到其他緩存了該數據的CPU,並且要等到他們的確認回執。CPU0在這段時間內都會一直處於阻塞狀態,會導致各種各樣的性能問題和穩定性問題。

為了避免阻塞帶來的資源浪費,在CPU中引入了Store Buffer。

CPU在寫入共享數據時,直接把數據寫入到Store Buffer中,同時發送Invalidate消息,然後繼續去處理其他指令。當收到其他所有CPU發送了Invalidate Acknowledge消息時,再將Store Buffer中的數據存儲到Cache Line中,最後再從Cache Line同步到主內存。

Ⅲ chcahe 如何保證分布式緩存數據一致性

VPLEX的技術核心是「分布式緩存一致性」,下圖則是「分布式緩存一致性」技術的工作機制示意:正是因為這項核心技術優勢,使得VPLEX方案和目前所有廠商的虛擬化方案截然不同,並能夠實現異地的數據中心整合。對跨數據中心的所有負載實現跨引擎的平攤或者實時遷移,來自任何一個主機的I/O請求可以通過任何一個引擎得到響應。
緩存一致性的記錄目錄使用少量的元數據,記錄下哪個數據塊屬於哪個引擎更新的,以及在何時更新過,並通過4K大小的數據塊告訴在集群中的所有其他的引擎。在整個過程中實際發生的溝通過程,遠遠比實際上正在更新數據塊少很多。

分布式緩存一致性數據流示意圖:上方是一個目錄,記錄下左側的主機讀取緩存A的操作,並分發給所有引擎,右側主機需要讀取該數據塊時,會先通過目錄查詢,確定該數據塊所屬的引擎位置,讀取請求會直接發送給引擎,並直接從數據塊所在的緩存上讀取。
當一個讀請求進入時,VPLEX會自動檢查目錄,查找該數據塊所屬的引擎,一旦確定該數據塊所屬的引擎位置,讀的請求會直接發送給該引擎。一旦一個寫入動作完成,並且目錄表被修改,這時另一個讀請求從另一個引擎過來,VPLEX會檢查目錄,並且直接從該引擎的緩存上讀取。如果該數據仍然在緩存上,則完全沒必要去磁碟上讀取。
如上圖,來自圖中左側主機的操作,由Cache A服務,會記錄一個更新狀態,並分發給所有所有引擎知道。如果讀取的需求來自最右側的伺服器,首先通過目錄查詢。通過這種技術可以實現所有引擎一致性工作,而且這個技術不僅可以跨引擎還可以跨VPLEX集群,而VPLEX集群可以跨區域,因此緩存一致性也可以跨區域部署。

分布式緩存一致性技術使VPLEX相比傳統的虛擬化方案擁有更高的性能和可靠性,並實現異地數據中心的虛擬化整合
對傳統的虛擬化架構來說,如果虛擬化的I/O集群中有一個節點壞了,那麼性能就會降低一半,而且實際情況降低不止一半。因為壞了一個節點,這個節點緩存一般會被寫進去。因為沒有緩存,操作會直接寫到硬碟里。如果圖中中心這個節點壞掉,那主機所有的可用性都沒有了。而VPLEX如果有一個引擎或者一個控制器壞掉了,那這個引擎的負載會均攤到其他活動引擎上。這樣總體來講用戶可以維持可預知性能,性能降低也不那麼明顯。

Ⅳ SpringCache優化、緩存一致性、多級緩存

先記錄一些綱要

1、SpringCache是寫庫之後更新的策略,對緩存一致性的不太友好

2、繼承RedisCacheManager重寫createRedisCache,繼承RedisCache重寫put

3、緩存一致性有兩個方案,一個是先寫庫再刪除緩存、第二個是先刪除緩存再寫庫。

先寫庫再刪除緩存配合超時時間一般沒啥問題,極端的情況遇到緩存失效,線程讀庫和加緩存之間,完成了一次寫庫和刪緩存的操作,導致加的緩存是舊的。總結就是讀中加入了一次寫。A讀庫 B寫庫 B刪緩存 A加緩存。

先刪緩存再寫庫的話,是寫中加入了一次讀。A刪緩存 B讀庫 B加緩存 A寫庫A。這個概率比上面的大。

這兩種方案的問題的解決方式是一樣的,就是延時雙刪策略。即:

刪緩存 寫庫 延時再次刪除緩存(需超過一次讀庫的時間,可以新啟線程完成)

或者 寫庫 刪緩存 延時再次刪除緩存(需超過一次讀庫的時間,可以新啟線程完成)

如果有主從讀寫分離,需要將延時再加上主從同步的時間。

還有個第二次刪除失敗的問題,這個問題可以通過消息中間件,反復嘗試進行。或者通過訂閱binlog,反復進行。

多級緩存可以參考阿里開源的JetCache的實現

後面會給出demo和源碼解析。

熱點內容
c緩存池 發布:2025-01-20 13:23:45 瀏覽:6
數控編程帥氣寶塔圖紙 發布:2025-01-20 13:22:15 瀏覽:871
共享文件夾加密軟體 發布:2025-01-20 13:08:41 瀏覽:40
標識符是怎樣存儲的 發布:2025-01-20 13:08:39 瀏覽:894
怎麼看安卓大屏什麼牌子 發布:2025-01-20 13:08:35 瀏覽:258
ios開發java 發布:2025-01-20 13:02:42 瀏覽:881
速騰有側燈的是哪個配置 發布:2025-01-20 13:01:53 瀏覽:371
社保用戶名和密碼都忘記了怎麼辦 發布:2025-01-20 12:55:55 瀏覽:321
最優存儲形式是什麼 發布:2025-01-20 12:51:32 瀏覽:27
centos編譯php7 發布:2025-01-20 12:33:52 瀏覽:920