KVM:哪些CPU功能可以使VM更好地运行?


21

我们正在使用具有以下参数的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®Xeon®CPU E7-4870 @ 2.40GHz(每个具有10个物理核心,启用HT和Intel VT)
  • Windows guest虚拟机目前没有VirtIO,但是很快就会改变

我们正在这台计算机上运行多个Windows guest虚拟机,其中一个是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”时,将VM中的大量数据(文件)从一个目录复制到另一个目录会更快。 ”。现在,大约需要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模式最适合我的客人?浏览Internet时,我发现以下资源:

当我正确阅读这些站点时,他们声称“ -cpu主机”可能带来最佳性能。我还不需要担心迁移,因为两台KVM主机均配备相同(硬件完全相同)。

那么,有经验的KVM管理员推荐什么?是否存在黄金法则甚至矩阵,例如“此模型最适合该来宾OS”?

如果可以自己找到这些信息,我深表歉意-我进行了各种Google搜索并浏览了许多网站。我找不到能回答我问题的东西。


为什么要打扰-cpu开关呢?随便吧。
psusi

1
为什么不理会它呢?Afaik它可以带来性能上的改善。
瓦伦丁

如果它必须介入并模仿事物,那将会损害性能。尝试一下。
psusi 2012年

2
我刚刚发现libvirt自动添加参数“ -host qemu32”,因为我们没有设置它。
瓦伦丁

3
@psusi:今天刚刚测试过……当我不使用-cpu开关时,性能与选择最佳CPU模型一样好。
瓦伦丁

Answers:


13

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

如果您使用的是RHEV或oVirt,则它已内置。VMWare将此名称称为“ EVC”,并将其定位为一个强大的功能。

回到性能上,您绝对可以在任何地方都需要virtio。而且,如果您仍然遇到性能瓶颈,通常可以根据具体情况逐个解决这些瓶颈,具体取决于发生的位置。

[offtop]关于您选择的发布方式,我已经在另一个线程中发表了评论[/ offtop]


谢谢dyasny,希望您能答复并为我提供某种“黄金法则”!
瓦伦丁

11

Windows guest虚拟机当前没有VirtIO

调整时不要浪费更多时间。
安装virtIO驱动程序,然后回来。差异是如此之大,以至于您现在可以找到的任何增强功能对于virtIO都没有任何意义。

只是其中一台服务器的示例:
-如果没有virtIO,则W2k3可以处理大约10个终端服务器用户
-使用virtIO,具有相同操作系统的同一台计算机当前可以处理120到125个用户,而速度变慢。我们添加了另一台虚拟机以在同一台物理计算机上运行SQL Server


感谢您的提示。是的,应该严格启用VirtIO,但是Windows 2003 guest虚拟机遇到了一些问题,应该首先解决。除此之外,我想澄清有关CPU模型的主题。
瓦伦丁

这是我使用Hyper-V的原因之一。自2008年以来,这意味着无需安装,这意味着Windows Update维护了所有Hyper-V驱动程序。那里的兼容性问题是致命的。
TomTom 2012年

@TomTom Hyper-V不是唯一经过认证可运行Windows的虚拟机监控程序。在这种情况下,认证意味着SVVP / WHQL。
dyasny 2012年

1
不,它是唯一可以直接使用的工具,因为它已经安装了驱动程序;)另外,我认为XEN可以在Hyper-V驱动程序上使用。不必维护另一个外部更新的元素是一件非常好的事情。我不在乎它们是否已签名-关键是我不必再看其他提供程序,因为所有内容都通过Windows Update来提供。我只是希望MS可以为第三方softawre打开Windows Update;)
TomTom,

1
由于我确定您已经听说过滑流和VM模板,因此我将(几乎)不提那些:) Hyper-V的问题在于Linux来宾系统的支持极差。
dyasny 2012年

8

Qemu的工作方式与许多其他虚拟机管理程序不同。对于初学者,它可以提供完整的仿真。例如,这意味着您可以在ARM处理器上运行x86代码。在KVM模式下,当您使用它时,它实际上并不会执行此操作……无论如何,处理器都会暴露,但是报告给OS的内容将被该-cpu标志更改。

如果您想要更快的速度,则可以尝试将虚拟处理器的功能与实际处理器尽可能地匹配,这是一个起点。这样可以减少调用次优操作码来运行任务的情况,也可以减少将硬件上无法转换的操作码首先转换为其他操作的情况。自从您的Xeon处理器型号于2011年初发布以来,它大概支持Core i7系列的大部分产品。为此,我想说Nehalem体系结构是您最好的仿真。

从您的链接之一报价(调整KVM):

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

 qemu -cpu host

如果您希望保持兼容性,则可以向来宾展示所选功能。如果您的所有主机都具有这些功能,则将保留兼容性:

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

因此,如果您觉得自己最终可能会四处走动,从而造成问题,则可以找到所有受支持的指令集,认为您现在拥有或将来可能拥有的任何处理器都支持并列出这些处理器。

不过,在大多数情况下,您都想坚持-cpu host。指定具有较少可用标志的CPU意味着应用程序将避免使用可使它们更快的功能。


4
他正在使用KVM,它需要这些虚拟化扩展,并且不能运行仿真。即使它基于qemu
Javier

1
对于我使用-cpu主机的努力和建议,我仍然+1票!
瓦伦丁

3

您对'-cpu host'选项感到困惑。此选项不会仅启用特定于主机系统的所有CPU功能,它会启用CPU支持的所有功能以及所有可以模拟的功能,即使您的CPU不支持这些功能。

-cpu host
是一个不错的选择,但不是最有效的选择,因为它可能会启用可以被您的cpu不支持仿真的选项,来宾系统在尝试使用这些需要仿真的功能之一时可能会稍微变慢。

资料来源:http : //wiki.qemu.org/Features/CPUModels


1
最初,我认为该答案涉及指令支持,例如可以模拟的SSE支持。但这当然没有意义,因为您要么以KVM模式运行,要么以TCG运行,而不是两者兼而有之。因此,我猜这里提到的仿真可能是x2apic之类的东西,其中没有硬件支持,但内核可以伪造它。我仅提及这一点是为了尝试澄清以上内容,因为它最初使我感到困惑。
尼尔·麦吉尔

-2

CentOS 6.7在Dell R910上为我提供了适当的KVM + Spice性能。我认为,一旦您试一试,您就不会再重蹈覆辙了!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.