歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux頁緩存簡介

Linux頁緩存簡介

日期:2017/2/28 16:15:15   编辑:Linux教程

為了提高讀寫文件速度,linux系統采用一種頁緩存機制。當應用程序調用read,write等函數讀寫文件時,系統並不立即與硬盤

進行操作,而是查看需要讀取的數據是否已在頁緩存中,如不在,則從硬盤讀取。當寫入時,只是將數據寫入至頁緩存,然後

使用系統進程pdflush根據一定算法寫入至硬盤,算法細節文章後部分會進行一個簡單介紹。

系統當前頁緩存大小等數據可以查看/proc/meminfo文件,下面是一個簡單例子

[root@unimas_ses ]# cat /proc/meminfo
Cached: 1094972 kB
Dirty: 20484 kB
Writeback: 0 kB

為了閱讀方便,很多與本文章內容不相關信息去除了。

Cached:當前頁緩存大小

Dirty:頁緩存中等待被寫入硬盤數據大小

Writeback:正在寫入硬盤數據大小,這個值一般為0,沒辦法,硬盤寫入速度太快了。。。。

頁緩存簡單介紹完畢,下面就介紹刷新頁緩存的pdflush進程了。系統裡只能有2~8個pdflush進程,當前pdflush進程個數可以通過/proc/sys/vm/nr_pdflush_threads 查看。當系統內全部pdflush進程繁忙超過1秒後,系統會啟動一新pdflush進程。當超過一秒後,系統當前全部pdflush進程空閒時,系統會殺死一個pdflush進程。

系統有一些可控參數影響pdflush進程行為:

/proc/sys/vm/dirty_writeback_centisecs :默認為500(單位百分之一秒),間隔多長時間喚醒pdflush進程進行工作。

但修改該配置文件一般不會對具體喚醒時間有影響,內核算法本身在根據系統實際情況進行控制。

/proc/sys/vm/dirty_expire_centiseconds :默認為3000(單位百分之一秒),數據在頁緩存最長多久才會超時,刷入硬盤中。值得注意的是,默認時間為30秒,這說明一般情況下,數據會在頁緩存30秒後,才會真正寫入硬盤。

/proc/sys/vm/dirty_background_ratio :默認為10或者5(單位百分比),多少比例的Dirty數據在系統空閒內存中,才會刷入至硬盤。系統空閒內存計算方法=Cached+Memfree-Mapped.(這三個數據都是/proc/meminfo內)。

總結下來:系統刷新頁緩存正常下只有2種情況,1:數據放入頁緩存超過時限。2:頁緩存中待寫入數據大小已到達上線。

還有一種極端情況,當系統dirty數據大小大於等於/proc/sys/vm/dirty_ratio(默認為40%)時,write操作會堵塞,直至所有dirt寫入至文件。可以通過dd if=/dev/zero of=hog模擬這種情況。

Copyright © Linux教程網 All Rights Reserved