系统守护进程 fsflush 会定期运行来执行三个主要任务:
每次调用时,fsflush 都会将存在时间超过指定期限的脏文件系统页刷新到磁盘。
每次调用时,fsflush 都会检查内存的一部分,并促使已修改的页写入它们的后备存储。如果页已修改并且不符合以下某个条件,则会被写入:
页是内核页
页是空闲的
页被锁定
页与某个交换设备相关联
页当前参与了某个 I/O 操作
实际结果是将刷新文件中通过 mmap 以写权限映射的页以及已实际更改的页。
页将刷新到后备存储中,但是保持附加到使用它们的进程。这样,如果页自刷新以来未进行修改,可以通过避免在声明页之前延迟将页写入后备存储,因而当系统在内存不足情况下运行时,这将可以简化页回收。
fsflush 将文件系统元数据写入到磁盘。写入是在每个第 n 次调用时执行的,其中 n 是根据各种配置变量计算得出的。有关详细信息,请参见tune_t_fsflushr和autoup。
以下功能是可配置的:
调用频率 (tune_t_fsflushr)
是否执行内存扫描 (dopageflush)
是否进行文件系统数据刷新 (doiflush)
进行文件系统数据刷新的频率 (autoup)
对于大多数系统,内存扫描和文件系统元数据同步是 fsflush 的主要活动。根据系统使用情况,内存扫描可能只使用很少 CPU 时间,也可能会占用太多的 CPU 时间。