最近测试中发现虚拟机的网络性能遇到了瓶颈,于是想一探究竟,发现自己一直忽略了这块儿知识,于是做个笔记。

1.VirtualBox

eshizhan比较常用的是VirtualBox,以下简称Vbox,先从它入手:

网络适配器

查看官方文档发现,Vbox中可以模拟五种网络适配器,

  • AMD PCNet PCI II (Am79C970A);

  • AMD PCNet FAST III (Am79C973, 默认);

  • Intel PRO/1000 MT Desktop (82540EM);

  • Intel PRO/1000 T Server (82543GC);

  • Intel PRO/1000 MT Server (82545EM);

  • Paravirtualized network adapter (virtio-net).

从兼容性来讲, AMD PCNet系列兼容性好,也比较古老,Intel PRO/100系列是比较新的NIC,virtio-net一会儿讲。

从性能上来讲,新的Intel PRO/1000系列性能要比老的AMD PCNet系列要好,virtio-net要比前两者都好,因为virtio-net是专为虚拟机设计的,优化了很多,貌似出自Redhat,但这款NIC是虚拟的,而且有相对较新,因此大部分OS是不带驱动,需要配合Guest Addition中的驱动使用。 经过大概测试,使用virtio-net比默认的AMD PCNet有大约20%作用的性能提升。virtio-net比较新,以后还有很大提升空间。

网络类型

下面再谈Vbox中的网络类型,这是个老生常谈的话题,尤其是刚接触虚拟机又不熟悉网络的童鞋,个人推荐先简单看下网络方面的知识,尤其是拓扑图,很快就能搞懂。eshizhan在这里只介绍性能方面。

Bridged(桥接), Internal, Host-only这三种类型的性能几乎一样,Network Address Translation (NAT)则是性能最差的,因为功能最复杂嘛。除了Bridged和NAT模式外都不容易访问外网,因此推荐Bridged(桥接)模式。 

内核驱动

这部分主要是需要在Guest启用网卡的segmentation offloading功能,默认是开启的,可以使用ethtool工具查看。

2.VMware

VMware算是虚拟机的行业老大,最近几年各种商业方案也是层出不穷

网络适配器

同样查看官方文档后发现有大概这几类,:

Vlance :其实就是AMD PCNet系列,型号为AMD 79C970 PCnet32- LANCE NIC
VMXNET :VMware自己开发的适用于虚拟环境的虚拟NIC
Flexible :启动时智能在前两者选择最佳NIC, 默认
E1000 :Intel 82545EM Gigabit Ethernet NIC
E1000e :Intel 82574 Gigabit Ethernet NIC
VMXNET 2 (Enhanced):VMXNET改进版
VMXNET 3:VMXNET2改进版

这个毋庸置疑选择VMXNET系列最好,当然也Guest需要Vmware Tools的支持。这里补充一点,网络适配器类型的选择只针对Vmware Server级别的产品如ESX等,像Vmware Palyer,甚至大家常用的VMware Workstation中都无法通过界面选择网络适配器类型,但可以通过修改.vmx配置文件达到同样目的,

打开.vmx文件添加

  ethernet0.virtualDev = "vmxnet3"

  value is "vlance" or "e1000" or "vmxnet" or "vmxnet3"
 

VMware的网络类型和内核驱动和Vbox相同

same Vbox

配置参数

.vmx文件中可以通过一系列参数微调你的虚拟NIC,如缓冲区大小:
 
  ethernet0.numRecvBuffers = 128
  ethernet0.numXmitBuffers = 64
 

3.总结

虚拟机的网络适配器都是依靠CPU去模拟,还没有类似像显卡那样利用硬件加速的技术,因此一方面通过使用为虚拟环境特殊优化过的Paravirtualized(准虚拟化)硬件驱动,另一方面通过使用如Bridged(桥接)模式,配置优化参数等方法将大部分网络IO交给物理NIC,减少CPU中断,来达到虚拟网络环境优化的目的。

 

P.S.

eshizhan测试发现大量并发的网络IO操作,虽然每个包不大,但可能涉及中断太多,导致虚拟网络性能下降很明显,只能达到物理NIC的30%到40%,甚至更低。如果有类似经验的朋友可以指教指教。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐