ext4 jbd2 和 I/O 优先级

ext4 jbd2 和 I/O 优先级

我想删除一个包含超过 600 万个文件、4000 多个目录、总共约 26GB 数据的巨大目录。我知道这需要一段时间,因此我常常ionice将 I/O 优先级设置为空闲,这样我就可以在删除文件时继续执行其他任务。

time ionice -c3 rm -vrf /tmp/huge-folder

然而,我的整个桌面环境现在仍然非常缓慢,Google Chrome 需要很长时间才能打开新选项卡和加载页面,有时甚至需要一段时间才能打开新的 xterm 窗口。总之:我似乎没有获得降低进程 I/O 优先级的任何好处rm

检查情况iotop表明,一些 I/O 时间花费在rm具有idle我想要的 I/O 优先级的进程中:

rm 上的 I/O

但有时 I/O 时间花费在 ext4 的日志进程和软件 raid 进程中:

jbd2 和 raid 上的 I/O

请注意它们如何使用自己的默认 I/O 优先级,这可能是问题的原因。 jbd2甚至以优先级运行be/3,这实际上比be/4我所有其他桌面进程的默认优先级更高。

许多其他问题询问并回答它jbd2是什么以及为什么它消耗 I/O 时间,这不是我想知道的。我的问题是:有没有办法真正获得这种特定场景下的空闲I/O调度优先级?显然,申请ionicejbd2一个疯狂的想法。

进一步的设置信息:这是在带有 3 个旋转磁盘的软件 raid10 之上的 ext4 文件系统上。 ext4 使用默认选项进行格式化和安装(Debian 默认值,以防有所不同)。

答案1

自从我问这个问题以来,我学到了更多关于 Linux 内核中 I/O 如何工作的知识,我得出的结论是,它ionice不适用于大多数写操作。

读取操作大多是同步的,并且可以很容易地确定优先级。想必这对于写操作来说要困难得多,因为写操作通常会延迟到稍后的时间(因此是异步的),以便进行优化、聚合等。我可以想象,沿着这种方式传输和正确聚合美好信息并不容易。

来源:关于Linux ionice的一些笔记。请注意,该来源还提到它ionice不适用于 LVM 或软件 RAID,但我怀疑这是否仍然正确(该博客文章有点过时)。

另请参阅:ionice 对未同步的写入(即正常写入)没有任何影响吗?

相关内容