前幾天看到有些伙伴傻傻分不清楚buffer與cache的用處,后來發現我也不能很清楚的說出來buffer與cache在不同的地方有什么不同之處,這里就總結了一些關于buffer于cache的區別,如有不完善的地方,請大家指出來。
說到buffer與cache,那就不得不來說說free命令了,先來看一下free命令的執行結果:
當我執行了復制的命令后,我們再來看一看內存的變化情況:
執行結束后cached暴增到了218,這是為了提高磁盤存取效率, Linux做了一些精心的設計, 除了對dentry進行緩存(用于VFS,加速文件路徑名到inode的轉換), 還采取了兩種主要Cache方式:Buffer Cache和Page Cache。前者針對磁盤塊的讀寫,后者針對文件inode的讀寫。這些Cache有效縮短了 I/O系統調用(比如read,write,getdents)的時間。”
有些人說過一段時間,系統就會自動釋放這一部分cached,可是結果并不是這樣的, 在過了一段時間之后,cached依然居高不下,在收集了一些大牛的資料之后,我總結了一些小技巧:
我們可以通過手動來清除緩存,在/下有個proc的文件,/proc是一個虛擬文件系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通信的一種手段.也就是說可以通過修改/proc中的文件,來對當前kernel的行為做出調整.那么我們可以通過調整/proc/sys/vm/drop_caches來釋放內存.操作如下:
/proc/sys/vm/drop_caches的值,默認為0
手動執行sync命令(描述:sync 命令運行 sync 子例程。如果必須停止系統,則運行 sync 命令以確保文件系統的完整性。sync 命令將所有未寫的系統緩沖區寫到磁盤中,包含已修改的 i-node、已延遲的塊 I/O 和讀寫映射文件)
將/proc/sys/vm/drop_caches值設為3
再來運行free命令,發現現在的cached變成 49M了。
看來這個手動清除的方法還是很有效的
有關/proc/sys/vm/drop_caches的用法在下面進行了說明
/proc/sys/vm/drop_caches (since Linux 2.6.16)
Writing to this file causes the kernel to drop clean caches,
dentries and inodes from memory, causing that memory to become free.
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
To free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
To free pagecache, dentries and inodes, use echo 3 >
/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects
are not freeable, the user should run sync(8) first.
查了一些英文資料,對于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.
cache 和 buffer的區別:
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。
Buffer:緩沖區,一個用于存儲速度不同步的設備或優先級不同的設備之間傳輸數據的區域。通過緩沖區,可以使進程之間的相互等待變少,從而使從速度慢的設備讀入數據時,速度快的 設備的操作進程不發生間斷。
Free中的buffer和cache:(它們都是占用內存):
buffer : 作為buffer cache的內存,是塊設備的讀寫緩沖區
cache: 作為page cache的內存, 文件系統的cache
如果 cache 的值很大,說明cache住的文件數很多。如果頻繁訪問到的文件都能被cache住,那么磁盤的讀I/O 比會非常小。
原創文章,作者:jk,如若轉載,請注明出處:http://www.www58058.com/81653
有意思的總結,可見是真正遇到了這個問題,也真正思考了,贊~~繼續加油~