pdflush进程详解

以下转自:http://blog.csdn.net/kofshower/article/details/7357968

大家知道,在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直到所有的脏页都已经写到磁盘为止。


以下转自:http://blog.csdn.net/fireroll/article/details/19155657

一、简介 
由于页高速缓存的缓存作用,写操作实际上会被延迟。
当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。
在内存中累积起来的脏页最终必须被写回磁盘。

在以下两种情况发生时,脏页被写回磁盘:
.  当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。 
.  当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,
   以确保脏页不会无限期地驻留在内存中。
 
上面两种工作的目的完全不同。
实际上,在老内核中,这是由两个独立的内核线程分别完成的。
但是在2.6内核中,由一群内核线程—pdflush后台回写例程—统一执行两种工作。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值