linux buffer與cache區別

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,僅此而已。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章