通过千兆连接,Teracopy的速度为31MB / s,但是Windows 8的速度为每秒109MB?
到底是什么原因造成的?我可以通过Teracopy启用这种速度吗?我真的很喜欢Teracopy的其他功能,现在肯定会错过的:D
两个词:验证和缓存
技术说明
这是使用Windows资源管理器复制文件的一般过程:
- 从源驱动器读取大块数据到内存
- 通过系统发送块
- 将块写入目标驱动器
- 如果尚未完成,请返回步骤1
这似乎很简单而且简短。使用这种传输算法,文件的每个字节仅被处理两次:一次读取,一次写入。
但是此外,Windows使用内存(驱动器本身也是如此)来缓存一些数据。因此,与其等待上一个块完成写入,然后再读取下一个块,不如先读取一个新块,而仍在写入前一个块。显然,这不能永远保持下去,但是Windows可以将所有剩余的可用内存用作存储大多数(如果不是全部)正在读取的文件的临时缓冲区。
通过将一个大文件(或包含很多文件的文件夹)从一个驱动器复制到另一个驱动器,然后立即比较两者,可以看到正在执行的缓存。此时的比较将比以后做的要快得多,因为文件仍在内存中,因此实际上并没有从驱动器中读取文件。
由于内存非常快,并且读取速度往往快于写入速度,因此最终传输速率最终仅受目标驱动器的写入速度限制。
Teracopy可以做两件事来减慢资源管理器不做的文件传输:
与仅在传输过程中检查基本错误的资源管理器不同,Teracopy实际上可以验证数据是否正确写入目标驱动器,以防止由于传输介质(网络/驱动器电缆/等)问题而导致的数据损坏。 )或驱动器本身(坏扇区等)。这样做意味着它必须从目标位置读取文件才能将其与原始文件进行比较。
根据所使用的算法和文件的大小,可以将验证优化为每个文件/文件块低至(但不少于)三个驱动器操作,而不是资源管理器中的两个:从源读取文件,写入文件到目标,然后从目标读取文件。
查看使用Teracopy(使用经过HDD优化的算法)复制文件时发生的情况:
- 从源驱动器读取一个块
- 散列从源驱动器读取的块
- 通过系统发送块
- 将其写入目标驱动器
- 清除缓存
- 从目标驱动器读回块
- 散列目标驱动器中的块
- 比较哈希
- 确定下一步
- 如果哈希值不匹配,请给出错误并提示用户采取措施
- 如果哈希匹配但尚未完成,请返回步骤1
问题在于,如果在传输过程中缓存文件,则比较将变得无用,因为您没有在目标驱动器上读取实际数据,而是从源读取缓存在内存中的副本。因此,要正确验证,必须清除缓存。可以在每次读取和写入之后执行此操作(这是一项额外的操作,最终将对无数大小的文件进行无数次完成),或者在传输完整个文件后仅执行一次。
根据下面的屏幕截图,TeraCopy 在文件传输之后而不是在传输过程中执行验证。这意味着它改为使用经过CPU / RAM优化的传输算法:
- 从源驱动器读取一个块
- 通过系统发送块
- 将其写入目标驱动器
- 如果尚未完成,请返回步骤1
- 复制完成,因此清除缓存并进行验证
- 从源驱动器读取一个块
- 散列目标驱动器中的块
- 从目标驱动器读取一块
- 散列目标驱动器中的块
- 比较哈希
- 确定下一步
- 如果哈希值不匹配,请给出错误并提示用户采取措施
- 如果哈希匹配但未完成,请返回步骤6
虽然此算法对CPU和RAM的压力稍有减轻,但对驱动器的压力也大得多,因为现在每个文件必须处理四次:从源读取整个文件,将其写入目标,然后再次从源中读取它,然后从目的地中读取它。
(如果TeraCopy已针对网络传输进行了优化,则可以避免第二次发送整个文件进行验证,而仅发送较小的散列,但目前看来并非如此,并且对网络驱动程序的处理方式相同作为本地驱动器,因此它实际上会重新读取源代码。)
默认情况下,TeraCopy不验证或使用缓存。不验证将加快传输速度(或更准确地说,不降低传输速度),而不使用缓存会降低传输速度。
应用
要确定特定的速度结果,您必须检查设置以查看是否已更改。然后,您可以尝试估算使用不同设置可获得的速度类型(请注意,它们可能会相互作用,因此,加减不是一个简单的问题)。
也就是说,让我们使用您的数字进行粗略的计算:
- 本地文件传输:875Mbps(即驱动器速度)
- 网络速度:1Gbps = 119.21 MBps
- 通过Windows资源管理器复制:109MBps
- 通过TeraCopy复制:34MBps
马上,我们发现Explorer的文件传输几乎使您的网络吞吐量最大化。1Gbps链路等于每秒1,000,000,000 位,以字节的二进制单位为119MBps。Explorer的时钟为109MBps,其余的10MBps(可笑的是您之前的max)可以通过开销,背景负载和碎片轻松解决。 :^Þ
(由于传输速率几乎等于网络速度,因此我们可以推测Explorer的文件传输是单向的,并且每个文件仅发送一个副本。)Explorer的文件访问速度为110MBps,每个文件访问两个文件。
现在用于TeraCopy。看来TeraCopy的速度几乎是资源管理器速度的三分之一。
根据其首选项对话框是否准确指示了所使用的算法,TeraCopy实际上可以发送两次整个源文件,以便它可以检查副本。立即,这将吞吐量减少了一半。如果打开了缓存,那么这也会降低速度,因为它必须等待每次写入完成才能发送新的块。与验证结合使用时,它甚至可以将其击倒更多。
如果启用并缓存验证,则34MBps的传输速率似乎是合理的。如果关闭验证并打开缓存,则应该与资源管理器大致相同(根据TeraCopy使用的文件传输代码与资源管理器所使用的文件传输代码有何不同,您可能仍会得到略少甚至更多的信息)。
如果您打算传输近10GB的数据,那么您也可以尝试更改设置并针对四个排列中的每一个重做传输,并记下您获得的速度(为了安全起见,请对其进行排序,以便缓存在两次运行之间关闭:)V+C+, V+C-, V-C+, V-C-
。