Linux記憶體中Page cache和buffer cache的區別

時間 2021-09-01 13:33:07

1樓:七彩虹科技****

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

free中看到的buffer和cache:(它們都是佔用記憶體):

buffer: 作為buffer cache的記憶體 ,是塊 裝置的讀寫緩衝區

cache: 作為page cache的記憶體, 檔案系統的cache

如果cache 的值很大,說明cache住的檔案數很多。如果頻繁訪問到的檔案都能被cache住,那麼磁碟的讀io bi會非常小。

buffer和cache的區別

快取(cached)是把讀取過的資料 儲存起來,重新讀取時若命中(找到需要的資料)就不要去讀硬碟了,若沒有命中就讀硬碟。其中的資料會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。

緩衝(buffers)是根據磁碟的讀寫 設計的,把分散的寫操作集中進行,減少磁碟碎片和硬碟的反覆尋道,從而提高系統效能。

2樓:千鋒教育

細心的朋友會注意到,當你在linux下頻繁存取檔案後,實體記憶體會很快被用光,當程式結束後,記憶體不會被正常釋放,而是一直作為caching.這個問題,貌似有不少人在問,不過都沒有看到有什麼很好解決的辦法.那麼我來談談這個問題.

先來說說free命令

[root@server ~]# free -m

total used free shared buffers cached

mem: 249 163 86 0 10 94

-/+ buffers/cache: 58 191

swap: 511 0 511

其中:total 記憶體總數

used 已經使用的記憶體數

free 空閒的記憶體數

shared 多個程序共享的記憶體總額

buffers buffer cache和cached page cache 磁碟快取的大小

-buffers/cache 的記憶體數:used - buffers - cached

+buffers/cache 的記憶體數:free + buffers + cached

可用的memory=free memory+buffers+cached

有了這個基礎後,可以得知,我現在used為163mb,free為86,buffer和cached分別為10,94

那麼我們來看看,如果我執行復制檔案,記憶體會發生什麼變化.

[root@server ~]# cp -r /etc ~/test/

[root@server ~]# free -m

total used free shared buffers cached

mem: 249 244 4 0 8 174

-/+ buffers/cache: 62 187

swap: 511 0 511

在我命令執行結束後,used為244mb,free為4mb,buffers為8mb,cached為174mb,天吶都被cached吃掉了.別緊張,這是為了提高檔案讀取效率的做法.

為了提高磁碟存取效率, linux做了一些精心的設計, 除了對dentry進行快取(用於vfs,加速檔案路徑名到inode的轉換), 還採取了兩種主要cache方式:buffer cache和page cache。前者針對磁碟塊的讀寫,後者針對檔案inode的讀寫。

這些cache有效縮短了 i/o系統呼叫(比如read,write,getdents)的時間。"

那麼有人說過段時間,linux會自動釋放掉所用的記憶體,我們使用free再來試試,看看是否有釋放》?

[root@server test]# free -m

total used free shared buffers cached

mem: 249 244 5 0 8 174

-/+ buffers/cache: 61 188

swap: 511 0 511

ms沒有任何變化,那麼我能否手動釋放掉這些記憶體呢???回答是可以的!

/proc是一個虛擬檔案系統,我們可以通過對它的讀寫操作做為與kernel實體間進行通訊的一種手段.也就是說可以通過修改/proc中的檔案,來對當前kernel的行為做出調整.那麼我們可以通過調整/proc/sys/vm/drop_caches來釋放記憶體.

操作如下:

[root@server test]# cat /proc/sys/vm/drop_caches

0首先,/proc/sys/vm/drop_caches的值,預設為0

[root@server test]# sync

手動執行sync命令(描述:sync 命令執行 sync 子例程。如果必須停止系統,則執行 sync 命令以確保檔案系統的完整性。

sync 命令將所有未寫的系統緩衝區寫到磁碟中,包含已修改的 i-node、已延遲的塊 i/o 和讀寫對映檔案)

[root@server test]# echo 3 > /proc/sys/vm/drop_caches

[root@server test]# cat /proc/sys/vm/drop_caches

3將/proc/sys/vm/drop_caches值設為3

[root@server test]# free -m

total used free shared buffers cached

mem: 249 66 182 0 0 11

-/+ buffers/cache: 55 194

swap: 511 0 511

再來執行free命令,發現現在的used為66mb,free為182mb,buffers為0mb,cached為11mb.那麼有效的釋放了buffer和cache.

有關/proc/sys/vm/drop_caches的用法在下面進行了說明

linux中的tar命令,Linux中tar的命令

可以看看tar的man頁,上面說得很清楚了 看英文的man頁,中文的已經過時了,好多地方不對 對於tar命令,x表示解包 不是解壓縮 v表示顯示詳細過程,f表示使用檔案 緊跟它的一定是空格加檔名 z表示先解壓gzip格式的壓縮檔案 現在這個選項已經不是必須的了 一般來說,linux命令的選項不分順序...

linux共享記憶體和mmap的區別

記憶體對映檔案與虛擬記憶體有些類似,通過記憶體對映檔案可以保留一個地址空間的區域,同時將物理儲存器提交給此區域,只是記憶體檔案對映的物理儲存器來自一個已經存在於磁碟上的檔案,而非系統的頁檔案,而且在對該檔案進行操作之前必須首先對檔案進行對映,就如同將整個檔案從磁碟載入到記憶體。由此可以看出,使用記憶...

linux中的雙引號的作用,Linux中的雙引號的作用

在linux中雙引號可以取消分隔符的轉義,空格算不算?能不能舉個例子?還有,find home tmp name atime 10 ok rm f 對於這條shell語句中的 不是說雙引號取消萬用字元的作用嗎,那麼它不就成了尋找 這個檔案了嗎?雙引號裡可以套變數,單引號裡不能套變數。linux的三中...