x86 / x64虚拟化(我可能会使用VirtualBox,可能VMWare,绝对不是半虚拟化)对于以下每个操作有多less使用Intel硬件虚拟化的Win64主机和Linux64客户机?
纯粹的CPU绑定,用户模式的64位代码
纯粹的CPU绑定,用户模式的32位代码
文件I / O到硬盘驱动器(我主要关心吞吐量,而不是延迟)
networkingI / O
线程同步原语(互斥量,信号量,条件variables)
线程上下文切换
primefaces操作(使用lock
前缀,比较和交换等)
我主要对硬件辅助的x64情况(包括Intel和AMD)感兴趣,但是不会介意关于无辅助二进制转换和x86(即32位主机和来宾)情况。 我对半虚拟化不感兴趣。
我发现对于像你这样的问题,并不是简单而绝对的答案。 每个虚拟化解决scheme在特定的性能testing上performance不同。 此外,像磁盘I / O吞吐量这样的testing可以在许多不同的testing(读取,写入,重新写入…)中进行分割,结果将随解决scheme和scheme而变化。 这就是为什么将一个解决scheme指向磁盘I / O速度最快的原因,这就是为什么没有像磁盘I / O开销这样的标签的绝对答案。
当试图find不同基准testing之间的关系时,它变得更加复杂。 我所testing的解决scheme在微操作testing中都没有很好的性能。 例如:在VM内部,对“gettimeofday()”的单次调用平均花费了11.5倍的时钟周期来完成。 虚拟机pipe理程序针对真实世界的应用程序进行了优化,在微操作上performance不佳。 这对您的应用程序来说可能不是问题,它可能更适合现实世界的应用程序。 我的意思是通过微操作,花费less于1,000个时钟周期的任何应用程序完成(对于2.6GHz CPU,在385纳秒或3.85e-7秒内花费1,000个时钟周期)。
我对x86架构的数据中心整合的四个主要解决scheme进行了广泛的基准testing。 我做了近3000次testing,比较了虚拟机内部的性能和硬件性能。 我已经把虚拟机内测量的最大性能与硬件上测量的最大性能的差异称为“开销”。
解决scheme:
客户操作系统:
testing信息:
基准软件:
CPU和内存:32位和64位的Linpack基准testing 。 这是CPU和内存密集型。
磁盘I / O和延迟:Bonnie ++
networkingI / O:Netperf:TCP_STREAM,TCP_RR,TCP_CRR,UDP_RR和UDP_STREAM
微操作: rdtscbench :系统调用,进程间pipe道通信
平均值使用参数计算:
CPU和内存:AVERAGE(HPL32,HPL64)
磁盘I / O:AVERAGE(put_block,rewrite,get_block)
networkingI / O:AVERAGE(tcp_crr,tcp_rr,tcp_stream,udp_rr,udp_stream)
微操作AVERAGE(getpid(),sysconf(),gettimeofday(),malloc [1M],malloc [1G],2pipes [],simplemath [])
对于我的testing场景,使用我的指标,四个虚拟化解决scheme的结果的平均值为:
VM层开销,Linux来宾:
CPU和内存:14.36%
networkingI / O:24.46%
磁盘I / O:8.84%
读取磁盘延迟:2.41倍慢
微操作执行时间:慢10.84倍
VM层开销,Windows来宾:
32位和64位的CPU和内存平均值:13.06%
networkingI / O:35.27%
磁盘I / O:15.20%
请注意,这些值是通用的,并不反映特定情况下的情况。
请看完整的文章: http : //petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions
你的问题有太多的变数,但我可以尝试缩小它的范围。 让我们假设你使用VMware ESX,你做的一切都是正确的 – 最新的CPU支持虚拟化,具有半虚拟化存储和networking驱动的VMware工具,大量的内存。 现在让我们假设您在此设置上运行单个虚拟机。 根据我的经验,CPU约束的CPU工作量应该达到90%左右。 我不能告诉你很多关于networking速度的信息,因为我们使用的是1Gbps链路,而且我可以毫无问题地达到饱和,但是10Gbps链路可能会有所不同,但是我们没有任何一个。 存储吞吐量取决于存储types,使用本地存储可以获得大约80%的存储吞吐量,但对于1Gbps的NFS,存储吞吐量接近100%,因为networking是瓶颈。 无法告诉其他指标,您需要对自己的代码进行实验。
这些数字是非常接近的,它高度依赖于你的负载types,你的硬件,你的networking。 当您在服务器上运行多个工作负载时,它变得更加模糊。 但是我想说的是,在理想条件下,你应该能够获得近90%的本土performance。
另外从我的经验来看,高性能应用程序面临的更大的问题是延迟,对于客户端服务器应用程序尤其如此。 我们有一个计算引擎,接收来自30多个客户的请求,执行短计算并返回结果。 在裸机上,它通常会将CPU推到100%,但VMware上的同一台服务器只能将CPU加载到60-80%,这主要是因为处理请求/回复的延迟。
我没有深入到像上下文切换和primefaces操作这样的基本原语的performance,但是这里是我最近用不同的pipe理程序进行的一个powershelltesting的结果。 如果你主要是CPU和RAM的带宽有限,它应该是你可能期望的。
http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/