Linux工具效能調優系列二:buffer和cache

奇犽發表於2018-12-14

一,案例入門

我們來看一個例子,我們來看free輸出,free採集資料來源是:/proc/meminfo檔案,對於這個檔案,會貫穿這個系列。

root@szdc-calic-2-6:~# free              total        used        free      shared  buff/cache   availableMem:       32895096     1698396     8197904      307688    22998796    30343448Swap:      31250428      114992    31135436複製程式碼

從上面的輸出我們可以得到什麼呢?系統當前記憶體是否夠用?什麼是buffer,什麼是cache,當前可分配的記憶體還剩下多少?帶著這些問題,我們接著往下看。

二,cache和buffer

2.1 cache

2.1.1 定義

首先明確一點,在記憶體管理中,cache指的是:page cache。page cache即頁面快取記憶體,是針對檔案系統的,儲存的是檔案的檔案資料(檔案分為後設資料和檔案資料)。

2.1.2 哪些cache無法被回收

我們執行回收cache命令

[root@k8s-dbg-master-1 ~]# echo 3 >
/proc/sys/vm/drop_caches
[root@k8s-dbg-master-1 ~]# free -m total used free shared buff/cache availableMem: 32117 8622 720 16056 22773 949Swap: 16383 216 16167複製程式碼

從上面我們知道,即使我們執行清理cache命令,仍然有部分cache無法回收,這些無法回收的包括:tmpfs,共享記憶體,mmap申請標誌狀態為MAP_SHARED的記憶體。這塊不深入講解,有興趣的再去自己嘗試下。

2.2,buffer

2.2.1 定義

(1) 在記憶體管理中,buffer指的是:buffer cache。buffer cache是是塊裝置的讀寫緩衝區。我們繼續補充知識,作業系統是以塊的概念操作磁碟的,一個塊會包含一個或者多個扇區,但是不會超過一個頁面大小。

(2) buffers主要用於快取檔案系統中的後設資料資訊(dentries、inodes),和另外一些不是檔案資料的塊,例如metadata和raw block I/O,因此還是需要單獨用buffer cache來快取。

2.3 兩者之間的關係

在核心2.6以後,兩者結構進行統一,都是page cache,page中含有一個個的buffer結構,所以我們的free命令中,也將兩者進行統一。兩者是配合使用的,當我們對一個檔案進行寫操作時候,page cache的內容會被改變,而buffer cache則可以將page標記不同的緩衝區(buffer),並記錄哪個塊被修改,這樣,髒資料回寫時候,就不用回寫整個page,而只要回寫修改的塊。

三,案例分析

3.1 案例分析

我們將直接使用案例對cache進行分析,看看作業系統中會如何使用。事先準備一個大檔案,對大檔案進行讀操作。

(1) 手動清空cache

[root@k8s-dbg-master-1 ~]# echo 3 >
/proc/sys/vm/drop_caches
[root@k8s-dbg-master-1 ~]# cat /proc/meminfoMemTotal: 32887860 kBMemFree: 15764108 kBMemAvailable: 17081976 kBBuffers: 1792 kBCached: 1191456 kB複製程式碼

(2) 執行命令及結果

[root@k8s-dbg-master-1 ~]# cp hyperkube /tmp/hyperkube[root@k8s-dbg-master-1 ~]# cat /proc/meminfoMemTotal:       32887860 kBMemFree:        15240656 kBMemAvailable:   17092320 kBBuffers:           18016 kBCached:          1708088 kB複製程式碼

可以看到,cached和buffer都增多

四,問題

1,現在試著回答剛開始提出的問題:目前的系統記憶體情況是怎麼樣的

五,參考文獻

1,www.cnblogs.com/sparkdev/p/…

2,linuxperf.com/?p=142

來源:https://juejin.im/post/5c128b3ee51d455c573b9134

相關文章