VMware管理员可以使用几个不同的虚拟网络适配器来附加到虚拟机。虚拟适配器属于以下两个组之一:
模拟:
这些是虚拟硬件,可以模拟实际的现有物理网络适配器。(请注意,物理ESXi主机中的物理网卡是完全无关的。)VMkernel将向来宾操作系统提供某些内容,看起来与某些特定的实际硬件完全相同,并且来宾可以通过即插即用来检测它们并使用本机设备驱动程序。
仿真设备的示例包括:
E1000 –将模拟1 Gbit的Intel 82545EM卡,自Windows Server 2003生成以来,适用于大多数操作系统。该卡是创建几乎所有虚拟机时的默认设置,并且被广泛使用。
E1000E –模拟更新的真实网络适配器1 Gbit Intel 82574,适用于Windows 2012及更高版本。E1000E需要VM硬件版本8或更高版本。
上面在带有模拟E1000适配器的Windows 2008 R2中,正在使用本机来宾操作系统设备驱动程序。
模拟网络适配器的积极方面是它们“开箱即用”,不需要VMware的外部代码。由于E1000设备已在BIOS启动时可用,因此它甚至可以用于(如果需要)通过PXE安装来宾操作系统。
不利的一面是,使用默认的仿真适配器时,从来宾操作系统发送或接收的每个帧都需要额外的工作(每秒可能成千上万个)。
VMkernel必须“实时”模拟特定Intel 82545EM或82574卡的确切行为,这将花费时间和CPU周期。
半虚拟化:
虚拟网络适配器的另一种类型是“半虚拟化”。最近的一个称为VMXNET3。
半虚拟化网卡不作为物理NIC存在,而是完全由VMware“组成”的设备。对于来宾操作系统,这将意味着它通常在OS安装阶段仅感觉到未知设备位于(虚拟)母板上的PCI插槽中,但没有驱动程序可以实际使用它。
(注意:某些Linux发行版甚至预安装了VMXNET3驱动程序。)
对于Windows Server,通常通过安装VMware Tools来提供设备驱动程序时,来宾操作系统会将其视为来自某些网卡制造商称为“ VMware”的真实NIC,并将其用作普通网络适配器。除了周围的其他NIC之外,没有其他理由相信这是NIC。
对于来宾操作系统,VMXNET3卡看起来像10 Gbit的物理设备。
注意:还有两个过时的半虚拟化适配器,称为VMXNET和VMXNET2(有时称为“增强型VMXNET”),但是,只要虚拟机至少具有硬件版本7,则应仅使用VMXNET3适配器。
由于带有VMXNET3卡的VMware甚至在VM内部拥有更多的网络组件,因此可以实现许多性能增强。使用仿真的E1000 / E1000E,内核必须模拟现有的来宾系统适配器的确切行为,但是使用VMXNET3,它可以创建经过优化以在虚拟环境中使用的“完美”虚拟适配器。
下面,我们将测试当今两个最常见的Windows操作系统:Windows 2008 R2和Windows 2012 R2的网络吞吐量,并查看VMXNET3与E1000和E1000E的性能。
为了生成大量网络流量,我使用了在两个虚拟机上运行的iperf工具,一个虚拟机为“客户端”,另一个为“服务器”。我发现以下iperf设置为Windows Server上的网络吞吐量测试生成了最佳组合:
服务器:iperf -s -w 64k -l 128k
客户端:iperf -c <服务器IP > -P 16 -w 64k -l 128k -t 30
该测试是在HP Proliant Bl460c Gen8上完成的,虚拟机在同一物理主机上运行,无论物理主机/刀片之间的物理网络连接如何,都可以查看网络性能。
E1000,E1000E和VMXNET3上的所有设置均为默认设置。有关VMXNET3卡设置可能进行的调整的更多信息,将在后面的文章中介绍。
(当然,请注意,以下结果仅是对一种特定硬件和ESXi配置进行测试所得的观察结果,绝不是“科学”研究。)
测试1:使用默认E1000适配器的Windows 2008 R2
两台Windows 2008 R2虚拟机,一台作为iperf服务器,另一台作为客户端,测试运行时间为30秒。
如任务管理器视图中所述,1 Gbit链接速度已最大化。一个有点有趣的事实是,即使使用仿真的E1000适配器,也可以使用比1 Gbit链路“应有”更多的使用量。
从iperf客户端输出中,我们可以看到,使用默认的E1000虚拟适配器,我们的总吞吐量为每秒2.65 Gbit 。
测试2:带有VMXNET3适配器的Windows 2008 R2
任务管理器视图报告Iperf客户端VM中10 Gbit链接的利用率约为39%。
在执行测试的过程中,iperf输出显示VMXNET3的总吞吐量为4.47 Gbit /秒。
与Windows 2008 R2上的E1000卡相比,VMXNET3适配器的网络吞吐量提高了近70%。
测试3:带有E1000E适配器的Windows 2012 R2
该E1000E是一个较新的,更加“增强”的E1000版本。对于来宾操作系统,它看起来像物理适配器Intel 82547网络接口卡。
然而,即使它是一个较新的适配器,它没有实际提供更低比E1000适配器的吞吐量。
两个运行Windows 2012 R2的虚拟机,其中iperf工具作为客户端和服务器运行。
E1000E的速度为1.88 Gbit / s,大大低于Windows 2008 R2上原始E1000的2.65 Gbit / s。
测试4:带有VMXNET3适配器的Windows 2012 R2
现在运行VMXNET3适配器的两个Windows 2012 R2虚拟机获得以下iperf结果:
吞吐量为4.66 Gbit / sec,非常接近Windows 2008 R2上的VMXNET3的结果,但比新的E1000E高出近150%。
总之,与E1000和E1000E相比,VMXNET3适配器可提供更高的网络吞吐性能。另外,至少在此测试设置中,较新的E1000E的性能实际上要比较旧的E1000差。
该测试是在Windows Server虚拟机上完成的,VMXNET3适配器的最高吞吐量约为4.6 Gbit / sec,这可能是TCP实施受到限制的结果。具有其他TCP堆栈的其他操作系统可能会达到更高的数量。还应注意的是,这些测试仅用于网络吞吐量,但是当然还有其他因素,可能会在后面的文章中进一步讨论。