同时复制两个文件比一个接一个地复制文件要慢吗? [重复]


15

这个问题在这里已有答案:

我的老板说,同时复制两个文件需要花费更长的时间而不是另一个,因为硬盘驱动器必须不断地在磁盘上的两个位置之间切换磁头。这是真的?在我看来,操作系统应该足够智能来解决这个问题(即它应该知道按顺序复制它们)。复制到连接到USB端口的驱动器时是真的吗?

编辑:是否有任何其他因素的文件系统因素?例如,复制包含10个文件的1个目录与从整个磁盘复制10个文件有何不同?我只想知道一个源媒体和一个目标媒体(没有从多个驱动器读取)。


有时,有时候不是。
Daniel R Hicks

我认为这个问题可以从实际的基准中受益,而不是大多数答复者的有根据的猜测。有人有旋转磁盘和一些业余时间吗?一世 相信 对于SSD,差异可能微不足道;而对于硬盘,我 相信 答案的范围可以从主要的性能损失到可能的轻微好处,具体取决于文件的数量和大小以及源磁盘和目标磁盘的相对性能(如果它们不同)。
Lie Ryan

1
另外,如果您通过USB2转移,那么可能不会有任何差异;典型的硬盘读取速度约为50-100MB / s,而USB2的最大速度为32MB / s,因此瓶颈可能是USB端口,而不是由于缓冲导致的硬盘特性。换句话说,很难说出这样或那样的方式。
Lie Ryan

@LieRyan你太糟糕了,你没有发表评论作为答案,因为它最适合我打算问的问题是关于通过USB 2从1个硬盘复制到1个外部硬盘。
Celeritas

Answers:


12

我会推迟你的 这个问题 。似乎同时在同一磁盘上运行两个复制操作(虽然通过单独的复制操作启动)确实需要更长的时间,因为头部在竞争操作之间来回寻找。

但是,如果是复制操作 开始 同时,绝大多数现代操作系统都是如你所说的那样聪明,可以一个接一个地对传输进行排队,并且应该会产生更快的复制时间。

显然有许多应用程序可用于强制文件复制操作按顺序排队和执行,例如 TeraCopy的 FASTCOPY

但是,在多个物理卷上执行并发复制操作完全是另一回事。与通过备用协议传输文件一样。

关于复制到连接到USB端口的驱动器的问题,它在很大程度上取决于驱动器使用的内存类型和使用的USB规范(当然是USB 1.0和2.0的一个值得注意的瓶颈),以及之前的提到有关复制源卷的因素。


1
那还不依赖于系统的处理器能力吗?
Raghunandan

@Raghunandan一个公平的观点 - 我认为这完全取决于具体情况。如果从多个物理卷或SSD / RAMDisk读取数据,多核/超线程肯定会提高复制速度,但在单个HDD的情况下,复制速度的限制因素可能仍然存在于磁盘的IO速度和磁头的存在 - 运动延迟(我确信必须有更合适的术语...)。
bosco

3
@Raghunandan - 可能不是文件系统(NTFS vs EXT4)的操作系统。
Enigma

2
@Raghunandan PC-24000 DDR3的带宽为24 GB / s,它仍然不是现代CPU的限制,所以我认为这不是CPU的问题 - 即使硬盘操作的效率比RAM操作低100倍,CPU仍然可以处理至少245 MB / s,这仍然是SSD最快的带宽。
gronostaj

1
@Raghunandan你的linux分区也可能比Windows分区更快的部分磁盘(例如外部v。内部)
ernie

15

这里有很多因素可能会影响到这一点。

  • 源驱动器 - 这是旋转磁盘还是SSD?如果旋转磁盘,文件的布局可能会影响性能。由于这两个文件可能位于磁盘的不同部分,因此会导致头部查找处罚。如您所说,如果您一次选择两个文件,并以这种方式启动复制,操作系统将按顺序处理副本。
  • 文件布局 - 文件碎片(源和目标上的碎片)可能会影响非SSD驱动器的性能
  • 目的地 - 如果您有两个写入流写入单个目标,那么您将回到头部搜索问题(再次假设不是SSD),并且您可能会严重交错文件。我曾经为一家提供高性能存储的公司工作,其中一个重大问题是他们可以读取或写入多少实时视频流(2k视频每秒约需300兆)。交替写入将减慢复制过程,并且还会使读取文件的速度变慢。当然,如果您的磁盘碎片化而无法启动,那么您的文件将被交错写入。
  • 单个/多个源/目标 - 取决于您的文件是来自一个驱动器还是全部写入单个驱动器,头部搜索问题可能或多或少
  • 文件大小 - 对于非常小的文件,头部搜索问题无关紧要,因为头部无论如何都需要寻找下一个文件(这意味着不是在文件之间来回移动,头部将按顺序读取文件)

至于操作系统是否足够智能来解决这个问题,一般来说,它们都是。也就是说,如果您同时复制多个文件(例如,考虑一次选择多个文件并拖放)。

当然,如果你开了两个 cp 命令,然后它将运行这两个命令,或者如果你复制/粘贴单独的文件在Windows中,并在屏幕上获得两个“复制”进度窗口,那么优化将不会发生。在这种情况下,您已经明确告诉操作系统您要同时运行这两个副本,因此它不会决定一个副本比另一个副本更重要并开始排队。


+1唯一缺少的是 袭击 配置,提到“单/多源/目标”。
David Harkness

1
-1所说的大部分内容与问题无关
Celeritas

1

如果多次选择和复制 - 从GUI或使用“复制C:\文件夹* D:\文件夹\”之类的命令 - 那么文件将被顺序复制,使问题没有实际意义。

如果您复制一些文件,并且在复制时,开始复制更多文件 - 通过GUI中的两个单独操作,或者通过两个单独的命令同时运行,如“cp -r / usr / bin / / opt / bin /& ; cp -r / usr / local / bin / / opt / local / bin /“ - 那么你的性能几乎肯定会降低 - 可能是一点点(高端固态驱动器,两个复制操作中的大文件)或者可能通过TON(旋转磁盘,一个或两个操作中相对较小的文件)。更好的操作系统可以在一定程度上减轻性能损失 - 例如,现代Linux内核使用CFQ(完全公平排队)I / O调度程序,这将在某种程度上“批量”阻止操作以提高效率 - 但您仍将采取性能受到打击。在某些情况下,命中可能是巨大的,因为旋转磁盘在随机I / O上比顺序I / O更慢(可能慢两个数量级或更慢,这就是现代I / O调度程序尽力减轻问题的原因通过批处理和缓存操作来最小化不必要的搜索)。

TL; DR - 仅运行一个副本 手术 一次,无论包含多少个别文件 手术 ,如果你担心表现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.