最近测试中发现虚拟机的网络性能遇到了瓶颈,于是想一探究竟,发现自己一直忽略了这块儿知识,于是做个笔记。
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 NICVMXNET :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相同
配置参数
ethernet0.numXmitBuffers = 64
3.总结
虚拟机的网络适配器都是依靠CPU去模拟,还没有类似像显卡那样利用硬件加速的技术,因此一方面通过使用为虚拟环境特殊优化过的Paravirtualized(准虚拟化)硬件驱动,另一方面通过使用如Bridged(桥接)模式,配置优化参数等方法将大部分网络IO交给物理NIC,减少CPU中断,来达到虚拟网络环境优化的目的。
P.S.
eshizhan测试发现大量并发的网络IO操作,虽然每个包不大,但可能涉及中断太多,导致虚拟网络性能下降很明显,只能达到物理NIC的30%到40%,甚至更低。如果有类似经验的朋友可以指教指教。