天天看點

buffer和cache的差別

# free                  total       used       free     shared    buffers     cached     Mem:        255988     231704      24284          0       6432     139292     -/+ buffers/cache:      85980     170008     Swap:       746980          0     746980      

Mem:表示實體記憶體統計 

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

Swap:表示硬碟上交換分區的使用情況,這裡我們不去關心。

系統的總實體記憶體:255988Kb(256M),但系統目前真正可用的記憶體并不是第一行free 标記的 24284Kb,它僅代表未被配置設定的記憶體。

我們使用total1、used1、free1、used2、free2 等名稱來代表上面統計資料的各值,1、2 分别代表第一行和第二行的資料。

total1:表示實體記憶體總量。 

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

free1:未被配置設定的記憶體。 

shared1:共享記憶體,一般系統不會用到,這裡也不讨論。 

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

cached1:系統配置設定但未被使用的cache 數量。buffer 與cache 的差別見後面。 

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

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

可以整理出如下等式:

total1 = used1 + free1

total1 = used2 + free2

used1 = buffers1 + cached1 + used2

free2 = buffers1 + cached1 + free1

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.

兩者都是RAM中的資料。簡單來說,buffer是即将要被寫入磁盤的,cache是被從磁盤中讀出來的。

buffer是由各種程序配置設定的,被用在如輸入隊列等方面,一個簡單的例子如某個程序要求有多個字段讀入,在所有字段被讀入完整之前,程序把先前讀入的字段放在buffer中儲存。

cache經常被用在磁盤的I/O請求上,如果有多個程序都要通路某個檔案,于是該檔案便被做成cache以友善下次被通路,這樣可提供系統性能。

buffer是加快寫操作,cache是加快讀操作。