今天我第一次体验了令人震撼的千兆网络,我的 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 的适当提升),但我仍然对广告和实际速度之间的巨大差异感到好奇。
在 Google 上搜索了 2 个小时后,我相信还有其他因素导致速度变慢,SMB 就是其中之一。因此,为了测试,我对两个系统都进行了 iPerf 测试,猜猜结果如何 - 两个系统的速度都在 875mbps 左右!
然后我偶然发现这条小信息之后我关闭了 Teracopy,并通过 Windows 8 的常规复印机复制了同一个文件。109 MB/s。熔化的大脑 :)
到底是什么原因造成的?我可以通过 Teracopy 启用这样的速度吗?我真的很喜欢 Teracopy 的额外功能,现在肯定会很想念它们 :D
答案1
通过千兆连接,Teracopy 的速度为 31MB/s,而 Windows 8 的速度仅为每秒约 109MB?
到底是什么原因造成的?我可以通过 Teracopy 启用这样的速度吗?我真的很喜欢 Teracopy 的额外功能,现在肯定会很想念它们 :D
两个词:确认和缓存
技术说明
这是使用 Windows 资源管理器复制文件的一般过程:
- 将源驱动器中的一块数据读入内存
- 通过系统发送块
- 将块写入目标驱动器
- 如果尚未完成,请返回步骤 1
这看起来很简单也很简短。使用此传输算法,文件的每个字节仅被处理两次:一次读取,一次写入。
但除此之外,Windows 还使用内存(驱动器本身也是如此)来缓存一些数据。因此,它无需等待前一个块完成写入,进而正在读取下一个块,可以读取新的块尽管前一个文件仍在写入中。显然,这种情况不可能永远持续下去,但 Windows 可以使用所有剩余的可用内存作为临时缓冲区,以存储正在内存中读取的文件的大部分(如果不是全部)内容。
您可以通过将一个大文件(或包含大量文件的文件夹)从一个驱动器复制到另一个驱动器,然后立即比较两者来查看缓存的实际作用。比较结果如下很多此时的速度比稍后执行的速度要快,因为文件仍然在内存中,所以实际上并没有从驱动器中读取它们。
由于内存非常快,并且读取速度往往比写入速度稍快,因此最终的传输速率仅受目标驱动器的写入速度的限制。
Teracopy 可以执行两项操作来减慢文件传输速度,而 Explorer 不会执行这些操作:
放弃缓存并直接从驱动器读取
验证目的地是否正确写入
与 Explorer 不同,它只能在传输过程中检查基本错误,而 Teracopy 实际上可以验证数据是否正确写入目标驱动器,以防止由于传输介质(网络/驱动器电缆/等)或驱动器本身(坏扇区等)的问题而导致的数据损坏。这意味着它必须读取文件从目的地并将其与原文进行比较。
根据使用的算法和文件的大小,验证可以优化到最低(但不低于)三驱动器对每个文件/文件块执行操作,而不是 Explorer 的两个操作:从源读取文件、将文件写入目标以及从目标读取文件。
看看当你使用 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(有趣的是,这是您之前的最大限度 :^Þ
) 可以很容易地通过开销、背景负载和碎片来解释。
(由于传输速率几乎等于网络速度,我们可以推测 Explorer 的文件传输是单向的,并且每个文件只发送一份副本。)Explorer 每个文件两次访问的速度为 110MBps。
现在来说说 TeraCopy。看起来 TeraCopy 的速度几乎刚好是 Explorer 的三分之一。
根据其首选项对话框是否准确指示了其使用的算法,TeraCopy 实际上可能会发送整个源文件两次,以便检查副本。这会立即将吞吐量减半。如果缓存已打开,那么这也会降低速度,因为它必须等待每次写入完成后才能发送新的块。如果与验证相结合,速度可能会进一步降低。
如果您启用验证并关闭缓存,34MBps 的传输速率似乎是合理的。如果您关闭验证并启用缓存,您应该获得与 Explorer 大致相同的传输速率(您仍可能会获得略低甚至略高的传输速率,具体取决于 TeraCopy 使用的文件传输代码与 Explorer 使用的文件传输代码的差异)。
如果您想要传输近 10GB 的数据,那么您也可以尝试改变设置,然后针对四种排列中的每一种重新进行传输,并记下您获得的速度(为了安全起见,请在运行之间关闭缓存:)V+C+, V+C-, V-C+, V-C-
。
答案2
我怀疑这与 Windows 8 使用 SMB v. 3 有关,并且我怀疑 teracopy 是否兼容 SMB v.3 并且默认回到 SMB 2。只是猜测......
答案3
我无法完全回答您的问题,但我可以补充一些可能有帮助的内容。
我之所以改用 Teracopy,是因为 Windows 在执行任何操作之前必须“计算”所有内容,而这种计算本身有时会冻结整个过程。在其他帖子中,有人提到在 Windows 复制中复制的文件类型很重要,我无法肯定 Teracopy 是否也是如此,因为我没有看到有人提出这一点。但无论如何,我自己的尝试到目前为止都没有得到你想要的结果。我只是复制通用文件类型,而不是媒体(即照片/电影)文件。
我的测试从 Seagate 3TB NAS 开始,在 100% GB 网络上具有 GB NIC 访问权限,然后转移到 GB 系统。最佳情况是 14 Gbps。Windows 从 NAS 移动到系统 HD 的速度为 12.4GBps,启动时间稍长。没有什么能接近您的 30-34Mbps,更不用说 109Mb/s 了。
部分原因肯定是由于 NAS 即使在 GB 网络上也有流量控制。如果我能获得 34GB/s,我会非常高兴,如果我能获得 109 GB/s,我会更高兴。如果你找到更快的文件复制器,请发帖!:)