這個介面包含了物理記憶體mem和交換分割槽swap的使用情況,其中包括以用記憶體、快取、可用記憶體等。其中快取是buffer和cache這兩部分的總和。
從字面意思理解,buffer和cache分別代表緩衝區和快取的意思,二者都是資料再記憶體中的臨時儲存。
buffers是核心緩衝區用到的記憶體,對應的是/proc/meminfo種得buffers值
cache是核心頁快取和slab用到的記憶體,對應的是/proc/meminfo種得cache與sreclaimable之和
buffers是對原始磁碟的臨時儲存,也就是用來快取磁碟的資料,通常不會特別大(20mb左右),這樣核心就可以把分散的寫集中起來,統一優化磁碟的寫入,比如可以把多次小的寫合併成單次大的寫
cached是從磁碟讀取檔案的頁快取,也就是用來快取從檔案讀取的資料,下次訪問這些檔案資料的時候,就可以從記憶體中快速的讀取,而不需要每次緩慢的從磁碟讀讀取。
sreclaimable 是 slab 的一部分。slab 包括兩部分,其中的可**部分,用 sreclaimable 記錄;而不可**部分,用 sunreclaim 記錄。
通過例項來理解buffers和cached
一台伺服器,分別都是1核2g
為了減少其他快取的影響,需要執行echo 3 > /proc/sys/vm/drop_caches
1、首先再乙個終端上執行vmstat命令
此處的buff和cache就是之前說到的buffers和cached,單位是kb
bi和bo分別表示裝置讀取和寫入的大小,單位是快/秒。因為linux中快的大小是1kb,所以這個單位也就等價於kb/s
系統再空閒的時候,這幾個值應該是不變的
再第二個終端執行命令:dd if=/dev/urandom of=/tmp/file bs=1m count=500
通過讀取隨機裝置,生產乙個500m的檔案
通過結果可以看出,buff基本沒怎麼變,但是cache卻有乙個明顯的下滑,再逐步上公升
再進行進一步分析發現,再cache剛開始變化的時候,bo依舊是0,一段時間之後,出現了大量塊裝置寫。然後再dd結束的時候,cache不在增長,多次i/o寫得結果加起來,才是dd要寫的500m資料
問題1:cache是從磁碟讀取檔案的頁快取,為什麼再寫入檔案的時候也會使用到它?
寫檔案的時候會用到cache快取資料,寫磁碟的時候會用到buffer來快取資料,所以,雖然cache是檔案讀的快取,但是實際上,cache也會快取寫檔案的資料。
磁碟和檔案讀案例
反過來看,磁碟、檔案讀取時是如何乙個表現
首先還是清空快取
echo 3 > /proc/sys/vm/drop_caches
執行檔案讀取命令
dd if=/tmp/file of=/dev/null
回到終端1觀察記憶體和i/o的變化
觀察vmstat時,發現在檔案讀取的開始時buff幾乎沒有變化,但是cache再不斷增加。bi寫入的大小也會在dd結束之後達到1g,這與之前說的「cache 是對檔案讀的頁快取」是一致的
總結:buffer是對磁碟資料的快取,而cache是對檔案資料的快取,他們既會用在讀請求中,也會用在寫請求中
Linux記憶體機制 Buffer和Cache
今天twitter上關於buffer和cache討論得蠻火的,被各種說話一攪和,有點亂了,就乾脆整理一下。首先從翻譯上,buffer應該翻譯為 緩衝 cache應該翻譯為 快取 兩個完全不是乙個東西。在硬體這一層看,buffer應該為記憶體,cache為cpu整合的告訴快取。buffer為了讓不同速...
linux記憶體中buffer和 cached的比較
經常遇到一些剛接觸linux的新手會問記憶體占用怎麼那麼多?在linux中經常發現空閒記憶體很少,似乎所有的記憶體都被系統占用了,表面感覺是記憶體不夠用了,其實不然。這是linux記憶體管理的乙個優秀特性,在這方面,區別於windows的記憶體管理。主要特點是,無論物理記憶體有多大,linux 都將...
linux 記憶體中Buffer和Cache的區別
具體怎麼理解?通過實驗發現,比較寫資料到檔案和寫資料到磁碟 比較從檔案中讀取資料和從磁碟中讀資料 實驗資料參考 簡單理解 buffer 是對磁碟資料的快取,而 cache 是檔案資料的快取。同學 geek 5258f8 的解答 理論上,乙個檔案讀首先到block buffer,然後到page cac...