VMware和VirtualBox中的网络适配器类型及虚拟网络性能优化
最近测试中发现虚拟机的网络性能遇到了瓶颈,于是想一探究竟,发现自己一直忽略了这块儿知识,于是做个笔记。
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相同
配置参数
ethernet0.numXmitBuffers = 64
3.总结
虚拟机的网络适配器都是依靠CPU去模拟,还没有类似像显卡那样利用硬件加速的技术,因此一方面通过使用为虚拟环境特殊优化过的Paravirtualized(准虚拟化)硬件驱动,另一方面通过使用如Bridged(桥接)模式,配置优化参数等方法将大部分网络IO交给物理NIC,减少CPU中断,来达到虚拟网络环境优化的目的。
P.S.
eshizhan测试发现大量并发的网络IO操作,虽然每个包不大,但可能涉及中断太多,导致虚拟网络性能下降很明显,只能达到物理NIC的30%到40%,甚至更低。如果有类似经验的朋友可以指教指教。
VMware和VirtualBox中的网络适配器类型及虚拟网络性能优化相关推荐
- 在线答题小程序开发中遇到的一些兼容问题及性能优化
本文主要记录在线答题小程序开发过程中遇到的一些兼容问题以及性能优化. 作为题库小程序刷题小程序的开发者,在开发过程中经常会遇到这样那样的问题,这就要善于去总结和做笔记了,不断地优化与进一步完善,方便下 ...
- Java中String对象的replaceAll方法调用性能优化小技巧
Java中String对象的replaceAll方法调用性能优化小技巧 0x01 Java中String对象的replaceAll方法调用性能优化小技巧 1.1 What? 1.2 Why? 1.3 ...
- 如何从8 道面试题中,看出浏览器渲染过程与性能优化
前言 移动互联网时代,用户对于网页的打开速度要求越来越高.百度用户体验部研究表明,页面放弃率和页面的打开时间关系如下图 所示. 根据百度用户体验部的研究结果来看,普通用户期望且能够接受的页面加载时间在 ...
- MySQL中聚合函数count的使用和性能优化
本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 count 连用 3.group by (多个字段) ...
- Oracle执行exists优化,PHP_解决Oracle性能优化中的问题, 在Oracle性能优化时,用exists - phpStudy...
在Oracle性能优化时,用exists替代in,用表链接替代exists,关于前者,一般效果比较明显,exists效率明显比in高,但是如果要想表连接的效率比exists高,必须在from子句中,将 ...
- mysql聚合函数count用法_MySQL中聚合函数count的使用和性能优化技巧
本文的环境是Windows 10,MySQL版本是5.7.12-log 一. 基本使用 count的基本作用是有两个: 统计某个列的数据的数量: 统计结果集的行数: 用来获取满足条件的数据的数量.但是 ...
- spark sql 查看分区_Spark 3.0 中七个必须知道的 SQL 性能优化
本文来自 IBM 东京研究院的高级技术人员 Kazuaki Ishizaki 博士在 Spark Summit North America 2020 的 <SQL Performance Imp ...
- sql优化ppt_Spark优化 | Spark 3.0 中七个必须知道的 SQL 性能优化
本文来自 IBM 东京研究院的高级技术人员 Kazuaki Ishizaki 博士在 Spark Summit North America 2020 的 <SQL Performance Imp ...
- java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...
尽量指定类.方法的final修饰符 Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化.此举大概能够使性能平均提高50%. 尽量重用对象 ...
最新文章
- 查看Oracle数据库SQL执行历史
- PyTorch 训练加速
- No module named MySQLdb (django)
- numpy学习3:对象属性和基本数据类型
- list::splice函数的用法与参数解释
- mysql自动提交 dcl语句_MySQL基础:DCL语句总结
- VTK:图片之ImageToStructuredPoints
- 注意力机制可视化_最强NLP模型BERT可视化学习
- [BZOJ 3028]食物(生成函数)
- java name_Java枚举name()方法及示例
- 服务器装系统后安装驱动失败,windows10系统下驱动人生安装驱动失败如何解决
- Windows下Postman安装以及汉化
- Qt —— 完美制作win系统扬声器、麦克风控制程序
- angular-Forms patchValue and setValue
- Ubuntu设置开机启动项目
- 男友是程序员,看着他压力大我难受。有哪些缓解压力的好方法?
- ns3中PointToPointDumbbellHelper类的引入方法(哑铃型网络模拟)
- 2022-2027年中国移动音乐行业市场调研及未来发展趋势预测报告
- JAVA散列表个人通讯录_散列表实现简易通讯录
- 学硕与专硕,全日制与非全日制,定向与非定向......8大考研常识,你清楚吗?