標籤:something linux written 硬體 儲存空間
A buffer is something that has yet to be "written" to disk. A cache is something that has been "read" from the disk and stored for later use.
更詳細的解釋參考:Difference Between Buffer and Cache
cache 和 buffer的區別:
Cache:
1、快取硬體,是位於CPU與主記憶體間的一種容量較小但速度很高的儲存空間。由於CPU的速度遠高於主記憶體,CPU直接從記憶體中存取資料要等待一定時間周期,Cache中儲存著CPU剛用過或迴圈使用的一部分資料,當CPU再次使用該部分資料時可從Cache中直接調用,這樣就減少了CPU的等待時間,提高了系統的效率。
Cache並不是快取檔案的,而是緩衝塊的(塊是I/O讀寫最小的單元);Cache一般會用在I/O請求上,如果多個進程要訪問某個檔案,可以把此檔案讀入Cache中,這樣下一個進程擷取CPU控制權並訪問此檔案直接從Cache讀取,提高系統效能。
Cache又分為一級Cache(L1 Cache)和二級Cache(L2 Cache),L1 Cache整合在CPU內部,L2 Cache早期一般是焊在主板上,現在也都整合在CPU內部,常見的容量有256KB或512KB L2 Cache。
2、記憶體中的cache,如os管理的檔案系統cache。
Buffer:
緩衝區,只在記憶體中。一個用於儲存速度不同步的裝置或優先順序不同的裝置之間傳輸資料的地區。通過緩衝區,可以使進程之間的相互等待變少,從而使從速度慢的裝置讀入資料時,速度快的裝置的操作進程不發生間斷(不用等待,可以先去做其它事情,到一定程度再讀取buffer資料)。
Buffer一般是用在寫入磁碟的,例如:某個進程要求多個欄位被讀入,當所有要求的欄位被讀入之前已經讀入的欄位會先放到buffer中。
Free中的buffer和cache:
它們都是佔用系統記憶體的。
cache: 作為page cache的記憶體,是檔案系統的cache,是檔案的緩衝,在檔案層面上的資料會緩衝到page cache。檔案的邏輯層需要映射到實際的物理磁碟,這種映射關係由檔案系統來完成。當page cache的資料需要重新整理時,page cache中的資料交給buffer cache,但是這種處理在2.6版本的核心之後就變的很簡單了,沒有真正意義上的cache操作。
buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩衝區。Buffer cache是針對磁碟塊的緩衝,也就是在沒有檔案系統的情況下,直接對磁碟進行操作的資料會緩衝到buffer cache中,例如,檔案系統的中繼資料都會緩衝到buffer cache中。
在有檔案系統的情況下,對檔案操作,那麼資料會緩衝到page cache,如果直接採用dd等工具對磁碟進行讀寫,那麼資料會緩衝到buffer cache。
如果 cache 的值很大,說明cache住的檔案數很多。如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀IO 會非常小。
參考:http://bbs.chinaunix.net/archiver/tid-478109.htmlhttp://bbs.chinaunix.net/archiver/tid-478109.html
另:
說一下我的理解:
cache, 是用來加速讀取的一種方法。目的是加速讀取。物理上,有cpu管理的L1 cache, L2 cache (both data cache and instruction cache)和memory裡的cache (如os管理的檔案系統cache).
對於cache的訪問, 分為cache hit or cache miss. 通常cache越大, cache命中率就越高,訪問速度越快。訪問者不知道資料是否在cache中。
Buffer,僅指memory的地區, 軟體用來儲存特定的資訊。buffer按需分配,足夠儲存資料就行了,不求最大。軟體有合適的機制,知道資料在buffer裡。
補充一點,在檔案系統層每個裝置都會分配一個def_blk_ops的檔案操作方法,這是裝置的操作方法。在每個裝置的inode下面會存在一個radix tree,這個radix tree下面將會放置快取資料的page頁。這個page的數量將會在top程式的buffer一欄中顯示。
如果裝置做了檔案系統,那麼會產生一個inode,這個inode會分配ext3_ops之類的操作方法,這些方法是檔案系統的方法。在這個檔案系統inode下面同樣存在一個radix tree,這裡會快取檔案的page頁,快取頁面的數量在top程式的cache一欄進行統計。
從上面的分析可以看出,2.6核心中的buffer cache和page cache在處理上是保持一致的,但是存在概念上的差別,page cache針對檔案的cache,buffer是針對磁碟塊資料的cache,僅此而已。
linux buffer與cache區別