文件系統緩存中的dirty_ratio與dirty_background_ratio參數

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

 

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

 

之前一直錯誤的一位dirty_ratio的觸發條件不可能達到,因爲每次肯定會先達到vm.dirty_background_ratio的條件,後來才知道自己理解錯了。確實是先達到vm.dirty_background_ratio的條件然後觸發flush進程進行異步的回寫操作,但是這一過程中應用進程仍然可以進行寫操作,如果多個應用進程寫入的量大於flush進程刷出的量那自然會達到vm.dirty_ratio這個參數所設定的坎,此時操作系統會轉入同步地處理髒頁的過程,阻塞應用進程。

 

 

 public static void adjustToLowSpeed(String processName){
        //sys.sysctl.dirty_background_ratio
        Slog.i(TAG, "adjustToLowSpeed for process:"+processName);
        SystemProperties.set("sys.sysctl.dirty_background_ratio", "1");
        SystemProperties.set("sys.sysctl.dirty_ratio", "3");
    }

 

修改跑emmc時容易出現system_server卡死的問題

alps/device/mediatek/mt6580 / init.mt6580.rc

on property:sys.sysctl.dirty_background_ratio=*
    write /proc/sys/vm/dirty_background_ratio ${sys.sysctl.dirty_background_ratio}

on property:sys.sysctl.dirty_ratio=*
    write /proc/sys/vm/dirty_ratio ${sys.sysctl.dirty_ratio}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章