最近測試中發現虛擬機的網絡性能遇到了瓶頸,於是想一探究竟,發現自己一直忽略了這塊兒知識,於是做個筆記。
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%,甚至更低。如果有類似經驗的朋友可以指教指教。