参考3.4内核文档
pdflush是Linux 内核的数据同步机制,系统通常会有多个pdflush内核线程存在,当前没有研究内核线程的数目是由什么决定的。
系统内脏页积累到一定程度,或者系统需要释放脏页占用的内存时,需要把脏页中的数据写回磁盘,这个写回机制由内核线程pdflush实现。
pdflush受多个控制参数控制,分别是:
dirty_background_bytes
dirty_background_ratio
dirty_bytes
dirty_expire_centisecs
dirty_ratio
dirty_writeback_centisecs
dirty_background_bytes
这个内核参数保存bdflush开始进行回写的最大脏内存数目,注意和dirty_background_bytes相对应的一个参数是
dirty_background_ratio。在某个时间点,二者仅有一个会起作用。当我们修改了二者中任意一个值时,那么系统就会把另外一个参数设置为0
dirty_background_ratio
内存数目的百分比,当脏页的数目达到这个百分比后,系统调用pdflush写回脏数据
dirty_bytes
和dirty_background_bytes不同,dirty_bytes保存的一个进程对应的脏数据数目阈值,当达到这个阈值时,系统会启动pdflush
和dirty_bytes对应的是dirty_ratio,在某个时间点,二者仅有一个会起作用。当我们修改了二者中任意一个值后,系统会把另外一个参数设置为0
dirty_pages允许的最小值是两个pages,任何小于这个值得设置,都不会起作用。
dirty_ratio
定义了进程脏页所占系统内存的百分比值,当一个进程脏页达到这个百分比值后,启动pdflush写回脏页。
dirty_expire_centisecs
脏页并不是一定会被pdflush写回磁盘,只有那些变脏时间超过一定限制的页,才会在bdflush下次醒来后写回磁盘。dirty_expire_centisecs就是这个expire时间
dirty_writeback_centisecs
pdflush不仅在系统脏页达到一定阈值dirty_background_bytes, dirty_background_ratio, dirty_bytes, dirty_ratio时启动,而且系统还会周期性的唤醒pdflush,这样可以确保在脏页面很少的情况下,那些很老的数据可以被及时写回磁盘。