2014-03-31 265 views
30

我看了一篇論文,用的是「cold cache」和「暖高速緩存」。我搜索,但我沒有找到有用的東西。 「冷高速緩存」和「暖高速緩存」是什麼意思?冷緩存和熱緩存概念是什麼意思?

我也訪問this鏈接但我需要更多。

回答

55

TL; DR與汽車的冷發動機和暖發動機有相似之處。冷藏緩存 - 沒有任何價值,並且不能給你任何加速,因爲它是空的。溫暖的緩存有一些價值,可以給你加速。

緩存是一種保存一些值(inode,內存頁,磁盤塊等)以加快查找的結構。

緩存通過在快速搜索數據結構(哈希表,B +樹)或更快的訪問介質(RAM內存vs HDD,SSD vs HDD)中存儲某種短引用而工作。

爲了能夠做到這一點快速搜索,你需要你的緩存來保存值。我們來看看例子。

說,你有一個Linux系統與一些文件系統。要訪問文件系統中的文件,您需要知道文件從磁盤啓動的位置。這些信息存儲在inode中。爲了簡單起見,我們說inode表存儲在磁盤的某個地方(所謂的「超級塊」部分)。

現在想象一下,您需要讀取文件/ etc/fstab。要做到這一點,你需要從磁盤讀取inode表(10毫秒),然後解析它,並獲得文件的起始塊,然後讀取文件本身(10毫秒)。總計〜20ms

這是太多的操作。所以你要在RAM中添加一個哈希表形式的緩存。 RAM訪問速度爲10ns - 這比以前快了1000倍!該散列表中的每一行都包含2個值。

(inode number or filename) : (starting disk block) 

但問題是,在開始你的緩存是空的 - 這樣的高速緩存被稱爲冷緩存。要利用緩存的好處,您需要填充一些值。它是如何發生的?當你在尋找一些你在inode緩存中看到的文件時。如果您在高速緩存中找不到inode(高速緩存未命中),則表示'好',並使用inode表讀取,解析和讀取文件本身來執行完整讀取循環。但是,在解析部分之後,您需要保存inode編號並在緩存中解析啓動磁盤塊。而且這種情況還在繼續 - 您嘗試讀取另一個文件,查看緩存,緩存未命中(緩存很冷),從磁盤讀取數據,在緩存中添加一行。

所以冷藏不會給你任何加速,因爲你仍然從磁盤讀取數據。在某些情況下,冷藏緩存會使系統變慢,因爲您正在做額外的工作(在表格中查找額外步驟)以預熱緩存。

經過一段時間後,您的緩存中會有一些值,並且有一段時間您嘗試讀取文件,則會在緩存和BAM中查找!你已經找到inode(緩存命中)!現在你已經開始磁盤塊了,所以你跳過了閱讀超級塊並開始閱讀文件本身!你剛剛節省了10毫秒!

將其緩存稱爲熱緩存 - 緩存中包含一些可讓您緩存命中的值。

+2

這很好解釋。非常感謝! –

25

enter image description here

背景:

Cache是一個小而快memory,有助於避免CPU訪問main memory(更大和更慢),以節省時間(cache讀取是~100 x快於從main memory讀取)。但是,這隻有在你的程序需要的數據爲cached(從main memory讀入cache)並且有效時纔有用。此外,cache會隨着時間的推移而填充數據。因此,cache可以是:
1.清空,或
2.可以包含無關數據,或
3.可以包含相關數據。現在


,你的問題:

冷緩存:cache爲空或有不相關的數據,從而使CPU需要爲你的程序的數據需求做從main memory慢讀。

熱緩存:cache包含相關數據,併爲你的程序中的所有讀取距離cache本身滿意。

所以,熱緩存是可取的,冷藏不是。

2

非常好的回覆@avd。

冷庫只是一個空白的緩存或一個陳舊的數據。

熱緩存另一方面,維護您的系統需要的有用數據。它可以幫助您實現更快的處理;大多數情況下它用於接近實時處理請求。有些系統/流程在開始迎合用戶請求之前需要特定的信息;例如在可以處理用戶請求之前需要市場數據/風險信息/安全信息等的交易平臺。如果每個請求都需要查詢數據庫/服務以獲取此重要信息,那麼這將非常耗時。所以緩存它是一個好主意。並且這可以通過熱緩存來實現。 這個緩存應該定期維護(更新/刪除等);否則在整個過程中,緩存可能會隨着不必要的數據增長,您可能會注意到性能下降。

要創建熱緩存,一種方法將是緩存的惰性羣體,我的意思是,當你得到請求時,你填充cahce;在這種情況下,最初的請求會很慢,但後來的請求會更快。另一種方法是在進程啓動時(或在用戶請求開始之前)加載數據,並維護高速緩存直到進程結束。