https://zhuanlan.zhihu.com/p/525656364
正文共:1024 字 11 图,预估阅读时间:1 分钟
在上个实验中(VPP使用DPDK纳管主机网卡),我们已经初步实现了通过DPDK纳管主机网卡。
不知道大家注意到没有,我们在查看主机网卡的主线信息时,后面的描述信息是不一样的,可以理解为是主机的网卡信息,一个是VMXNET3类型,另一个是82574L类型。
其实这个是和配置主机时选择的适配器类型相对应的,适配器类型选择VMXNET3,在主机上看到的就是VMXNET3;如果选择的是E1000e,显示就成了82574L了。
当然,还有一个SR-IOV直通,指的就是Single Root I/O Virtualization了,据说是将一个物理网卡虚拟出来多个轻量化的PCI-e物理设备,再分配给虚拟机使用。启用SR-IOV直通之后,将大大减轻宿主机的CPU负荷,提高网络性能,降低网络时延等。
但是很不幸,我的服务器网卡(型号BCM5719)不支持。
那E1000e和VMXNET3这两种类型有什么区别呢?
E1000e虚拟网络适配器模拟的是千兆网卡,而VMXNET3则模拟的是万兆网卡,而且这两种虚拟网络适配器可以没有物理网卡对应,也就是不需要借助底层的硬件网卡,并且通过对虚拟机中的性能进行优化,使得虚拟机之间的网络交换不受底层网卡的限制。比如我的服务器,底层都是千兆电口网卡,而主机转发却可以达到万兆,就是这个原因。
所以,VMware ESXi的最佳实践应该是使用VMXNET3虚拟NIC,除非存在无法使用特定驱动程序或兼容性等原因,建议使用VMXNET3来替换掉E1000e,以有效提升网络性能。
这么说准确吗?那今天的主要任务,就是测试一下这两种网卡的性能差距主要有多大。
测试1:VMXNET3直连
将两台主机的适配器类型都配置为VMXNET3,并连接在同一个端口组下。
用iperf3打流测试,带宽竟然不止万兆,达到了11.6 Gbps。
测试2:E1000e直连
将两台主机的适配器类型都配置为E1000e,并连接在同一个端口组下。
用iperf3打流测试,带宽比千兆好一些,达到了4.24 Gbps,相比VMXNET3,只有三分之一的性能。
测试3:E1000e和VMXNET3对接1
将一台主机142的适配器类型配置为E1000e,另一台主机141的适配器类型配置为VMXNET3,并将两台主机连接在同一个端口组下。
先用适配器类型为E1000e的主机142作为服务器,打流测试,带宽为6.12 Gbps,介于前两次测试之间。
再用适配器类型为VMXNET3的主机141作为服务器,打流测试,带宽为7.01 Gbps,优于使用主机使用E1000e作为服务器的场景。
测试4:E1000e和VMXNET3对接2
为了避免主机的影响,我将两台主机的网卡配置对调了一下,并将两台主机连接在同一个端口组下。
同样的,先用适配器类型为E1000e的主机141作为服务器,打流测试,带宽为7.01 Gbps。
再用适配器类型为VMXNET3的主机142作为服务器,打流测试,带宽为6.71 Gbps,比6.12 Gbps这个值稍好一点。
总结
通过本次的4个测试可知,VMWare ESXi通过对虚拟机的性能进行优化,使得虚拟机之间的网络交换不受底层网卡的限制。虽然E1000e模拟的是千兆网卡,但实际性能仍然不止千兆;虽然VMXNET3模拟的是万兆网卡,实际性能也可以超出万兆。两者底层都不需要对应物理网卡,这点是SR-IOV直通所不支持的。
通过组合对比,E1000e网卡的转发性能最差,只有VMXNET3网卡的三分之一,当两者组合使用时,转发性能大概能达到VMXNET3网卡的三分之二左右。
所以,最起码我们可以确认,VMware ESXi 6.7的最佳实践就是配置虚拟机的网络适配器类型为VMXNET3,相比于E1000e,能大幅提升网络性能。