为什么md resync不会导致iowait?

我已经知道%iowait的定义为

CPU花费怠速/阻塞的时间,因为它必须等待IO操作才能完成。

现在把一个简单的Linux系统与一个mdraid1和两个磁盘。 /proc/mdstat显示重新同步运行速度约为120MB / s,这接近于您对常规自旋SATA磁盘的期望。

所以在这种情况下,磁盘的速度是限制因素,因此从上面的定义我预计艾奥瓦几乎100%,因为这是在较短的时间内完成的过程。

但是情况并非如此:

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

没有任何iowait,空闲时间实际上暗示了resync可以更快,但只是决定它不想(这是不正确的)。

我误解了什么?

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

我猜测rsync是一个函数发生在md内核模块,因此实际上并没有一个进程/线程( task_struct )。 因此,runqueue中没有实际的linux进程在磁盘上等待(因为resync“job”不是一个实际的进程)。 由于调度程序将基于runqueue来报告iowait,因此iowait不会因此任务而增加。

如果你启动了一个真正想要使用这个磁盘的进程,它可能会因为这个重新同步工作而等待更多的磁盘,而你的服务器会上升。 (但是,重新同步可能有一个低优先级,所以这可能不会发生)。