我在运行 Xen 3.4.3-5 和以下内核的主机节点上设置了一个运行 Windows Server 2008 的虚拟机:2.6.18-308.1.1.el5xen #1 SMP Wed Mar 7 05:38:01 EST 2012 i686 i686 i386 GNU/Linux
VM 上的网络速度非常慢——使用在线速度测试,我只能将其提高到 8-9mbps。线路可达到 100mbps,主机节点可以轻松实现这些速度。如果我设置运行 CentOS(而不是 Windows Server 2008)的 VM,该 CentOS VM 可以轻松实现这些速度——只有 Win2K8 会遇到困难。
我已经做了一些非常详尽的故障排除,但没有任何帮助:
- Win2k8 的新 VM 安装确实存在同样的网络问题。
- 升级到最新的 kernel-xen 没有帮助 (2.6.18-308.1.1.el5xen)。
- 从 xen 3.4.0 升级到 xen 3.4.3-5 没有帮助。
- 禁用 Windows 防火墙等没有帮助。
- 将网卡设备配置从自动协商更改为手动 100mbps 全双工没有帮助。
- 更改网络接收缓冲区数据包大小没有帮助(尝试了从 64k 到 8k 的所有组合)。
到目前为止,我几乎没有主意了——任何帮助都将不胜感激!
编辑:我最终解决了这个问题。请参阅下面我接受的答案。
答案1
问题可能出在 Windows 客户机及其与虚拟 NIC 的通信方式上。以下是一些可尝试的操作:
在 Windows 客户机中禁用 TCP 烟囱卸载。要确定是否已启用,请运行netsh int tcp show global
。要禁用它,请运行netsh int tcp set global chimney=disabled
在 Windows 客户机中禁用 NIC 上的 TCP 卸载。在客户 Windows 安装中,转到设备管理器,打开有问题的 NIC,转到高级选项卡并搜索与 TCP/UDP、校验和、largesend 和/或 TCP/IP 卸载相关的任何选项。禁用它们。如果显示“卸载”,请禁用它。
在 Windows 客户机中禁用接收方缩放。检查是否已启用netsh int tcp show global
。使用 禁用它netsh int tcp set global rss=disabled
。
在 Windows 客户机中禁用 NetDMA。使用 检查是否已启用netsh int tcp show global
。要手动启用/禁用它,需要添加注册表项。使用 检查它是否已存在get-itemproperty -path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -name EnableTCPA
。如果不存在且 NetDMA 已启用,请使用 PowerShell 创建以下注册表项:
New-Item -Path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableTCPA
New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\" -Name "EnableTCPA" -Value 0 -PropertyType "DWord"
在 Windows 客户机中禁用 Windows 网络任务卸载。使用 PowerShell 检查注册表项是否存在:get-itemproperty -path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -name DisableTaskOffload
。如果不存在,请使用 PowerShell 添加此注册表项:New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\" -Name "DisableTaskOffload" -Value 1 -PropertyType "DWord"
在 Windows 客户机中禁用自动调节功能。首先检查它是否已启用:Netsh interface tcp show global
。如果已启用,请使用以下命令禁用它:Netsh interface tcp set global autotuning=disabled
如果已启用远程差分压缩,请将其禁用。转到运行命令并运行appwiz.cpl,选择“打开或关闭Windows功能”并取消选择远程差异压缩。
检查是否设置了防病毒软件来扫描实时流量。可以设置防病毒工具来扫描主机来往的所有流量,以查找任何恶意内容。如果您的 Windows 客户机上存在这种情况,请暂时禁用它以进行测试。
编辑1
为此做出的一些最后努力包括:
- 我的一个猜测是端口速度不匹配 - 但您解决了这个问题。除非在这方面有更多选择。
- 我通常建议更新网络驱动程序,但是在虚拟机中这不太必要,因为虚拟网卡相当普通。
- 在 Windows 客户机中安装最新的客户机工具。
- 我发现 Windows 客户端上的 IPv6 存在一些问题,导致神秘的 TCP/IP 速度减慢。不知道原因;我还没有深入研究过。我想你可以从 NIC 中卸载/删除 v6。
- 检查 Windows 客户机中的 TCP/IP 统计信息,查看是否存在大量错误或其他有趣的数字。
netstat -es
即可解决问题。 - 最后,但同样重要的是,安装网络监视器并检查流量是否有任何异常。CRC 错误、重新连接、丢包……谁知道呢。任何看起来不好看的东西。
答案2
我通过为 NIC 和 Windows 中的其他组件安装 Xen 半虚拟化驱动程序解决了这个问题。Windows 客户机上的默认驱动程序与 Xen 主机节点的交互非常糟糕。我注意到在 VM 上的 Internet Explorer 中下载文件会使主机节点上的 CPU 激增至 75-90%。安装 James Harper 的适用于 Windows Server 2008 32 位的 GPLPV 驱动程序解决了这个问题。
如果有人遇到类似的问题,只需下载并安装此处找到的适当的 GPLPV 驱动程序集: http://wiki.univention.de/index.php?title=Installing-signed-GPLPV-drivers
但是,对于我的特定服务器,安装 GPLPV 驱动程序还不够。GPLPV 驱动程序将下载速度恢复到正常水平(~66mbps),但上传速度约为 2mbps。然后我重新尝试了 @WesleyDavid 提供的提示,在 NIC 配置中禁用所有形式的卸载(通过设备管理器),这将上传速度提高到 36mbps。此后,我在其他系统上安装了 GPLPV 驱动程序,无需修改 NIC 配置。
更新:
自从一年前我发布这个问题以来,我已经在各种不同的 Xen 机器上安装了 Windows。每次我安装 James Harper 的 GPLPV 驱动程序时,网络性能和一般系统性能都会得到显著改善。如果不使用 Harper 的 GPLPV 驱动程序,我从未能够实现完整的下载/上传速度。
任何在 RHEL/CentOS 主机上使用 Xen 虚拟化 Windows 的人都应该确实尝试提供的驱动程序http://wiki.univention.de/index.php?title=Installing-signed-GPLPV-drivers