原帖地址:http://www.cnblogs.com/GSonOVB/archive/2009/11/12/1601435.html
最近把家里的硬件更新了,换用了2008R2。凑巧今天需要在公司里远程连过来,感觉非常的卡,频繁掉线,而网络状康是很好的,不至于如此。回到家里,用另一台机器连接远程桌面同样存在问题,基本上只要一有动作就掉包。关掉关联的虚拟网卡则一切正常,怀疑是HyperV的虚拟网卡造成,上Google搜了一下,就有了下文,不过我和原作者不同,我必须修改虚拟网卡的配置禁用IPV4检查才见效
虽然升级到WIn2008R2有一段时间了, 但没有感觉到什么网络问题。
直到最近,我在局域网的另一个机器,通过FTP从主机上下载一些程序等等。
因为平常都是在虚机里面,没有注意这个。
结果今天一用,发现 从内网下载的速度,居然只有700KB/S左右, 最高没有超过1M/S (IE下载的,用其他工具稍微快点,大概2~3M/S 左右)。
唉。这速度怎么说呢? 我的内网好赖也是100M的,这么慢的话,下载什么都不爽了。
(唉,要是要部署30G VHD文件,我给下载到什么时候去呢)
最初实际上以为是网络问题,但后来,我直接把 两个机器直接用网线连接到 一起(没有交换机OR路由)
速度也是上不去,唉,问题是我本机。
但因为我的主板是 双网卡的,用另一个网络口,进行下载,速度轻松的上去了。
分以了一下2个借口的区别,想起来了, 其中 下载慢的那个接口 安装 虚机的虚拟网卡的共享驱动。
为了证明这个, 我直接把虚拟网卡删了,来测试。
恩,速度是突飞猛进了。(可惜,之后 还给为每个虚机重新分配新的网卡,因为新的网卡GUID不同。唉。)
在网上 Google了一下,终于,在 英文MSDN社区上找到了答案。
( http://social.technet.microsoft.com/Forums/en/winserverhyperv/thread/29c669db-30fe-4196-9b95-a9d5e48ac318?prof=required&wa=wsignin1.0)
唉, 简单来说,是 Hyper-V R2 改进 惹得祸。
R2中新增了一个 VM Chimney 功能,主要作用是 将 虚拟网卡 的处理工作 转交给 物理网卡,来提高速度,降低CPU使用。 但这个功能 是需要硬件支持的,因此默认是禁用的。
也许是MS后期通过更新,而开启这个功能,还是因为其他原因等。这个被启动了。
然后,网络就。。。
解决方式是将 物理网卡的 IPv4 硬件校验和(Checksum ) 关闭掉( 当让,根据原文,改成 Rx 应该也可以,不过我没有测试。)
不过虚拟网卡的 关不关闭好像都不会有多少影响。 建议自己尝试一下。
下图是 物理网卡的, 区分方法是,这个网卡没有IP,属性里面,只选了虚机共享。
这个是虚拟网卡的。
禁用了之后,FTP速度就上去了
(Win7之后多的东西,很好的工具,可以看到,基本 达到90% 的带宽了,考虑到 交换机或者路由的性能,以及冗余等,这个已经不错了。)
如果要使用注册表方式的来更改的话,可以参考这里 http://msdn.microsoft.com/en-us/library/aa938424.aspx
最后,找了一下 Rx Tx 的作用。
如果网卡支持,在高级选项里可以设置Checksum Offload是否对Rx或Tx有效,也可以设置为对两者都有效。
对于Tx,设置Checksum Offload有效之后,Windows的传输层将随机填充TCP校验和,因此在本机上抓取的数据包是Bad CheckSum。然后,网卡会自动计算正确的校验码然后发送,因此对方收到的仍然是正确的TCP包。
对于Rx,设置Checksum Offload有效之后,网卡在接收数据时,会填充一个NDIS_TCP_IP_CHECKSUM_PACKET_INFO 结构并设置标志位;如果由于某种原因失败,则不设置标志位,由Windows里的TCP/IP协议栈来完成数据校验。
CheckSum Offload实际上是将传输层的一部分工作交给了硬件完成,以节约系统的CPU资源。微软的测试表明它可以最多节约30%的CPU资源。 IBM里AIX的文档则指出:对于PCI接口的千兆网卡来说还不如让400Mhz以上的CPU来计算校验和,而PCI-X的千兆网卡启用此项后可以达到线路速度,从而节约CPU资源。
源文档 < http://blog.rogerz.cn/archives/557>