I/O 调度中的前端合并是什么?如何调整此参数?

What are front merges in I/O scheduling and how can I tune this parameter?

我的 Linux 使用 Deadline 算法进行 I/O 调度。其中一个参数是/sys/block/sda/queue/iosched/front_merges下的front_merges参数。默认情况下它设置为 1,这意味着可能会发生前端合并。如果不希望发生前端合并,可以将其设置为 0 以获得性能提升。

  1. 前端合并到底是什么?有人可以描绘一下吗?
  2. 我如何知道或测试我的系统上是否发生前端合并?

例如,当您正在阅读文件时,您会从头到尾阅读。因此,将请求合并到相同或相邻的块是有益的。这称为反向合并,因为较新的请求被添加到现有请求的后面。这始终通过截止日期调度程序启用。

不太常见的情况是您以相反的顺序读取块并在现有请求之前添加一个较新的请求。

两者都会产生检查合并是否合适的开销。通过反向合并,它会有所回报,而通过前端合并,它更多地取决于您的工作量。

除了修改和重新编译内核之外,我不知道有什么方法可以对此进行分析。有趣的是,直到 at least RHEL 5.2, front_merges was turned off by default. In more recent RHEL versions 它现在默认打开。我就这样吧。