KVM: Hangi CPU özellikleri VM'lerin daha iyi çalışmasını sağlar?


21

Ubuntu 12.04'ü aşağıdaki parametrelerle kullanıyoruz:

  • Dell R910
  • Çekirdek 3.2.0-25-jenerik # 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) İşlemci E7-4870 @ 2.40GHz (her biri 10 fiziksel çekirdek, HT ve Intel VT etkin)
  • Windows konuklarının şu anda VirtIO'ları yok, ancak bu yakında değişecek

Bu makinede birkaç Windows misafir çalıştırıyoruz, bunlardan biri Windows 2003 32 Bit, diğeri Windows 2008 (64 Bit). Şu anda performans sorunlarıyla uğraşıyoruz ve CPU modelleriyle uğraşıyoruz.

Windows 32 Bit konuğumuz için genellikle "qemu-system-x86_64 kullanıyoruz, örneğin:

/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 [...] 

Bu konuğun performansı biraz düşük çıktı. Henüz herhangi bir kıyaslama yapmadık, ancak Diyelim ki, VM içinde bir dizinden diğerine büyük miktarda veri (dosya) kopyalamanın, CPU modelini "-cpu qemu32" den "-cpu Nehalem" e değiştirdiğimizde çok daha hızlı gittiğini varsayalım. ". Yaklaşık 2: 40 saat süren dosyalar, şimdi 40 dakika içinde kopyalanıyor. Elbette bu yüksek kaliteli bir test değil ve daha profesyonel bir girişimde bulunmak için çok fazla alan var. Ancak bu, doğru CPU modelini seçmenin konuğun performansını ağır şekilde etkileyebileceğinin açık bir göstergesidir.

Şimdi merak ettim ve koştum:

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]

Ve:

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

Tüm bu farklı sürümlerde, tahmin etmek biraz zor. "Nehalem" bu listedeki en iyi performans sergiliyor. Şimdi merak ediyorum, misafirim için hangi CPU modelinin en iyi olduğunu nasıl söyleyebilirim? İnternette dolaşırken aşağıdaki kaynakları buldum:

Bu siteleri doğru okuduğumda, "-cpu host" un en iyi performansı getirebileceğini iddia ediyorlar. KVM ana bilgisayarları eşit olarak donatıldığından (tam olarak aynı donanım), göç konusunda henüz endişelenmiyorum.

Peki, deneyimli KVM yöneticileri ne önerir? "Bu model bu konuk işletim sistemi için en iyisidir" gibi bir altın kural veya hatta bir matris var mı?

Bu bilgiyi kendi başıma bulabildiğim için özür dilerim - çeşitli Google aramaları yaptım ve birçok web sitesine göz attım. Soruma cevap verecek bir şey bulamadım.


Neden -cpu anahtarıyla uğraşmıyorsunuz? Sadece dışarıda bırak.
psusi

1
Neden onunla uğraşmıyorsun? Afaik performans iyileştirmeleri sağlayabilir.
Valentin,

İçeri girip bir şeyleri taklit etmesi gerekiyorsa, performansa zarar verecek. Olmadan bir deneyin.
psusi

2
Ben sadece libvirt'in "-host qemu32" parametresini otomatik olarak eklediğini öğrendim, çünkü ayarlamadık.
Valentin,

3
@ psusi: Sadece bugün test ettim ... -cpu anahtarını bıraktığımda, performans mümkün olan en iyi CPU modelini seçtiğim kadar iyidir.
Valentin,

Yanıtlar:


13

Gerçekten çok basit. Homojen kümeler ve tek ana bilgisayar kurulumları için hostseçeneği kullanın. Karışık kümeler için, mevcut en düşük CPU sürümünü kullanın; bu nedenle, bir ana bilgisayar Penryn ve diğer Nehalem ise, her ikisinde de Penryn kullanın.

RHEV veya oVirt kullanıyorsanız, bu zaten yerleşiktir. VMWare "EVC" olarak adlandırılır ve onu büyük bir özellik olarak konumlandırır.

Performansa geri dönersek, koyabileceğiniz her yere kesinlikle ihtiyacın var. Ve eğer performans darboğazlarına hala çarpıyorsanız, bunlar nerede olduklarına bağlı olarak genellikle vaka bazında ele alınabilir.

[offtop] Seçiminizi yaptığınız dağıtım üzerine zaten başka bir konuya yorum yaptım [/ offtop]


Sağol Dyasny, cevap vereceğini ve bana bir tür "altın kural" vereceğini umuyordum!
Valentin,

11

Windows konukları şu anda VirtIO’ya sahip değil

Bir şey ayarlayarak daha fazla zaman kaybetmeyin.
VirtIO sürücülerini yükleyin ve geri dönün. Aradaki fark o kadar büyük ki, şimdi bulabileceğiniz herhangi bir donanımın virtio ile bir anlamı olmayacak.

Sunucularımızdan birine bir örnek:
- virtIO olmadan bir W2k3 yaklaşık 10 Terminal Sunucusu kullanıcısını idare edebilir
- - virtIO ile aynı işletim sistemine sahip aynı makine şu anda 120 ila 125 kullanıcısını biraz yavaşlatır. SQL Server'ı aynı fiziksel bilgisayarda çalıştırmak için başka bir sanal makine ekledik


İpucu için teşekkürler. Evet, VirtIO defenitely etkin olmalı, ancak Windows 2003 konuğu ile önce çözülmesi gereken birkaç sorunla karşı karşıyayız. Bunun yanı sıra, CPU modeli konusunda net bilgi sahibi olmak istiyorum.
Valentin,

Bu Hyper-V kullanmamın bir nedeni. 2008'den beri bu NO INSTALL anlamına geliyor ve Hyper-V için tüm sürücüleri Windows Update ile tutuyor. Uyumluluk sorunları orada ölümcül deamn var.
TomTom

@TomTom Hyper-V, Windows çalıştırma sertifikalı tek hiper yönetici değildir. Ve bu bağlamda sertifikalandırma SVVP / WHQL anlamına gelir.
dyasny

1
Hayır, zaten yüklü olan sürücüler gibi kutunun dışında çalışan tek kişidir;) Artı, Xen’in Hyper-V sürücülerine takıldığını düşünüyorum. Harici olarak güncellenen başka bir elementi korumak zorunda kalmamak gerçekten hoş bir şey. İmzalanıp imzalanmadıkları umurumda değil - hepsi Windows güncellemesi ile geldiği için başka bir sağlayıcıyı izlemekten çekinmiyorum. Ben sadece WISH MS üçüncü parti softawre için Windows Update'i açardı;)
TomTom

1
Slipstreaming ve VM şablonlarını duyduğuna emin olduğum için, bunlardan (neredeyse) bahsetmeyeceğim :) Hyper-V ile olan problemim Linux misafirlerinin son derece zayıf desteği.
dyasny

8

Qemu, diğer birçok hipervizörün yaptığı gibi çalışmıyor. Yeni başlayanlar için tam emülasyon sağlayabilir. Bu, örneğin bir ARM işlemcide x86 kodunu çalıştırabileceğiniz anlamına gelir. KVM modundayken, onu kullanırken, aslında bunu yapmaz ... işlemci ne olursa olsun ortaya çıkar, ancak işletim sistemine bildirilen -cpubayrakla değiştirilir .

Daha yüksek hızlar istiyorsanız, sanal işlemcinin özelliklerini gerçek işlemcinizle mümkün olan en iyi şekilde eşleştirmek ve eşleştirmek için bir başlangıç ​​noktasıdır. Bu, alt-optimal opodların görevleri çalıştırmak için çağrıldığı durumları azaltır ve ayrıca donanımınızın önce başka bir şeye çevrilmesi mümkün olmayan opkodları azaltır. Xeon işlemci modeliniz 2011'in başlarında piyasaya çıktığından, muhtemelen Core i7 serisi ile uyumludur. Bunun için Nehalem mimarisinin en iyi öykünmeniz olduğunu söyleyebilirim.

Bağlantılarınızdan birinden alıntı ( Tuning KVM ):

Mevcut tüm ana bilgisayar işlemci özelliklerini konuğa aktarmak için komut satırı anahtarını kullanın

 qemu -cpu host

Uyumluluğu korumak istiyorsanız, seçilen özellikleri misafirinize gösterebilirsiniz. Tüm ana bilgisayarlarınız bu özelliklere sahipse, uyumluluk korunur:

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

Böylece, bir sorun yaratacak kadar etrafta bir şeyleri dolaştırabileceğinizi düşünüyorsanız, şu an sahip olduğunuz ya da gelecekte sahip olabileceğiniz herhangi bir işlemciyi düşündüğünüz tüm desteklenen komut setlerini bulabilir ve bunları sıralayabilirsiniz.

Yine de çoğu zaman buna bağlı kalmak istiyorsun -cpu host. Daha az kullanılabilir bayraklı bir CPU belirlemek, uygulamaların kendilerini daha hızlı hale getirebilecek özellikleri kullanmaktan kaçınacağı anlamına gelir.


4
Bu sanallaştırma uzantılarına ihtiyaç duyan ve öykünmediği sürece KVM kullanıyor; qemu'ya dayansa bile
Javier

1
Yine de +1 benden -cpu sunucusunu kullanma çabaları ve önerisine oy ver!
Valentin,

3

'-Cpu host' seçeneğinin kafasını karıştırıyorsun. Bu seçenek yalnızca ana sisteminize özgü tüm CPU özelliklerini ETKİLEMEZ, CPU'nuz desteklemese bile CPU'nuzun desteklediği TÜM özellikleri ve taklit edilebilecek her şeyi etkinleştirir.

-cpu ana bilgisayarı
iyi bir seçenektir ancak en verimli değildir, çünkü cpu'nuzun desteklemediği taklit edilebilen seçenekleri etkinleştirebilir, konuk sistemi, taklit edilmesi gereken bu özelliklerden birini kullanmaya çalıştığında, biraz yavaşlatılabilir. .

Kaynak: http://wiki.qemu.org/Features/CPUModels


1
Başlangıçta bu cevabın emule edilebilecek SSE desteği gibi talimat desteğine atıfta bulunduğunu düşünmüştüm. Fakat tabii ki bu, KVM modunda veya TCG'de çalışırken, ikisinin karışımı olarak değil, mantıklı gelmiyor. Bu yüzden burada belirtilen emülasyon, s / b desteği bulunmayan fakat çekirdek bunu taklit edebilen x2apic gibi şeyler olabilir. Bunu sadece başlangıçta kafam karıştığı için yukarıdakileri açıklamaya çalışmaktan söz ediyorum.
Neil McGill

-2

CentOS 6.7, Dell R910'da bana uygun KVM + Spice performansını sunuyor. Bence bir kere atış yaptıysan, başka bir şeye geri dönmeyeceksin (ciddi olarak)!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.