VMware管理员在选择虚拟网卡的时候有两类选择, 仿真型虚拟网卡和超虚拟化型的虚拟网卡。具体如下:
- 仿真型(Emulated)虚拟网卡:好处是开箱即用(out of the box), 无需VMware的外部代码做任何事。它甚至可以用来安装虚拟机的操作系统,因为BIOS启动的时候它就可以使用了。不好的方面是从虚拟操作系统发出的每一帧,或收到的每一帧,都需要一些额外的处理。VMkernel不得不实时模拟Intel 82545EM或Intel 82574网卡的一模一样的行为,这很花时间,或者说浪费CPU的周期(cycle)。
- E1000:模拟1 Gbit Intel 82545EM网卡,从Win2003往后的操作系统都可用。创建绝大多数的虚机时,它都是默认选项,所以应用得最广泛。
- E1000E:模拟1 Gbit Intel 82574网卡,Win2012及以后的操作系统可用。
- 超虚拟化(Paravirtualized)虚拟网卡:这种网卡并不以物理网卡的方式存在,相反它是由VMware伪造的一个设备。有些Linux发行版中甚至都预装了VMXNET3的驱动程序,而Windows中,VMXNET3的驱动程序一般是由VMware Tools提供的。虚拟机操作系统会认为这是一个由叫做VMware的厂商制造的普通网卡,正常使用就行了。
- VMXNET(已废弃)
- VMXNET2(已废弃)
- VMXNET3:对于操作系统而言,VMXNET3网卡看起来就像一个10Gbit 的物理设备。VMXNET3中有很多性能增强之处。
相对于E1000和E1000E中操作系统内核需要做很多对Intel那两种网卡行为的模拟工作,VMXNET3对于虚拟环境而言就是一个特别优化过的网卡。
—————————————————————
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堆栈的其他操作系统可能会达到更高的数量。还应注意的是,这些测试仅用于网络吞吐量,但是当然还有其他因素,可能会在后面的文章中进一步讨论。