1. 程式人生 > >Linux Free/Top中的 Buffers and Cached

Linux Free/Top中的 Buffers and Cached

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.

buffer是由各種程序分配的,被用在如輸入佇列等方面,一個簡單的例子如某個程序要求有多個欄位讀入,在所有欄位被讀入完整之前,程序把先前讀入的欄位放在buffer中儲存。
cache經常被用在磁碟的I/O請求上,如果有多個程序都要訪問某個檔案,於是該檔案便被做成cache以方便下次被訪問,這樣可提供系統性能。

Free中的buffer和cache:(它們都是佔用記憶體):
buffer : 作為buffer cache

的記憶體,是塊裝置的讀寫緩衝區
cache: 作為page cache的記憶體, 檔案系統的cache

page cache是針對檔案系統而言的,是對檔案資料的快取;buffer cache是對裝置資料的快取。兩者在實現上差別不是很大,都是採用radix樹進行管理.

Page cache實際上是針對檔案系統的,是檔案的快取,在檔案層面上的資料會快取到page cache。檔案的邏輯層需要對映到實際的物理磁碟,這種對映關係由檔案系統來完成。當page cache的資料需要重新整理時,page cache中的資料交給buffer cache,但是這種處理在2.6版本的核心之後就變的很簡單了,沒有真正意義上的cache操作。
Buffer cache是針對磁碟塊的快取,也就是在沒有檔案系統的情況下,直接對磁碟進行操作的資料會快取到buffer cache中,例如,檔案系統的元資料都會快取到buffer cache中。
簡單說來,page cache用來快取檔案資料,buffer cache用來快取磁碟資料。在有檔案系統的情況下,對檔案操作,那麼資料會快取到page cache,如果直接採用dd等工具對磁碟進行讀寫,那麼資料會快取到buffer cache。

 

手工釋放linux記憶體——/proc/sys/vm/drop_caches  default 0
sync
echo 3 > /proc/sys/vm/drop_caches       #
free buffers + cached

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;


linux I/O優化 磁碟讀寫引數設定
ls /proc/sys/vm

 

pdflush執行緒
1. 當空閒的記憶體低於一個特定的閾值時,核心必須將髒頁寫回磁碟,以便釋放記憶體。
2. 當髒頁在記憶體中駐留時間超過一個特定的閾值時,核心必須將超時的髒頁寫回磁碟,以確保髒頁不會無限期地駐留在記憶體。

變數 描述
dirty_expire_centisecs 該數值以百分之一秒為單位,它描述超時多久的資料將被週期性執行的pdflush執行緒寫出
dirty_ratio 佔全部記憶體百分比,當一個程序產生的髒頁達到這個比例時,就開始被寫出
dirty_writeback_centisecs 該數值以百分之一秒為單位,它描述pdflush執行緒的執行頻率
laptop_mode 一個布林值,用於控制膝上型電腦模式
dirty_background_ratio 佔全部記憶體的百分比。當記憶體中空閒頁到達這個比例時,pdflush執行緒開始回寫髒頁


Reference:
http://www.linuxany.com/archives/814.html
http://digdeeply.org/archives/02201800.html

http://www.cnitblog.com/xijia0524/archive/2013/05/21/87502.html
http://chinaapp.sinaapp.com/thread-2534-1-1.html
dirty_background_ratio
http://blog.csdn.net/qinzhonghello/article/details/3739586
http://www.cyberciti.biz/faq/linux-kernel-tuning-virtual-memory-subsystem/