文件系统缓存中的dirty_ratio与dirty_background_ratio参数

本文详细解析了Linux系统中vm.dirty_background_ratio和vm.dirty_ratio参数的作用,前者用于触发后台异步回写进程,后者则在脏页积累过多时迫使系统同步处理,期间可能阻塞应用程序。文章还介绍了如何调整这两个参数以优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值