我使用的是 Ubuntu 16.04.3 LTS 系统(4.10.0-40-generic),每个磁盘上有两个 HDD 和几个分区。当我在两个磁盘之间复制数据 (<5GB) 时,我的传输速率约为 70 MB/s。但是,当我尝试将大量数据 (>30GB) 从一个磁盘复制到另一个磁盘时,我注意到了几个性能问题。
我的问题是这种行为在 Linux 系统中是否正常并且是预期的?
谁能向我解释这一点并建议我如何避免这种性能下降?
下面我将描述我的观察。在示例中,我将 54GB 的磁盘映像文件从 sda8(325 GB 分区)复制到 sdb8(1.6TB 分区)
1) 传输速率降低,iowait 增加
当我尝试复制超过 50 GB 时,我注意到传输速率逐渐降低。我正在使用glances、atop、iotop 和iostat 监控性能。在 30GB 进程中,传输速率下降到 58 MB/s、46 GB 到 36MB/s、52GB 到 12 MB/s。之后,传输速率真正开始波动并降至 1MB/s 以下。同时我看到 iowait 从最初的 0% 增加到最后的 62%。在复制磁盘 sd8 期间,“忙碌”百分比在 40% 到 60% 之间。磁盘 sdb 一直处于 100% 忙碌状态。不仅传输速率下降,而且我的系统响应也变慢了。我希望 iowait 是造成这种情况的原因。
这是正常行为吗?如何避免性能下降?
2) IOwait 复制后保持高位
当复制结束时,我注意到 iowait 仍然很高,并逐渐开始降低到正常值。这需要几分钟。我认为在那段时间数据仍然以大约 1 或 2 MB/s 的速率写入 sdb。使用 iotop 看起来进程“jdb2/sdb4-8”正在导致此磁盘写入。在 IOwait 减少期间,我的系统仍然响应不良。还可以看到磁盘 …