调整 Linux I/O 调度程序

调整 Linux I/O 调度程序

我需要一些帮助来正确调整旋转驱动器的 Linux I/O 调度程序。

我有一个进程将数据写入一个巨大的(4-16TB)内存映射文件并使用 SHED_FIFO。然后,内核根据一些对我来说未知的启发自动将脏页刷新到文件中。写入数据的过程是实时且任务关键的,因此批量磁盘写入必须优先于读取。

我还有其他几个进程通过内存映射从文件中读取数据,这些进程不是关键任务。如果磁盘无法跟上写入和读取,它应该尽可能快地执行读取,而不会影响写入,以免机器耗尽内存。

现在查看不同的 I/O 调度程序,我发现了以下行为:

  • Deadline:读优先级高于写
  • cfq:读和写优先级相同

优先写入优先于读取的调度程序似乎不存在。

现在我最初的想法是使用“cfq”调度程序,然后在读取进程上使用具有高值的“ionic”,我认为理论上应该允许内核始终正确地清除脏页?

这真的有效吗?有没有更好的办法?

编辑:

看着“关于 Linux 页面缓存和 pdflush 的概念”似乎可以使用截止日期调度程序的一些设置:

我们正在尝试以下操作:

  • writes_starved: 2 (默认) => 1
  • write_expire: 5000 (默认) => 500
  • read_expire: 500 (默认) => 5000

这听起来合理吗?

答案1

伊奥尼斯允许更改每个进程的优先级。据我了解,您有一些写入的进程和一些读取的进程。手册页说它适用于 CFQ 调度程序。

相关内容