这是大师们的好奇:
设置:
源机器:具有本地硬盘驱动器的 Windows Server 2003 R2 机器。40GB 的 VHD 文件。1 个 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% 的利用率标记附近)。
我错过了什么?
可能是“无缓冲”复制问题吗?Windows 可能会采取一些技巧来加速复制源/目标是本地磁盘,但如果它使用两个网络设备,它会恢复为更安全的行为。
我在 Unix 中玩过磁盘测试,操作系统可以用磁盘子系统玩很多技巧。祝你好运。
SMB 协议呢?Win2k8R2 使用 SMB 2.0,而较旧的 Win 版本只有 SMB 1.0,速度不快并且是否有病毒扫描程序处于活动状态? 另一方面,iSCSI 设备的直接访问使用不同的协议以最小化开销并且没有用于舒尔的病毒扫描程序。
首先,您在两种情况下都从 2003R2 复制到 2008R2。由于涉及到 2003,它只能使用 SMB1,并且在同时请求的方式上并没有做太多事情,并且信息将以大约 64kb 的块的形式遍历网络,并且每个 64kb 的块必须由服务器确认为在2003R2 盒子发送下一个。
现在,如果 2008R2 机器必须在向 2003R2 机器返回答复之前发送 iSCSI 请求并接收确认,那么这会减慢该过程。信封背面的一些计算表明,对于 64kb 块,您需要 22ms 在从 2003R2 请求写入块到响应说它已被写入之间。这似乎有点长,但并不超出所涉及的所有步骤的可能性范围。
我不确定这是否是您的问题,但如果您有兴趣,那么您可以使用wireshark 查看网络流量并验证涉及哪些块大小和延迟。
另一个不太令人兴奋的可能性是您将服务器设置为全双工,而您的交换机设置为自动协商。这种组合不起作用,并导致交换机认为连接是半双工的,并导致它偶尔丢弃数据包。当服务器同时发送和接收大量数据时,丢弃的数据包会更糟,就像您的第二个复制过程一样。