将 2 GB 文件从 HDD 复制到 U 盘时,初始速度约为 80 MB/秒,然后稳步下降到 10 MB/秒甚至更低。
为什么会这样呢?我找到的答案说这与缓存有关。但如果文件只被复制一次,那么缓存与它有什么关系呢?我认为缓存用于多次复制的信息。
我在 Debian/Gnome 上使用 Nautilus,如果它有什么区别的话。
编辑 - 添加一些基准
在复制 2.4 GB mp4 文件之前,我反复对其运行一些校验和,看看读取该文件需要多长时间,并期望将其放入磁盘缓存:
sha512sum file.mp4 (3x)
19s
8s
6s
sha256sum file.mp4 (3x)
10s
10s
10s
sha512sum file.mp4 (3x)
6s
6s
6s
看来该文件已进入缓存。
接下来,我将其复制到 U 盘。 Debian 10 上的默认安装是异步的。每分钟复制的数量、剩余时间和总体速度为:
few sec 985 MB 13sec left 116 MB/s
1min 1.1 GB 1 min left 18.6 MB/s
2min 1.4 GB 1 min left 11.7 MB/s
3min 1.7 GB 1 min left 9.7 MB/s
4min 2.1 GB 35sec left 8.7 MB/s
4min45 "done"
eject
(it doesn't inform how long it will take)
+2min22 "ejecting" = ~7min total
2403758161÷427 = 5629410.2 = 5.63 MB/s = 5.37 MiB/s
然后我使用选项安装了 USB 记忆棒-sync
,并每分钟注册相同的信息:
few sec 20min left 2 MB/s
30s 9 min left 3.9 MB/s
1min 272 MB 7 min left 4.5 MB/s
2min 500 MB 7 min left 4.2 MB/s
3min 744 MB 6 min left 4.1 MB/s
4min 1.1 GB 5 min left 4.4 MB/s
5min 1.4 GB 3 min left 4.6 MB/s
6min 1.7 GB 2 min left 4.6 MB/s
7min 2.0 GB 1 min left 4.6 MB/s
8min 2.3 GB 36sec left 4.7 MB/s
8m26s done
eject
instantaneous
2403758161÷506 = 4750510.2 = 4.75 MB/s = 4.53 MiB/s
结论:
校验和表明将文件复制到内存的时间远小于总复制时间。因此,将其用作整体速度估计的一部分似乎是不正确的。
同步复制似乎慢了一点,但至少它正确地告知了剩余时间。
答案1
HDD 比 USB 记忆棒快得多,因此从 HDD 读取文件时,它会进入缓存以释放 HDD 以执行其他任务。然后,数据以 U 盘可以处理的速度发送到 U 盘。
缓存用于多次引用的文件,但这不是它们的唯一目的。在某些时候,就像在本例中一样,必须第一次读取该文件。现在,如果您很快再次复制相同的文件,缓存将代替 HDD 传送该文件。在一段时间内不再被引用后,该文件将从缓存中清除,从而允许缓存处理新数据。
答案2
数据将被写入缓存/写缓冲区,这发生得很快。然后它被复制到辅助存储设备(USB),这个过程发生得更慢。很快你就会用完缓存/写缓冲区,此时写入缓存/写缓冲区会降低辅助存储(USB)的写入速度。
您可以在没有缓存的情况下进行复制。这样做的主要好处是其他(可能更重要)数据不会从缓存中删除。