1. 程式人生 > >如何更改操作系統文件緩存刷新策略?

如何更改操作系統文件緩存刷新策略?

dirty_ratio 系統緩存策略

環境說明

以下針對linux操作系統,在centos/RHEL 6、centos/RHEL 7上測試有效。

相關參數

和文件系統寫緩存策略相關的主要是下面兩個參數,其它相關參考可自行谷歌:

/proc/sys/vm/dirty_ratio

文件系統寫緩沖區的大小,單位是百分比,表示系統內存的百分比,表示當寫緩沖使用到系統內存多少的時候,開始向磁盤寫出數據。增大之會使用更多系統內存用於磁盤寫緩沖,也可以極大提高系統的寫性能。但是,當需要持續、恒定的寫入時,應該降低其數值。

/proc/sys/vm/dirty_background_ratio

控制 pdflush 進程在何時刷新磁盤。單位是百分比,表示系統內存的百分比,意思是當寫緩沖使用到系統內存多少的時候, pdflush 開始向磁盤寫出數據。增大之會使用更多系統內存用於磁盤寫緩沖,也可以極大提高系統的寫性能。但是,當需要持續、恒定的寫入場合時,應該降低其數值。

對比說明

vm.dirty_background_ratio: 這個參數指定了當文件系統緩存臟頁數量達到系統內存百分之多少時(如5%)就會觸發pdflush/flush/kdmflush等後臺回寫進程運行,將一定緩存的臟頁異步地刷入外存;

vm.dirty_ratio: 而這個參數則指定了當文件系統緩存臟頁數量達到系統內存百分之多少時(如10%),系統不得不開始處理緩存臟頁(因為此時臟頁數量已經比較多,為了避免數據丟失需要將一定臟頁刷入外存);在此過程中很多應用進程可能會因為系統轉而處理文件IO而阻塞。

正常都是先達到vm.dirty_background_ratio的條件然後觸發flush進程進行異步的回寫操作,但是這一過程中應用進程仍然可以進行寫操作,如果多個應用進程寫入的量大於flush進程刷出的量那自然會達到vm.dirty_ratio這個參數所設定的坎,此時操作系統會轉入同步地處理臟頁的過程,阻塞應用進程。

也就是說,正常vm.dirty_background_ratio < vm.dirty_ratio才有意義。

在經常有大量寫入操作的系統中,應該分別調低這兩個參數的值,加快數據刷盤的頻率,從而避免因系統同步處理文件IO而導致相關進程處於D狀態。

參數修改方法

臨時生效方法(重啟後失效):

echo 5 >/proc/sys/vm/dirty_background_ratio
echo 10 >/proc/sys/vm/dirty_ratio

或者

sysctl -w vm.dirty_background_ratio=5
sysctl -w vm.dirty_ratio=10

永久生效方法:

echo "vm.dirty_background_ratio = 5" >> /etc/sysctl.conf
echo "vm.dirty_ratio = 10" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

參考:
http://blog.sina.com.cn/s/blog_448574810101k1va.html

如何更改操作系統文件緩存刷新策略?