x86/x64 虚拟化有多少开销?

x86/x64 虚拟化有多少开销?

x86/x64 虚拟化(我可能会使用 VirtualBox,也可能是 VMWare,绝对不是半虚拟化)对于使用英特尔硬件虚拟化的 Win64 主机和 Linux64 客户机执行以下每个操作有多少开销?

  • 纯粹受 CPU 限制的用户模式 ​​64 位代码

  • 纯粹受 CPU 限制的用户模式 ​​32 位代码

  • 硬盘的文件 I/O(我最关心的是吞吐量,而不是延迟)

  • 网络 I/O

  • 线程同步原语(互斥锁、信号量、条件变量)

  • 线程上下文切换

  • 原子操作(使用lock前缀,例如比较和交换)

我主要对硬件辅助 x64 的情况感兴趣(英特尔和 AMD 都如此),但也不介意了解非辅助二进制翻译和 x86(即 32 位主机和客户机)的情况。我对半虚拟化不感兴趣。

答案1

我发现对于像您这样的问题,没有简单而绝对的答案。每个虚拟化解决方案在特定性能测试中的表现都不同。此外,磁盘 I/O 吞吐量等测试可以分为许多不同的测试(读取、写入、重写等),结果会因解决方案和场景而异。这就是为什么指出一个解决方案是磁盘 I/O 速度最快的并非易事,这就是为什么对于磁盘 I/O 开销等标签没有绝对的答案。

当试图找出不同基准测试之间的关系时,情况会变得更加复杂。我测试过的所有解决方案在微操作测试中都没有良好的表现。例如:在 VM 内部,对“gettimeofday()”的一次调用平均比在硬件上多花费 11.5 倍的时钟周期才能完成。虚拟机管理程序针对实际应用程序进行了优化,在微操作方面表现不佳。这对您的应用程序来说可能不是问题,它可能更适合实际应用程序。我所说的微操作是指任何花费不到 1,000 个时钟周期才能完成的应用程序(对于 2.6 GHz CPU,1,000 个时钟周期需要 385 纳秒,即 3.85e-7 秒)。

我对 x86 架构的四种主要数据中心整合解决方案进行了广泛的基准测试。我进行了近 3000 次测试,比较了虚拟机内部的性能和硬件性能。我将虚拟机内部测量的最大性能与硬件上测量的最大性能之间的差异称为“开销”。

解决方案:

  • VMWare ESXi 5
  • 微软 Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • 红帽企业虚拟化 2.2

客户操作系统:

  • Microsoft Windows 2008 R2 64 位
  • Red Hat Enterprise Linux 6.1 64 位

测试信息:

  • 服务器:2 个 Sun Fire X4150,每个配备 8GB RAM,2 个 Intel Xeon E5440 CPU,以及四个千兆以太网端口
  • 磁盘:6X 136GB SAS 磁盘,通过千兆以太网 iSCSI

基准测试软件:

  • CPU 和内存:Linpack 基准测试适用于 32 位和 64 位。这会占用大量 CPU 和内存。

  • 磁盘 I/O 和延迟:Bonnie++

  • 网络 I/O:Netperf:TCP_STREAM、TCP_RR、TCP_CRR、UDP_RR 和 UDP_STREAM

  • 微操作:rdtscbench:系统调用、进程间管道通信

平均值使用以下参数计算:

  • CPU 和内存:平均值(HPL32、HPL64)

  • 磁盘 I/O:AVERAGE(put_block、rewrite、get_block)

  • 网络 I/O:AVERAGE(tcp_crr、tcp_rr、tcp_stream、udp_rr、udp_stream)

  • 微操作 AVERAGE(getpid()、sysconf()、gettimeofday()、malloc[1M]、malloc[1G]、2pipes[]、simplemath[])

对于我的测试场景,使用我的指标,四种虚拟化解决方案的结果平均值为:

VM 层开销,Linux 客户机:

  • CPU 和内存:14.36%

  • 网络 I/O:24.46%

  • 磁盘 I/O:8.84%

  • 磁盘读取延迟:慢 2.41 倍

  • 微操作执行时间:慢 10.84 倍

VM 层开销,Windows 客户机:

  • 32 位和 64 位 CPU 和内存平均值:13.06%

  • 网络 I/O:35.27%

  • 磁盘 I/O:15.20%

请注意,这些值是通用的,并不反映具体的情况。

请查看全文:http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions

答案2

您的问题中变量太多,但我可以尝试缩小范围。假设您使用 VMware ESX,您做的所有事情都正确无误 - 支持虚拟化的最新 CPU、具有半虚拟化存储和网络驱动程序的 VMware 工具、充足的内存。现在假设您在此设置上运行单个虚拟机。根据我的经验,对于 CPU 绑定的工作负载,您的 CPU 速度应该达到 ~90%。我无法告诉您太多有关网络速度的信息,因为我们使用的是 1Gbps 链接,我可以毫无问题地使其饱和,使用 10Gbps 链接可能会有所不同,但我们没有这些链接。存储吞吐量取决于存储类型,使用本地存储我可以获得大约 ~80% 的存储吞吐量,但对于 1Gbps NFS,它接近 100%,因为网络是这里的瓶颈。无法告知其他指标,您需要使用自己的代码进行实验。

这些数字非常近似,并且高度依赖于您的负载类型、硬件和网络。当您在服务器上运行多个工作负载时,情况会变得更加模糊。但我在这里要说的是,在理想条件下,您应该能够获得接近本机性能的 90%。

此外,根据我的经验,高性能应用程序面临的更大问题是延迟,对于客户端服务器应用程序尤其如此。我们有一个计算引擎,它接收来自 30 多个客户端的请求,执行简短计算并返回结果。在裸机上,它通常会将 CPU 推至 100%,但 VMware 上的同一台服务器只能将 CPU 加载到 60-80%,这主要是因为处理请求/回复的延迟。

答案3

我还没有深入研究上下文切换和原子操作等基本原语的性能,但这是我最近对不同虚拟机管理程序进行的强力测试的结果。如果您的 CPU 和 RAM 带宽受限,它应该可以表明您可能期望的结果。

https://altechnative.net/virtual-performance-or-lack-thereof/

相关内容