为什么单个文件的复制速度会降低?

为什么单个文件的复制速度会降低?

将 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)的写入速度。

您可以在没有缓存的情况下进行复制。这样做的主要好处是其他(可能更重要)数据不会从缓存中删除。

相关内容