通过千兆位连接,Teracopy 的速度为 31MB/s,但 Windows 8 的速度约为每秒 109MB?

Gau*_*ang 13 performance speed gigabit-ethernet teracopy windows-8

今天我第一次体验了千兆网络,这是在我的 2011 MacMini 和 Windows 8 Pro 桌面之间通过 Cat.5e 连接到 Linksys WRT320N(运动型 dd-WRT)。

在确保两个系统上的线路速度都显示为 1Gbps 后,我继续将 2.4GB MP4 从 Mini 复制到 Win 8 桌面(SMB 共享)。尽管对 Teracopy 显示的 30-34 MB/s 感到满意(这对我来说是 10 MB/s 的适当提升),但我仍然对广告速度和实际速度之间的巨大差异感到好奇。

2 小时的谷歌让我相信还有其他因素导致速度降低,SMB 就是其中之一。因此,只是为了做到这一点,我对两个系统都进行了 iPerf 测试,然后猜猜结果如何 - 在两个系统上都大约 875mbps!

然后我偶然发现了这条小信息,之后我关闭了 Teracopy 并通过 Windows 8 的常规复印机复制了相同的文件。109 MB/秒。熔化的大脑:)

究竟是什么原因造成的?我可以通过 Teracopy 启用这样的速度吗?我真的很喜欢 Teracopy 的额外功能,现在肯定会想念它们:D

Syn*_*ech 16

通过千兆位连接,Teracopy 的速度为 31MB/s,但 Windows 8 的速度约为每秒 109MB?

究竟是什么原因造成的?我可以通过 Teracopy 启用这样的速度吗?我真的很喜欢 Teracopy 的额外功能,现在肯定会想念它们:D

两个字:验证缓存

技术说明

这是使用 Windows 资源管理器复制文件的一般过程:

  1. 将源驱动器中的一大块数据读入内存
  2. 通过系统发送块
  3. 将块写入目标驱动器
  4. 如果尚未完成,请返回步骤 1

这看起来很简单也足够简短。使用这种传输算法,文件的每个字节只处理两次:一次读取,一次写入。

但此外,Windows 使用内存(与驱动器本身一样)来缓存一些数据。因此,无需等待前一个块完成写入,然后读取下一个块,可以在前一个仍在写入的同时读取新的块。显然这不能永远保持下去,但 Windows 可以使用所有剩余的可用内存作为临时缓冲区来存储大部分(如果不是全部)正在内存中读取的文件。

您可以通过将一个大文件(或包含大量文件的文件夹)从一个驱动器复制到另一个驱动器,然后立即比较两者来查看缓存的运行情况。那时的比较将比稍后进行比较快得多,因为文件仍在内存中,因此它实际上并没有从驱动器中读取它们。

由于内存非常快,并且读取速度往往比写入速度快一点,最终传输速率最终仅受目标驱动器的写入速度的限制。

Teracopy 可以做两件事来减慢 Explorer 不做的文件传输速度:

  • 放弃缓存并直接从驱动器读取

  • 验证目标是否正确写入

与仅在传输过程中检查基本错误的 Explorer 不同,Teracopy 实际上可以验证数据是否正确写入目标驱动器,以防止由于传输介质(网络/驱动器电缆/等)问题而可能发生的数据损坏。 ) 或驱动器本身(坏扇区等) 这样做意味着它必须从目标读取文件以将其与原始文件进行比较。

根据使用的算法和文件的大小,验证可以优化为每个文件/文件块的低至(但不少于)三个驱动器操作,而不是资源管理器的两个:从源读取文件,写入文件文件到目的地,并从目的地读取文件。

看看当您使用 Teracopy(使用 HDD 优化算法)复制文件时会发生什么:

  1. 从源驱动器读取一个块
  2. 散列从源驱动器读取的块
  3. 通过系统发送块
  4. 将其写入目标驱动器
  5. 清除缓存
  6. 从目标驱动器读回块
  7. 从目标驱动器散列块
  8. 比较哈希
  9. 确定下一步
    • 如果散列不匹配,给出错误并提示用户采取行动
    • 如果哈希匹配但未完成,则返回步骤 1

问题是,如果您在传输期间缓存文件,则比较变得无用,因为您不是在读取目标驱动器上的实际数据,而是从源读取缓存在内存中的副本。因此,要正确验证,您必须清除缓存。这可以在每次读取和写入之后完成(这是一个额外的操作,对于任何显着大小的文件最终会被执行无数次),或者在整个文件传输仅执行一次。

根据下面的截图,TeraCopy在文件传输执行验证,而不是在传输过程中。这意味着它使用这种 CPU/RAM 优化的传输算法:

  1. 从源驱动器读取一个块
  2. 通过系统发送块
  3. 将其写入目标驱动器
  4. 如果尚未完成,请返回步骤 1
  5. 复制完毕,清空缓存,正在验证中
  6. 从源驱动器读取一个块
  7. 从目标驱动器散列块
  8. 从目标驱动器读取块
  9. 从目标驱动器散列块
  10. 比较哈希
  11. 确定下一步
    • 如果散列不匹配,给出错误并提示用户采取行动
    • 如果哈希匹配但未完成,请返回第 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 的速度几乎是 Explorer 速度的三分之一。

根据其首选项对话框是否准确指示其使用的算法,TeraCopy 实际上可能会发送整个源文件两次,以便它可以检查副本。这立即将吞吐量减少了一半。如果缓存打开,那么它也会降低速度,因为它必须等待每个写入完成才能发送新块。与验证结合使用时,它甚至可以将其击倒。

如果您打开验证并关闭缓存,那么 34MBps 的传输速率似乎是合理的。如果您关闭验证并打开缓存,您应该获得与 Explorer 大致相同的结果(您可能仍然获得略少甚至略多,具体取决于 TeraCopy 使用的文件传输代码与 Explorer 使用的文件传输代码有何不同)。

如果您想传输近 10GB 的数据,那么您也可以尝试更改设置并为四种排列中的每一种重新进行传输,并记下您获得的速度(为安全起见,对其进行排序,以便缓存运行之间关闭:)V+C+, V+C-, V-C+, V-C-


具有默认设置的 TeraCopy 首选项对话框的屏幕截图


小智 0

我无法为您的问题提供 100% 的答案,但我可以添加更多可能有帮助的内容。
我切换到 Teracopy 的原因是 Windows 必须在执行任何操作之前“计算”所有内容,而这种计算本身有时会冻结整个过程。在其他帖子中,有人提出被复制的文件类型在 Windows 复制中很重要,但在 Teracopy 中我不能肯定地说,因为我还没有看到这一点。但到目前为止,我自己的尝试给我带来的收获比你在任何情况下得到的都要少。我只是复制通用文件类型,而不是媒体(即照片/电影)文件。

我的测试从 100% GB 网络上具有 GB NIC 访问权限的希捷 3TB NAS 到 GB 系统。最好的情况是 14 Gbps。Windows 从 NAS 迁移到系统 HD 的速度为 12.4GBps,启动时间稍长。没有任何东西可以达到 30-34Mbps,更不用说 109Mb/s 了。

部分原因肯定是由于 NAS 的流量控制,即使在 GB 网络上也是如此。如果我能达到 34GB/s,我会非常高兴,如果我能达到 109GB/s,我会更高兴。如果您找到更快的文件复制器,请发布!:)