代码改变世界

解决 Hyper-V R2 虚拟网卡影响网速变慢问题

2009-11-12 00:51 by G yc {Son of VB.NET}, ... 阅读, ... 评论, 收藏, 编辑

    唉,最近可以说是倒霉透了。

    显示器烧了(真的冒烟了,我的22LCD啊, 现在送修去了。。)

    网络也出问题,访问网络 变慢了很多。

    说了很多废话,回过来。

     

    虽然升级到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,属性里面,只选了虚机共享。

    clip_image001

    clip_image002

     

    这个是虚拟网卡的。

    clip_image003

     

    禁用了之后,FTP速度就上去了

    clip_image004

    (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>