![为什么 md resync 不会导致 iowait?](https://linux22.com/image/612153/%E4%B8%BA%E4%BB%80%E4%B9%88%20md%20resync%20%E4%B8%8D%E4%BC%9A%E5%AF%BC%E8%87%B4%20iowait%EF%BC%9F.png)
%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 值会上升。(但是,重新同步的优先级可能较低,因此这种情况可能仍不会发生)。