本文共 914 字,大约阅读时间需要 3 分钟。
大家知道,在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到磁盘上,在下面几种情况下,系统会唤醒pdflush回写脏页。
定时机制定时唤醒pdflush内核线程,周期为/proc/sys/vm/dirty_writeback_centisecs ,单位是(1/100)秒,默认值500(5秒)。每次周期性唤醒的pdflush线程并不是回写所有的脏页,而是只回写变脏时间超过/proc/sys/vm/dirty_expire_centisecs(单位也是1/100秒),默认值3000(30秒)。
注意:变脏的时间是以文件的inode节点变脏的时间为基准的,也就是说如果某个inode节点是10秒前变脏的,pdflush就认为这个inode对应的所有脏页的变脏时间都是10秒前,即使可能部分页面真正变脏的时间不到10秒,细节可以查看内核函数wb_kupdate()。
这时并不将所有的dirty页写到磁盘,而是每次写大概1024个页面,直到空闲页面满足需求为止。
这是系统会唤醒pdflush直到所有的脏页都已经写到磁盘为止。
转载自:http://blog.csdn.net/kofshower/article/details/7357968