我们使用具有以下参数的 Ubuntu 12.04:
- 戴尔R910
- 内核 3.2.0-25-generic #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 x Intel(R) Xeon(R) CPU E7- 4870 @ 2.40GHz(每个有 10 个物理内核,支持 HT 和 Intel VT)
- Windows 客户机目前没有 VirtIO,但很快就会改变
我们在这台机器上运行几个 Windows 客户机,其中一个是 Windows 2003 32 位,另一个是 Windows 2008(64 位)。我们目前正在努力解决性能问题并尝试使用 CPU 模型。
我们通常将“qemu-system-x86_64”用于我们的 Windows 32 位客户机,例如:
/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:40 小时才能复制的文件现在可以在 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 型号最适合我的来宾?浏览互联网,我发现了以下资源:
- http://rwmj.wordpress.com/2010/10/08/32-or-64-bit-virtual-cpu-in-kvm/
- http://www.linux-kvm.org/page/Tuning_KVM
当我正确阅读这些网站时,他们声称“-cpu 主机”可能会带来最佳性能。我还不担心迁移,因为两台 KVM 主机的配置相同(完全相同的硬件)。
那么,有经验的 KVM 管理员推荐什么?是否存在黄金法则甚至矩阵,例如“此模型最适合该来宾操作系统”?
如果我能自己找到这些信息,我深表歉意——我运行了各种谷歌搜索并浏览了许多网站。我找不到能回答我问题的东西。
这真的很简单。对于同类集群和单主机设置,请使用该
host
选项。对于混合集群,使用可用的最低 CPU 版本,因此如果一台主机是 Penryn 而另一台是 Nehalem,则在两者上都使用 Penryn。如果您使用的是 RHEV 或 oVirt,它已经内置。VMWare 将其称为“EVC”并将其定位为一项重要功能。
回到性能上来,你绝对需要 virtio,只要你能把它放在任何地方。如果您仍然遇到性能瓶颈,通常可以根据具体情况逐个解决这些瓶颈,具体取决于它们发生的位置。
[offtop]关于你选择的发行版我已经在另一个帖子中评论过了[/offtop]
不要因为调整任何东西而浪费更多时间。
安装 virtIO 驱动程序并返回。差异是如此之大,以至于您现在可以找到的任何增强功能对 virtIO 都没有任何意义。
仅以我们的一台服务器为例:
- 如果没有 virtIO,W2k3 可以处理大约 10 个终端服务器用户
- 使用 virtIO,具有相同操作系统的同一台机器目前可以处理 120 到 125 个用户,速度几乎没有下降。我们添加了另一台虚拟机来在同一台物理计算机上运行 SQL Server
Qemu 的工作方式与许多其他管理程序不同。对于初学者,它可以提供完整的仿真。例如,这意味着您可以在 ARM 处理器上运行 x86 代码。在 KVM 模式下,当您使用它时,它实际上并没有这样做……处理器无论如何都会暴露,但是向操作系统报告的内容将被
-cpu
标志更改。如果您想要更快的速度,那么尝试将虚拟处理器的功能尽可能与您的真实处理器相匹配是一个起点。这将减少调用次优操作码来运行任务的情况,并且还将减少硬件上不可能首先转换为其他内容的操作码。由于您的 Xeon 处理器型号于 2011 年初发布,它可能主要支持 Core i7 系列。为此,我认为 Nehalem 架构是您最好的模拟。
引用您的一个链接(调整 KVM):
因此,如果您觉得您最终可能会四处移动足以产生问题,您可以找到您认为您现在拥有或将来可能拥有的任何处理器支持的所有受支持的指令集,并将它们列出来。
但是,大多数时候,您想坚持使用
-cpu host
. 指定具有较少可用标志的 CPU 意味着应用程序将避免使用可以使它们更快的功能。您混淆了“-cpu 主机”选项。此选项不会仅启用特定于您的主机系统的所有 CPU 功能,它会启用您的 CPU 支持的所有功能以及所有可以模拟的功能,即使您的 CPU 不支持它们也是如此。
-cpu host
是一个不错的选择但不是最有效的,因为它可能会启用您的 cpu 不支持的可以模拟的选项,来宾系统在尝试使用这些需要模拟的功能之一时可能会稍微慢下来.
资料来源:http ://wiki.qemu.org/Features/CPUModels
CentOS 6.7 在 Dell R910 上为我提供了适当的 KVM+Spice 性能。我想一旦你试一试,你就不会再做任何其他事情了(说真的)!