Linux記憶體buffer和cache的區別

2021-12-30 00:34:11 字數 2277 閱讀 3073

記憶體使用說明

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

[root@rac1 ~]# free

total used free shared buffers cached

mem: 1035108100898426124 0 124212 413000

-/+ buffers/cache: 471772 563336

swap: 2096472 842320 1254152

這裡顯示的單位是kb。

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

linux 記憶體機制

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 必會非常小

摘自 erdp技術架構

linux記憶體中buffer和 cached的比較

經常遇到一些剛接觸linux的新手會問記憶體占用怎麼那麼多?在linux中經常發現空閒記憶體很少,似乎所有的記憶體都被系統占用了,表面感覺是記憶體不夠用了,其實不然。這是linux記憶體管理的乙個優秀特性,在這方面,區別於windows的記憶體管理。主要特點是,無論物理記憶體有多大,linux 都將...

linux 記憶體中Buffer和Cache的區別

具體怎麼理解?通過實驗發現,比較寫資料到檔案和寫資料到磁碟 比較從檔案中讀取資料和從磁碟中讀資料 實驗資料參考 簡單理解 buffer 是對磁碟資料的快取,而 cache 是檔案資料的快取。同學 geek 5258f8 的解答 理論上,乙個檔案讀首先到block buffer,然後到page cac...

Linux記憶體機制 Buffer和Cache

今天twitter上關於buffer和cache討論得蠻火的,被各種說話一攪和,有點亂了,就乾脆整理一下。首先從翻譯上,buffer應該翻譯為 緩衝 cache應該翻譯為 快取 兩個完全不是乙個東西。在硬體這一層看,buffer應該為記憶體,cache為cpu整合的告訴快取。buffer為了讓不同速...