記憶體中的Buffer和Cache

2022-07-02 12:24:08 字數 1867 閱讀 8512

這個介面包含了物理記憶體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...