KVM:哪些 CPU 特性使 VM 執行得更好?
我們正在使用具有以下參數的 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 host”可能會帶來最佳性能。我還不擔心遷移,因為兩個 KVM 主機都配備了相同的設備(完全相同的硬體)。
那麼,有經驗的 KVM 管理員有什麼建議呢?是否有黃金法則甚至矩陣,例如“此模型最適合該客戶作業系統”?
如果我能自己找到這些資訊,我深表歉意——我執行了各種穀歌搜尋並瀏覽了許多網站。我找不到能回答我問題的東西。
這真的很簡單。對於同構集群和單主機設置,請使用該
host
選項。對於混合集群,使用最低的可用 CPU 版本,因此如果一台主機是 Penryn 而另一台是 Nehalem,則在兩者上都使用 Penryn。如果您使用的是 RHEV 或 oVirt,這已經是內置的。VMWare 將其稱為“EVC”並將其定位為一個巨大的功能。
回到性能,你肯定需要 virtio 任何你可以放的地方。如果您仍然遇到性能瓶頸,通常可以根據具體情況解決這些問題,具體取決於它們發生的位置。
$$ offtop $$關於您選擇的發行版,我已經在另一個文章中發表了評論$$ /offtop $$