天天看點

Linux記憶體buffer和cache的差別

Linux記憶體buffer和cache的差別

一. 記憶體使用說明

free 指令相對于top 提供了更簡潔的檢視系統記憶體使用情況:

[root@rac1 ~]# free 

total used free shared buffers cached 

mem: 1035108 1008984 26124 0 124212 413000 

-/+ buffers/cache: 471772 563336 

swap: 2096472 842320 1254152 

這裡顯示的機關是kb。

在linux的記憶體配置設定機制中,優先使用實體記憶體,當實體記憶體還有空閑時(還夠用),不會釋放其占用記憶體,就算占用記憶體的程式已經被關閉了,該程式所占用的記憶體用來做緩存使用,對于開啟過的程式、或是讀取剛存取過得資料會比較快。有關linux記憶體機制參考:

linux 記憶體機制

http://blog.csdn.net/tianlesoftware/archive/2010/04/08/5463790.aspx

mem:表示實體記憶體統計。

-/+ buffers/cached:表示實體記憶體的緩存統計

swap:表示硬碟上交換分區的使用情況。隻有mem被目前程序實際占用完,即沒有了buffers和cache時,才會使用到swap。

mem 行(第一行)資料說明:

total:1035108kb。表示實體記憶體總大小。

used:1008984kb。表示總計配置設定給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存并未實際使用。

free:26124kb。表示未被配置設定的記憶體。

shared:0kb。共享記憶體,一般系統不會用到。

buffers:124212kb。系統配置設定但未被使用的buffers 數量。

cached:413000kb。系統配置設定但未被使用的cache 數量。

-/+ buffers/cache 行(第二行)資料說明:

used:471772kb,實際使用的buffers 與cache 總量,也是實際使用的記憶體總量。

free: 563336kb, 未被使用的buffers 與cache 和未被配置設定的記憶體之和,這就是系統目前實際可用記憶體。

根據以上分析,可以得出一下結論:

1. 實際可用記憶體大小:

free(-/+ buffers/cache行)= free(mem)+buffers(mem)+cached(mem);

563336 = 26124 + 124212+ 413000

2. 已經配置設定的記憶體大小:

used(mem) = used(-/+ buffers/cache)+ buffers(mem) + cached(mem)

1008984kb = 471772 + 124212 +413000

3. 實體記憶體總大小

total(mem) = used(-/+ buffers/cache) + free(-/+ buffers/cache)

1035108 = 471772 + 563336

二. 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.

2.1 cache

cache:高速緩存,是位于cpu與主記憶體間的一種容量較小但速度很高的存儲器。

由于cpu的速度遠高于主記憶體,cpu直接從記憶體中存取資料要等待一定時間周期,cache中儲存着cpu剛用過或循環使用的一部分資料,當cpu再次使用該部分資料時可從cache中直接調用,這樣就減少了cpu的等待時間,提高了系統的效率。

cache又分為一級cache(l1 cache)和二級cache(l2 cache),l1 cache內建在cpu内部,l2 cache早期一般是焊在主機闆上,現在也都內建在cpu内部,常見的容量有256kb或512kb l2 cache。

2.2 buffer

buffer:緩沖區,一個用于存儲速度不同步的裝置或優先級不同的裝置之間傳輸資料的區域。通過緩沖區,可以使程序之間的互相等待變少,進而使從速度慢的裝置讀入資料時,速度快的裝置的操作程序不發生間斷。

在free指令中顯示的buffer和cache,它們都是占用記憶體:

buffer : 作為buffer cache的記憶體,是塊裝置的讀寫緩沖區,更靠近儲存設備,或者直接就是disk的緩沖區。

cache: 作為page cache的記憶體, 檔案系統的cache,是memory的緩沖區

如果 cache 的值很大,說明cache住的檔案數很多。如果頻繁通路到的檔案都能被cache住,那麼磁盤的讀io 必會非常小。

本文作者:佚名

來源:51cto

繼續閱讀