学会文件缓存回写的过程

嵌入式技术

1371人已加入

描述

  1 文件缓存回写的时机

  (1)周期性回写,周期为dirty_writeback_interval,默认5s;

  (2)块设备首次出现脏数据;

  (3)脏页达到限额,包括dirty_bytes、dirty_background_bytes、dirty_ratio、dirty_background_ratio;

  (4)剩余内存过少,唤醒所有回写线程;

  (5)syscall sync,唤醒所有回写线程;

  (6)syscall syncfs,同步一个超级快对应的文件系统;

  (7)syscall fsync/fdatasync,同步某个文件

  (8)laptop模式,完成blk io request之后,启动laptop_mode_wb_timer;

  2 回写流程

  回写技术

  3 dirty_writeback_interval与dirty_expire_interval

  dirty_writeback_interval是回写线程的循环周期,当然,循环的前提是块设备存在脏数据;

  dirty_expire_interval是脏数据的超时时间,超过这个时间的脏数据将会马上放入回写队列,但是这个模式只有一条路径,启用的writeback_work是for_kupdate模式,目前看这条路径只有在周期性回写最后创建一个此类work检查超时脏数据;

  周期性回写的流程如下:

  bdi_writeback_workfn

  --》 wb_do_writeback

  --》 wb_writeback

  --》 wb_check_old_data_flush

  --》 for_kupdate模式wb_writeback

  --》 wb_check_background_flush

  --》 for_background模式wb_writeback

  for_kupdate模式只回写dirty_expire_interval之前的脏数据;

  for_background模式回写当前所有脏数据;

  从此流程来看,dirty_expire_interval的作用不大,只是作为一种可选模式。

  4 系统掉电时最长丢失多少脏数据

  从回写周期来看,无论是块设备首先脏数据还是回写线程的循环周期,都是间隔dirty_writeback_interval,它的默认值是5s。但是由于写脏数据的过程并不在这个间隔时间内,所以丢失的数据可能长于5s。

  而脏数据的回写采取FIFO的策略,所以最老的数据也不会停留很久,所以这个最长时间可以理解为略大于5s.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分