KVM:哪些 CPU 功能可以使虚拟机运行得更好?

KVM:哪些 CPU 功能可以使虚拟机运行得更好?

我们使用的是 Ubuntu 12.04,其参数如下:

  • 戴尔 R910
  • 内核 3.2.0-25-通用#40-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
  • kvm 1:84+dfsg-0ubuntu16+1.0+noroms+0ubuntu13
  • qemu-kvm 1.0+noroms-0ubuntu13
  • qemu-common 1.0+noroms-0ubuntu13
  • qemu-kvm 1.0+noroms-0ubuntu13
  • 4 个 Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz(每个有 10 个物理核心,启用 HT 和 Intel VT)
  • Windows 客户机当前没有 VirtIO,但这种情况很快就会改变

我们在此机器上运行了多个 Windows 客户机,其中一个是 Windows 2003 32 位,另一个是 Windows 2008(64 位)。我们目前正在努力解决性能问题,并尝试了各种 CPU 型号。

对于 Windows 32 位客户机,我们通常使用“qemu-system-x86_64”,例如:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

该客户机的性能有点低。我们还没有运行任何基准测试,但假设当我们将 CPU 型号从“-cpu qemu32”切换到“-cpu Nehalem”时,将虚拟机内的大量数据(文件)从一个目录复制到另一个目录的速度会快得多。复制文件大约需要 2:40h,现在只需 40 分钟即可完成。当然,这不是一个高质量的测试,还有很大的空间来进行更专业的尝试。但这清楚地表明,选择正确的 CPU 型号可能会严重影响客户机的性能。

现在我很好奇并且运行了:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

和:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

由于有这么多不同的版本,所以有点难以猜测。“Nehalem”似乎是该列表中性能最好的。现在我想知道,如何判断哪种 CPU 型号最适合我的客户?浏览互联网后,我找到了以下资源:

当我正确阅读这些网站时,他们声称“-cpu host”可能带来最佳性能。我目前还不担心迁移,因为两个 KVM 主机都配备了相同的配置(完全相同的硬件)。

那么,经验丰富的 KVM 管理员有什么建议?是否有一条黄金法则,甚至是一个矩阵,例如“此模型最适合该客户操作系统”?

如果我自己找不到这些信息,我深感抱歉——我在 Google 上搜索了好几次,也浏览了很多网站。但我没能找到能回答我的问题的内容。

答案1

其实很简单。对于同构集群和单主机设置,请使用该host选项。对于混合集群,请使用最低的可用 CPU 版本,因此如果一个主机是 Penryn,另一个是 Nehalem,则在两个主机上都使用 Penryn。

如果您使用的是 RHEV 或 oVirt,那么它已经内置了。VMWare 将其称为“EVC”,并将其定位为一项重要功能。

回到性能问题上,你肯定需要在所有可以放置 virtio 的地方使用它。如果你仍然遇到性能瓶颈,通常可以根据具体情况解决这些问题,具体取决于它们发生的位置。

[offtop]关于您选择的发行版,我已经在另一个帖子中评论过了[/offtop]

答案2

Windows 客户机当前没有 VirtIO

不要再浪费时间调整任何东西了。
安装 virtIO 驱动程序然后回来。差异是如此巨大,以至于您现在找到的任何增强功能对 virtIO 都毫无意义。

仅以我们的一台服务器为例:
- 没有 virtIO,W2k3 可以处理大约 10 个终端服务器用户
- 使用 virtIO,使用相同操作系统的同一台机器目前可以处理 120 到 125 个用户,速度几乎没有减慢。我们添加了另一台虚拟机来在同一台物理计算机上运行 SQL Server

答案3

Qemu 的工作方式与许多其他虚拟机管理程序不同。首先,它可以提供完全模拟。这意味着您可以在 ARM 处理器上运行 x86 代码。当您在 KVM 模式下使用它时,它实际上不会这样做……无论如何处理器都会暴露,但向操作系统报告的内容将由标志更改-cpu

如果您想要更快的速度,那么首先要尝试将虚拟处理器的功能尽可能地与您的真实处理器相匹配。这将减少调用次优操作码来运行任务的情况,还将减少首先将硬件上不可能的操作码转换为其他操作码的情况。由于您的 Xeon 处理器型号于 2011 年初发布,因此它可能主要支持 Core i7 系列。为此,我认为 Nehalem 架构是您的最佳模拟。

引用你的一个链接(调整 KVM):

要将所有可用的主机处理器功能传递给客户机,请使用命令行开关

 qemu -cpu host

如果您希望保留兼容性,您可以向客户机公开选定的功能。如果您的所有主机都具有以下功能,则兼容性将保留:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

因此,如果您觉得您最终可能会移动足够多的东西而产生问题,您可以找到您认为现在或将来可能支持的任何处理器所支持的所有指令集并列出它们。

不过,大多数时候,你还是希望坚持使用-cpu host。指定具有较少可用标志的 CPU 意味着应用程序将避免使用可以使其运行更快的功能。

答案4

CentOS 6.7 在 Dell R910 上为我提供了适当的 KVM+Spice 性能。我认为一旦你尝试了它,你就不会再使用其他任何东西了(认真的说)!

相关内容