为什么 Linux 客户虚拟机在网络方面表现优于 Windows 客户虚拟机?

为什么 Linux 客户虚拟机在网络方面表现优于 Windows 客户虚拟机?

我正在使用 Iperf 和 Netperf 测试 Xen 和 Hyper-V 中虚拟机的网络性能。在这两个虚拟机管理程序中,我发现不同模式下的 Linux 客户虚拟机的性能都比 Windows 客户虚拟机高。即使是完全虚拟化的 Linux 客户虚拟机也比使用 PV 驱动程序的 Windows 客户虚拟机表现出更好的性能。

因此,对于每台虚拟机,我都使用环回地址在同一台虚拟机上创建客户端-服务器模型。我在所有虚拟机上建立了相同的测试,并且没有指定任何缓冲区大小或窗口大小,我将其留给工具来决定。

例如,使用以下命令测试 TCP 连接:

iperf -c 127.0.0.1

或者

netperf -H 127.0.0.1

我在 32 位环境下通过 Hyper-V 的 Iperf 获得了以下结果:

Linux(开明版):18 Gbits/s Linux(未开明版):10.5 Gbits/s Windows(开明版):3 Gbits/s Windows(FV+IS):0.5 Gbits/s Windows(未开明版):0.4 Gbits/s

在 64 位环境中,两种虚拟机管理程序和两种工具都表现出相同的性能。

那么对此有什么解释吗?

注意:FV+IS >> 安装了集成服务的未开通的客户虚拟机。

答案1

您的基准测试并未测试任何一个操作系统的网络性能。

Linux 将环回设备实现为纯软件层,不与实际网络设备连接。在 Windows 上,甚至没有与 127.0.0.1 地址关联的环回设备。

你的所有测试可以要测量的是 CPU 调度和内存带宽的性能。Linux 和 Windows 的网络堆栈非常不同,我不确定是否有人注意到对环回设备驱动程序(或 Windows 内核中的等效驱动程序)进行任何性能优化。

您是否使用过任何通过本地 TCP/IP 连接传输大量数据的特定应用程序?如果是,那么这是本地传输数据效率最低的方法之一。

关于实际网络性能,请注意 Windows 和 Linux 具有不同的网络堆栈和不同的默认设置。您应该调查应用程序将在缓冲区、TCP 窗口等方面使用什么,并相应地调整 iperf/netperf 以模仿该行为。然后在同一主机上的不同虚拟机、不同主机上的虚拟机、虚拟机和物理服务器等之间传输数据。注意网络端口的设置、上行链路饱和度等。

再次强调,您的测试仅对纯软件运行的非优化算法和数据结构进行基准测试。

编辑:您可能想阅读更多关于改进在 Windows Server 2012 和 Windows 8 的环回网络中完成。

相关内容