緩存回寫指令
① 指令緩存的CPU的L1指令緩存和L1高速緩存的關系
L1高速緩存,也就是我們經常說的一級高速緩存。在CPU裡面內置了高速緩存可以提高CPU的運行效率。內置的L1高速緩存的容量和結構對CPU的性能影響較大,不過高速緩沖存儲器均由靜態RAM組成,結構較復雜,在CPU管芯面積不能太大的情況下,L1級高速緩存的容量不可能做得太大。採用回寫(Write Back)結構的高速緩存。它對讀和寫*作均有可提供緩存。而採用寫通(Write-through)結構的高速緩存,僅對讀*作有效。在486以上的計算機中基本採用了回寫式高速緩存。在流行的處理器中,奔騰Ⅲ和Celeron處理器擁有32KB的L1高速緩存,奔騰4為8KB,而AMD的Duron和Athlon處理器的L1高速緩存高達128KB。
L2高速緩存,指CPU第二層的高速緩存,第一個採用L2高速緩存的是奔騰 Pro處理器,它的L2高速緩存和CPU運行在相同頻率下的,但成本昂貴,市場生命很短,所以其後奔騰 II的L2高速緩存運行在相當於CPU頻率一半下的。接下來的Celeron處理器又使用了和CPU同速運行的L2高速緩存,現在流行的CPU,無論是AthlonXP和奔騰4,其L2高速緩存都是和CPU同速運行的。除了速度以外,L2高速緩存容量也會影響CPU的性能,原則是越大越好,現在家庭用CPU容量最大的是512KB,而伺服器和工作站上用CPU的L2高速緩存更高達1MB-3MB。
cpuL1緩存首先是CPU的內部結構決定,CPU是由硅晶原片切割而成的,一塊晶原片切割的CPU塊有限,所以一個CPU的結構要非常合理地搭配L1,L2緩存大小,P4640比P4630高頻,所以內部結構有所不同。而L1緩存的作用是數據交換的「超高速」通道,所以其大小不是重點,內部參數才是關鍵,只要參數(CL值,延遲等)夠快,完全可以彌補大小的差距,像P-M 1。7G的CPU由於L1緩存的參數夠高,雖然容量有不足,但在性能測試上L1緩存的速度比P4 630快的多。所以不必刻意要求L1緩存大小。(另外,CPU的緩存速度比一般內存快的多,大概快幾十倍)
高速緩存英文是cache。一種特殊的存儲器子系統,其中復制了頻繁使用的數據,以利於CPU快速訪問。存儲器的高速緩沖存儲器存儲了頻繁訪問的 RAM 位置的內容及這些數據項的存儲地址。當處理器引用存儲器中的某地址時,高速緩沖存儲器便檢查是否存有該地址。如果存有該地址,則將數據返回處理器;如果沒有保存該地址,則進行常規的存儲器訪問。因為高速緩沖存儲器總是比主RAM存儲器速度快,所以當 RAM 的訪問速度低於微處理器的速度時,常使用高速緩沖存儲器。
② 陣列卡緩存模式- 從透寫(Write Through)改成 回寫(Write Back),會不會導致硬碟丟失數據
不會的,這只是改了寫緩存的模式,不會破壞硬碟數據
③ 系統重啟或關閉前,回寫緩存區是什麼意思呀
寫入硬碟前,要先寫到緩存,關機時需要將緩存寫入硬碟,此即回寫緩存區
④ 硬碟的緩存
想知道「寫入緩存」選項是如何設置的嗎?請打開「設備管理器」,展開「磁碟驅動器」,接著在下面任何一個驅動器圖標上點擊滑鼠右鍵並選擇「屬性」,然後切換到「策略」標簽。在這里你應該會看到兩個選項:「為快速刪除而優化」(所有的東西都直接寫入硬碟驅動器)和「為提高性能而優化」(寫入到緩存)。
第一個選項可以允許你快速的斷開設備與電腦的連接,例如一個USB快閃記憶體,你不用點擊任務欄裡面的「安全刪除硬體」圖標就可以直接把這些設備和電腦斷開。如果兩個選項都處於灰色無法選擇的狀態,那麼說明你的磁碟驅動器默認已經把「寫入緩存」選項打開了。(欲查看更多關於延緩寫入默認狀態的信息,請查看微軟的文章「Windows XP and Surprise Removal of Hardware」 )
在Windows XP系統中有時候會彈出「寫入緩存失敗(Delayed write failed)」的提示,告訴你延緩寫入系統可能存在一些問題。雖然這並不是什麼致命錯誤,不過也值得引起你足夠的關注。
下面是一些常見的引起「寫入緩存失敗」的原因:
1.磁碟驅動器本身的原因。這種情況尤其發生SCSI或者RAID驅動器上。有一些RAID驅動器的驅動程序會在安裝了SP2的XP操作系統中報告一個虛假消息告訴用戶「寫入緩存失敗」。所以你應該為你的磁碟驅動器安裝最新版本的驅動程序。
2.數據線的原因。一些錯誤或者損壞的數據線,特別是外部USB線和火線,會造成這種情況。如果你的數據線過長,或者數據線連接到的是一個質量不合格的USB HUB上,也會造成寫入緩存失敗。最後,還有可能是因為你有一個需要80針數據線的UDMA驅動器,但你卻使用了一條40針腳的數據線。
3.SCSI終止錯誤。雖然這種情況在使用了self-terminating技術的SCSI設備上很少發生,但是我們還是必須把它考慮進來。
4.媒體錯誤。這是可能發生的最嚴重的情況,換句話說,也就是磁碟驅動器壞了。如果你能通過SMART(比如SMART & Simple )軟體獲取磁碟驅動器的統計信息,那麼你可以通過這些信息來判斷磁碟驅動器出現了機械(物理)故障。你還可以使用一個叫Gibson Research's SpinRite的工具來幫助你診斷媒體錯誤,只是這個軟體在對磁碟驅動器進行完全檢測的時候會耗費相當長的時間。
希捷Barracuda 1TB 32M SATA3
5.計算機的BIOS設定強制開啟了驅動器控制器不支持的UDMA模式。雖然UDMA 模式能夠增強磁碟的性能,但是如果驅動器控制器不支持的話將會導致一些錯誤發生。這種情況並不多見,主要是發生在新安裝的硬體設備上(該硬體設備支持UDMA模式),用戶可以通過升級BIOS或者將BIOS中關於硬碟驅動器的選項恢復成默認的「自動檢測」模式來解決這個問題。舉個例子:如果設置成UDMA Mode6模式的設備出現了問題,那麼你可以將它設置成Mode5模式。
6.驅動器控制器的問題。如果你的系統同時擁有長和短兩種PCI插槽(64位和32位),請嘗試將USB控制器從長PCI插槽中拔出。一些比較老的PCI 卡並不支持這種類型的插槽。
7.內存的奇偶校驗錯誤。這種情況通常發生在你新增了一條內存之後,造成這種錯誤的原因是很可能是你的新內存條和主板所支持的內存類型不符,或者是內存本身有問題。(內存有問題還會造成其他一些錯誤,例如隨機死鎖等)
8.注冊表中的LargeSystemCache鍵值錯誤。這種情況很少見,通常發生在那些安裝了ATI顯示適配器,內存大於521MB的機器上。這些機器上的注冊表中有一個叫做LargeSystemCache的鍵
(HKEY LOCAL ManagerMemory Management),該鍵值用來管理系統分配給一些核心進程的內存容量,如果鍵值被設為1的話(這樣設置可以增強內存大於512MB的機器的性能),有可能會在一些系統中導致數據錯誤和產生寫入緩存失敗的錯誤。如果出現這種情況的話,請把該鍵值改為0。
⑤ 什麼是緩存什麼是磁碟的緩存
磁碟緩存分為讀緩存和寫緩存。
讀緩存是指,操作系統為已讀取的文件數據,在內存較空閑的情況下留在內存空間中(這個內存空間被稱之為「內存池」),當下次軟體或用戶再次讀取同一文件時就不必重新從磁碟上讀取,從而提高速度。
寫緩存實際上就是將要寫入磁碟的數據先保存於系統為寫緩存分配的內存空間中,當保存到內存池中的數據達到一個程度時,便將數據保存到硬碟中。這樣可以減少實際的磁碟操作,有效的保護磁碟免於重復的讀寫操作而導致的損壞,也能減少寫入所需的時間。
根據寫入方式的不同,有寫通式和回寫式兩種。寫通式在讀硬碟數據時,系統先檢查請求指令,看看所要的數據是否在緩存中,如果在的話就由緩存送出響應的數據,這個過程稱為命中。這樣系統就不必訪問硬碟中的數據,由於SDRAM的速度比磁介質快很多,因此也就加快了數據傳輸的速度。回寫式就是在寫入硬碟數據時也在緩存中找,如果找到就由緩存就數據寫入盤中,現在的多數硬碟都是採用的回寫式緩存,這樣就大大提高了性能。
硬碟的緩沖區是硬碟與外部匯流排交換數據的場所。硬碟的讀數據的過程是將磁信號轉化為電信號後,通過緩沖區一次次地填充與清空,再填充,再清空,一步步按照PCI匯流排的周期送出,可見,緩沖區的作用是相當重要的。它的作用也是提高性能,但是它與緩存的不同之處在於:一、它是容量固定的硬體,而不像緩存是可以由操作系統在內存中動態分配的。二、它對性能的影響大大超過磁碟緩存對性能的影響,因為如果沒有緩沖區,就會要求每傳一個字(通常是4位元組)就需要讀一次磁碟或寫一次磁碟。
【TIP,現在主流的硬碟,緩存都在8M和16M,部分已經達到32M】
⑥ 3、Cache的寫直達法和回寫法指什麼二者各有何優缺點
寫直達能直接寫入主存,回寫法在緩存中內容要被替換時才寫入主存
⑦ cpu cache 什麼時候回寫
1. 簡單點說ram的數據吞吐能力與cpu處理數據不能有效協同,所以為了解決這個需要各級高速緩存(cache)
2. 三者之間聯系:
高速緩沖存儲器(Cache)實際上是為了把由DRAM組成的大容量內存儲器都看做是高速存儲器而設置的小容量局部存儲器,一般由高速SRAM構成。這種局部存儲器是面向CPU的,引入它是為減小或消除CPU與內存之間的速度差異對系統性能帶來的影響。Cache 通常保存著一份內存儲器中部分內容的副本(拷貝),該內容副本是最近曾被CPU使用過的數據和程序代碼。Cache的有效性是利用了程序對存儲器的訪問在時間上和空間上所具有的局部區域性,即對大多數程序來說,在某個時間片內會集中重復地訪問某一個特定的區域。如PUSH/POP指令的操作都是在棧頂順序執行,變數會重復使用,以及子程序會反復調用等,就是這種局部區域性的實際例證。因此,如果針對某個特定的時間片,用連接在局部匯流排上的Cache代替低速大容量的內存儲器,作為CPU集中重復訪問的區域,系統的性能就會明顯提高。
系統開機或復位時,Cache 中無任何內容。當CPU送出一組地址去訪問內存儲器時,訪問的存儲器的內容才被同時「拷貝」到Cache中。此後,每當CPU訪問存儲器時,Cache 控制器要檢查CPU送出的地址,判斷CPU要訪問的地址單元是否在Cache 中。若在,稱為Cache 命中,CPU可用極快的速度對它進行讀/寫操作;若不在,則稱為Cache未命中,這時就需要從內存中訪問,並把與本次訪問相鄰近的存儲區內容復制到Cache 中。未命中時對內存訪問可能比訪問無Cache 的內存要插入更多的等待周期,反而會降低系統的效率。而程序中的調用和跳轉等指令,會造成非區域性操作,則會使命中率降低。因此,提高命中率是Cache 設計的主要目標。
釋義:
1.RAM
隨機存取存儲器(random access memory,RAM)又稱作「隨機存儲器」,是與CPU直接交換數據的內部存儲器,也叫主存(內存)。它可以隨時讀寫,而且速度很快,通常作為操作系統或其他正在運行中的程序的臨時數據存儲媒介。
存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。這種存儲器在斷電時將丟失其存儲內容,故主要用於存儲短時間使用的程序。 按照存儲單元的工作原理,隨機存儲器又分為靜態隨機存儲器(英文:Static RAM,SRAM)和動態隨機存儲器(英文Dynamic RAM,DRAM)。
2.Cache
高速緩沖存儲器(Cache)其原始意義是指存取速度比一般隨機存取記憶體(RAM)來得快的一種RAM,一般而言它不像系統主記憶體那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術,也有快取記憶體的名稱。
高速緩沖存儲器是存在於主存與CPU之間的一級存儲器, 由靜態存儲晶元(SRAM)組成,容量比較小但速度比主存高得多, 接近於CPU的速度。在計算機存儲系統的層次結構中,是介於中央處理器和主存儲器之間的高速小容量存儲器。它和主存儲器一起構成一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬體自動進行的。
高速緩沖存儲器最重要的技術指標是它的命中率。
⑧ 緩存一致性
在現代的 CPU(大多數)上,所有的內存訪問都需要通過層層的緩存來進行。CPU 的讀 / 寫(以及取指令)單元正常情況下甚至都不能直接訪問內存——這是物理結構決定的;CPU 都沒有管腳直接連到內存。相反,CPU 和一級緩存(L1 Cache)通訊,而一級緩存才能和內存通訊。大約二十年前,一級緩存可以直接和內存傳輸數據。如今,更多級別的緩存加入到設計中,一級緩存已經不能直接和內存通訊了,它和二級緩存通訊——而二級緩存才能和內存通訊。或者還可能有三級緩存。
緩存是分「段」(line)的,一個段對應一塊存儲空間,大小是 32、64或128位元組,每個緩存段知道自己對應什麼范圍的物理內存地址。
當 CPU 看到一條讀內存的指令時,它會把內存地址傳遞給一級數據緩存。一級數據緩存會檢查它是否有這個內存地址對應的緩存段。如果沒有,它會把整個緩存段從內存(或者從更高一級的緩存,如果有的話)中載入進來。是的,一次載入整個緩存段,這是基於這樣一個假設:內存訪問傾向於本地化(localized),如果我們當前需要某個地址的數據,那麼很可能我們馬上要訪問它的鄰近地址。一旦緩存段被載入到緩存中,讀指令就可以正常進行讀取。
如果我們只處理讀操作,那麼事情會很簡單,因為所有級別的緩存都遵守以下規律—— 在任意時刻,任意級別緩存中的緩存段的內容,等同於它對應的內存中的內容。 。
一旦我們允許寫操作,事情就變得復雜一點了。這里有兩種基本的寫模式:直寫(write-through)和回寫(write-back)。直寫更簡單一點:我們透過本級緩存,直接把數據寫到下一級緩存(或直接到內存)中,如果對應的段被緩存了,我們同時更新緩存中的內容(甚至直接丟棄),就這么簡單。這也遵守前面的定律: 緩存中的段永遠和它對應的內存內容匹配。
回寫模式就有點復雜了。緩存不會立即把寫操作傳遞到下一級,而是僅修改本級緩存中的數據,並且把對應的緩存段標記為「臟」段。臟段會觸發回寫,也就是把裡面的內容寫到對應的內存或下一級緩存中。回寫後,臟段又變「干凈」了。當一個臟段被丟棄的時候,總是先要進行一次回寫。回寫所遵循的規律有點不同。 當所有的臟段被回寫後,任意級別緩存中的緩存段的內容,等同於它對應的內存中的內容。
換句話說,回寫模式的定律中,我們去掉了「在任意時刻」這個修飾語,代之以弱化一點的條件:要麼緩存段的內容和內存一致(如果緩存段是干凈的話),要麼緩存段中的內容最終要回寫到內存中(對於臟緩存段來說)。
只要系統只有一個 CPU 核在工作,一切都沒問題。如果有多個核,每個核又都有自己的緩存,那麼我們就遇到問題了,因為如果一個 CPU 緩存了某塊內存,那麼在其他 CPU 修改這塊內存的時候,我們希望得到通知。系統的內存在各個 CPU 之間無法做到與生俱來的同步,我們需要一個大家都能遵守的方法來達到同步的目的。
緩存一致性協議有多種,但是日常處理的大多數計算機設備使用的都屬於「窺探(snooping)」協議。
窺探」背後的基本思想是,所有內存傳輸都發生在一條共享的匯流排上,而所有的處理器都能看到這條匯流排:緩存本身是獨立的,但是內存是共享資源,所有的內存訪問都要經過仲裁(arbitrate):同一個指令周期中,只有一個緩存可以讀寫內存。窺探協議的思想是,緩存不僅僅在做內存傳輸的時候才和匯流排打交道,而是不停地在窺探匯流排上發生的數據交換,跟蹤其他緩存在做什麼。所以當一個緩存代表它所屬的處理器去讀寫內存時,其他處理器都會得到通知,它們以此來使自己的緩存保持同步。只要某個處理器一寫內存,其他處理器馬上就知道這塊內存在它們自己的緩存中對應的段已經失效。
在直寫模式下,這是很直接的,因為寫操作一旦發生,它的效果馬上會被「公布」出去。但是如果混著回寫模式,就有問題了。因為有可能在寫指令執行過後很久,數據才會被真正回寫到物理內存中——在這段時間內,其他處理器的緩存也可能會傻乎乎地去寫同一塊內存地址,導致沖突。在回寫模型中,簡單把內存寫操作的信息廣播給其他處理器是不夠的,我們需要做的是,在修改本地緩存之前,就要告知其他處理器。
MESI 是四種緩存段狀態的首字母縮寫,任何多核系統中的緩存段都處於這四種狀態之一。
從CPU讀寫角度來說:
上圖的切換解釋:
緩存的一致性消息傳遞是要時間的,這就使其切換時會產生延遲。當一個緩存被切換狀態時其他緩存收到消息完成各自的切換並且發出回應消息這么一長串的時間中CPU都會等待所有緩存響應完成。可能出現的阻塞都會導致各種各樣的性能問題和穩定性問題。
比如你需要修改本地緩存中的一條信息,那麼你必須將I(無效)狀態通知到其他擁有該緩存數據的CPU緩存中,並且等待確認。等待確認的過程會阻塞處理器,這會降低處理器的性能。因為這個等待遠遠比一個指令的執行時間長的多。
為了避免這種CPU運算能力的浪費,Store Bufferes被引入使用。處理器把它想要寫入到主存的值寫到緩存,然後繼續去處理其他事情。當所有失效確認(Invalidate Acknowledge)都接收到時,數據才會最終被提交。
執行失效也不是一個簡單的操作,它需要處理器去處理。另外,存儲緩存(Store Buffers)並不是無窮大的,所以處理器有時需要等待失效確認的返回。這兩個操作都會使得性能大幅降低。為了應付這種情況,引入了失效隊列——對於所有的收到的Invalidate請求,Invalidate Acknowlege消息必須立刻發送,Invalidate並不真正執行,而是被放在一個特殊的隊列中,在方便的時候才會去執行,處理器不會發送任何消息給所處理的緩存條目,直到它處理Invalidate。