为什么 md resync 不会导致 iowait?

为什么 md resync 不会导致 iowait?

%iowait我知道

CPU 空闲/阻塞的时间,因为它必须等待 IO 操作完成。

现在采用带有 mdraid1 和两个磁盘的简单 Linux 系统。 /proc/mdstat显示重新同步以大约 120MB/s 的速度运行,这接近您对常规旋转 SATA 磁盘的预期速度。

因此,在这种情况下,磁盘速度是限制因素,因此根据上述定义,我预计 iowait 接近 100%,因为这正是阻止该过程在更短时间内完成的原因。

但事实并非如此:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,51    0,00    5,64    0,00    0,00   93,85

根本没有 iowait,空闲时间实际上告诉我重新同步可以更快,但只是决定它不想这样做(这不是真的)。

我误解了什么?

答案1

我的假设是,因为它不是一个正确的过程(而是由内核模块完成的),所以它没有出现。

我猜想 rsync 是md内核模块内发生的一个函数,因此实际上没有进程/线程 ( task_struct)。 因此,运行队列中没有实际的 Linux 进程在磁盘上等待(因为重新同步“作业”不是实际进程)。 由于调度程序将根据运行队列报告 iowait,因此此任务不会增加 iowait。

如果您启动了一个实际的进程,并且该进程需要大量使用磁盘,那么由于此重新同步作业,该进程可能会在磁盘上等待更多时间,并且您的 iowait 值会上升。(但是,重新同步的优先级可能较低,因此这种情况可能仍不会发生)。

相关内容