以下是一些让大师们感到好奇的问题:
设置:
源机器:带有本地硬盘的 Windows Server 2003 R2 机器。40GB 的 VHD 文件。1 x 1Gbps 网卡、Cat6 电缆、交换机。
目标机器:Windows Server 2008 R2 机器,通过 iSCSI 连接到单独机器上的 iSCSI 目标(1TB,RAID5)。1 个 1Gbps 网卡,Cat6 电缆,连接到与源机器相同的交换机。第二个 1Gbps 网卡,Cat6 电缆,通过隔离交换机连接到 iSCSI 目标。
交换机是 Netgear JGS524 型号(网络管理)。
如果我从 Win2003R2 机器复制到 Win2008R2 机器本地驱动器,我会在 45 分 36 秒内得到 40GB。
如果我从 Win2008R2 机器复制到 iSCSI 目标(本地驱动器到 iSCSI 目标),我会在 37 分 56 秒内获得 40GB。
如果我通过 Win2008R2 机器从 Win2003R2 机器复制到 iSCSI 目标,我会在 3 小时 50 分钟 24 秒内获得 40GB。
所有复制都是通过在 Win2008R2 框上发出以下命令完成的:
XCOPY <源> <目标> /J
XCOPY /J - 使用无缓冲 I/O 进行复制。推荐用于非常大的文件。
那么,我在这里遗漏了什么?为什么连续复制总共需要 1 小时 23 分 32 秒,而“直通”复制却需要近 3 倍的时间?
交换机没有显示错误,网络在复制期间利用率徘徊在 3% 左右(而“背靠背”复制的利用率在 25% 左右)。
我错过了什么?
答案1
可能是“无缓冲”复制的问题吗?Windows 可能会使用一些技巧来加快源/目标是本地磁盘的复制速度,但如果使用两个网络设备,它会恢复到更安全的行为。
我曾经在 Unix 上进行过磁盘测试,操作系统可以在磁盘子系统上玩很多花招。祝你好运。
答案2
那么 SMB 协议呢?Win2k8R2 使用 SMB 2.0,而较旧的 Win 版本只有 SMB 1.0,速度较慢,并且是否有正在运行的病毒扫描程序? 另一方面,iSCSI 设备的直接访问使用不同的协议,以最小化开销,并且不需要病毒扫描程序。
答案3
首先,在两个实例中,您都是从 2003R2 复制到 2008R2。由于涉及 2003,因此它只能使用 SMB1,并且不会同时处理太多请求,信息将以大约 64kb 的块形式穿越网络,并且服务器必须确认每个 64kb 块已被写入,然后 2003R2 框才会发送下一个块。
现在,如果 2008R2 盒必须发送 iSCSI 请求并接收确认,然后才能将回复返回给 2003R2 盒,那么这可能会减慢该过程。一些粗略的计算表明,对于 64kb 块,您需要在 2003R2 发出写入块的请求和响应以表明已写入之间间隔 22ms。这似乎有点长,但考虑到所涉及的所有步骤,这并非不可能。
我不确定这是否是你的问题,但如果你感兴趣,那么你可以使用 wireshark 查看网络流量并验证所涉及的块大小和延迟。
另一个不太令人兴奋的可能性是,您将服务器设置为全双工,将交换机设置为自动协商。这种组合不起作用,导致交换机认为连接是半双工的,并导致它偶尔丢包。当服务器同时发送和接收大量数据时,丢包的情况会更严重,就像您的第二次复制过程一样。