pdflush的工作原理

  • Post author:
  • Post category:其他


大家知道,在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,

而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上,在下面几种情况下,

系统会唤醒pdflush回写脏页:

1 、定时方式:

定时机制定时唤醒pdflush内核线程,周期为/proc/sys/vm/dirty_writeback_centisecs ,单位

是(1/100)秒,每次周期性唤醒的pdflush线程并不是回写所有的脏页,而是只回写变脏时间超过

/proc/sys/vm/dirty_expire_centisecs(单位也是1/100秒)。

注意:变脏的时间是以文件的inode节点变脏的时间为基准的,也就是说如果某个inode节点是10秒前变脏的,

pdflush就认为这个inode对应的所有脏页的变脏时间都是10秒前,即使可能部分页面真正变脏的时间不到10秒,

细节可以查看内核函数wb_kupdate()。

2、 内存不足的时候:

这时并不将所有的dirty页写到磁盘,而是每次写大概1024个页面,直到空闲页面满足需求为止。

3 、写操作时发现脏页超过一定比例:

当脏页占系统内存的比例超过/proc/sys/vm/dirty_background_ratio 的时候,write系统调用会唤醒

pdflush回写dirty page,直到脏页比例低于/proc/sys/vm/dirty_background_ratio,但write系统调

用不会被阻塞,立即返回。当脏页占系统内存的比例超过/proc/sys/vm/dirty_ratio的时候, write系

统调用会被被阻塞,主动回写dirty page,直到脏页比例低于/proc/sys/vm/dirty_ratio,这一点在

2.4内核中是没有的。

4 、用户调用sync系统调用:

这是系统会唤醒pdflush直到所有的脏页都已经写到磁盘为止。



版权声明:本文为kofshower原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。