KVM: Quali funzionalità della CPU consentono alle VM di funzionare meglio?


21

Stiamo usando Ubuntu 12.04 con i seguenti parametri:

  • Dell R910
  • Kernel 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 CPU Intel (R) Xeon (R) E7- 4870 a 2,40 GHz (ciascuna con 10 core fisici, HT e Intel VT abilitati)
  • I guest Windows attualmente non hanno VirtIO, ma questo cambierà presto

Stiamo eseguendo diversi guest Windows su questa macchina, uno di questi è Windows 2003 32 bit, un altro Windows 2008 (64 bit). Attualmente siamo alle prese con problemi di prestazioni e ci siamo divertiti con i modelli di CPU.

Di solito utilizziamo "qemu-system-x86_64 per il nostro guest a 32 bit di Windows, ad esempio:

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

Le prestazioni di questo ospite si sono rivelate un po 'basse. Non abbiamo ancora eseguito alcun benchmark, ma diciamo che copiare una grande quantità di dati (file) all'interno della VM da una directory all'altra va molto più veloce quando si passa il modello di CPU da "-cpu qemu32" a "-cpu Nehalem ". I file che hanno impiegato circa 2: 40 ore per essere copiati ora vengono copiati entro 40 minuti. Ovviamente questo non è un test di alta qualità e c'è molto spazio per un tentativo più professionale. Ma questo è un chiaro indicatore che la scelta del modello di CPU corretto potrebbe influire pesantemente sulle prestazioni del guest.

Ora mi sono incuriosito e ho corso:

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]

E:

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

Con tutte queste diverse versioni, è un po 'difficile indovinare. "Nehalem" sembra essere il più performante in quella lista. Ora mi chiedo, come dire quale modello di CPU è il migliore per il mio ospite? Navigando in Internet, ho trovato le seguenti risorse:

Quando leggo questi siti correttamente, affermano che "-cpu host" potrebbe offrire le migliori prestazioni. Non ho ancora dubbi sulla migrazione, poiché entrambi gli host KVM sono equipaggiati allo stesso modo (esattamente lo stesso hardware).

Quindi, cosa raccomandano gli amministratori esperti di KVM? Esiste una regola d'oro o addirittura una matrice, come "questo modello è il migliore per quel SO guest"?

Mi scuso se ho potuto scoprire queste informazioni da solo: ho eseguito varie ricerche su Google e navigato su molti siti Web. Non sono riuscito a trovare qualcosa che risponda alla mia domanda.


Perché perdere tempo con l'interruttore -cpu? Lascialo fuori.
psusi,

1
Perché non preoccuparsene? Inoltre potrebbe portare miglioramenti delle prestazioni.
Valentin,

Se deve intervenire ed emulare le cose, danneggerà le prestazioni. Provalo senza.
psusi,

2
Ho appena scoperto che libvirt aggiunge automaticamente il parametro "-host qemu32", perché non lo impostiamo.
Valentin

3
@psusi: l'ho appena provato oggi ... quando lascio andare l'interruttore -cpu, le prestazioni sono buone come scelgo il miglior modello di CPU possibile.
Valentin

Risposte:


13

È abbastanza semplice davvero. Per cluster omogenei e configurazioni di host singolo utilizzare l' hostopzione. Per i cluster misti, utilizza la versione di CPU disponibile più bassa, quindi se un host è Penryn e l'altro Nehalem, usa Penryn su entrambi.

Se stai usando RHEV o oVirt, questo è già integrato. VMWare lo ha chiamato "EVC" e lo posiziona come una grande funzionalità.

Tornando alle prestazioni, hai sicuramente bisogno di virtio ovunque tu possa metterlo. E se si verificano ancora colli di bottiglia delle prestazioni, di solito questi possono essere risolti caso per caso, a seconda di dove si verificano.

[offtop] Sulla tua scelta di distribuzione ho già commentato in un altro thread [/ offtop]


Grazie Dyasny, speravo che rispondessi e mi fornissi una sorta di "regola d'oro"!
Valentin,

11

I guest Windows attualmente non hanno VirtIO

Non perdere altro tempo a modificare qualsiasi cosa.
Installa i driver virtIO e torna indietro. La differenza è così grande che qualsiasi miglioramento che puoi trovare ora non avrà alcun significato con virtIO.

Solo un esempio con uno dei nostri server:
- senza virtIO un W2k3 può gestire circa 10 utenti Terminal Server
- con virtIO, la stessa macchina con lo stesso sistema operativo attualmente gestisce da 120 a 125 utenti con un piccolo rallentamento. E abbiamo aggiunto un'altra macchina virtuale per eseguire SQL Server sullo stesso computer fisico


Grazie per il suggerimento. Sì, VirtIO dovrebbe essere abilitato in modo definitivo, ma stiamo riscontrando alcuni problemi con il guest Windows 2003 che dovrebbero essere risolti per primi. Oltre a ciò, voglio avere chiarimenti sull'argomento del modello di CPU.
Valentin,

Questo è uno dei motivi per cui utilizzo Hyper-V. Dal 2008 questo significa NESSUN'INSTALLAZIONE e tutti i driver per Hyper-V gestiti con Windows Update. Problemi di compatibilità ci sono mortali.
TomTom,

@TomTom Hyper-V non è l'unico hypervisor certificato per eseguire Windows. E la certificazione in questo contesto significa SVVP / WHQL.
dyasny,

1
No, è l'unico che funziona immediatamente perché contiene già i driver installati;) Inoltre, penso che XEN sia piggiback sui driver Hyper-V. Non dover mantenere un altro elemento aggiornato esternamente è davvero una cosa carina. Non mi importa se sono firmati - il punto è che non devo guardare un altro provider, poiché tutto arriva attraverso Windows Update. Vorrei solo che MS aprisse Windows Update per softawre di terze parti;)
TomTom

1
Dato che sono sicuro di aver sentito parlare di slipstreaming e modelli di VM, non menzionerò (quasi) quelli :) Il mio problema con Hyper-V è il supporto estremamente scarso degli ospiti Linux.
dyasny,

8

Qemu non funziona allo stesso modo di molti altri hypervisor. Per cominciare, può fornire un'emulazione completa. Ciò significa che è possibile eseguire il codice x86 su un processore ARM, ad esempio. Quando in modalità KVM, mentre lo stai usando, in realtà non lo fa ... il processore è esposto a prescindere da cosa, ma ciò che viene segnalato al sistema operativo verrà modificato dal -cpuflag.

Se desideri velocità più elevate, è un punto di partenza per provare ad abbinare le capacità del processore virtuale al tuo processore reale nel miglior modo possibile. Ciò ridurrà i casi in cui vengono chiamati codici operativi sub-ottimali per eseguire attività e ridurrà anche i codici operativi che non sono possibili sull'hardware che vengono prima tradotti in qualcos'altro. Poiché il tuo modello di processore Xeon è stato rilasciato all'inizio del 2011, probabilmente supporta principalmente in linea con la serie Core i7. Per questo, direi che l'architettura di Nehalem è la tua migliore emulazione.

Citando da uno dei tuoi link ( Tuning KVM ):

Per passare tutte le funzionalità del processore host disponibili al guest, utilizzare l'opzione della riga di comando

 qemu -cpu host

se desideri mantenere la compatibilità, puoi esporre le funzionalità selezionate al tuo ospite. Se tutti i tuoi host hanno queste caratteristiche, viene mantenuta la compatibilità:

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

Pertanto, se ritieni che potresti finire per spostare le cose abbastanza per creare un problema, potresti trovare tutti i set di istruzioni supportati che pensi che qualsiasi processore che hai ora o che potresti avere in futuro supporti e li elimini.

La maggior parte delle volte, però, vuoi restare fedele -cpu host. Specificare una CPU con flag meno disponibili significa che le applicazioni eviteranno di utilizzare funzionalità che potrebbero renderle più veloci.


4
Sta usando KVM, che ha bisogno di quelle estensioni di virtualizzazione e non esegue l'emulazione; anche se è basato su qemu
Javier

1
Ancora +1 voto da parte mia per gli sforzi e la raccomandazione di usare -cpu host!
Valentin,

3

Stai confondendo l'opzione '-cpu host'. Questa opzione NON abilita solo tutte le funzionalità della CPU specifiche del sistema host, abilita TUTTE le funzionalità supportate dalla CPU e tutto ciò che può essere emulato anche se la CPU non le supporta.

-cpu host
è una buona opzione ma non la più efficiente, perché potrebbe abilitare le opzioni che possono essere emulate che la tua cpu non supporta, il sistema guest può essere leggermente rallentato ogni volta che tenta di utilizzare una di queste funzionalità che devono essere emulate .

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


1
Inizialmente pensavo che questa risposta si riferisse al supporto delle istruzioni, ad esempio il supporto SSE che poteva essere emulato. Ma ovviamente non ha senso se corri in modalità KVM o TCG e non un mix di entrambi. Quindi immagino che l'emulazione a cui si fa riferimento qui potrebbe essere cose come x2apic in cui non c'è supporto h / w ma il kernel può falsificarlo. Ne parlo solo per cercare di chiarire quanto sopra, poiché inizialmente mi ero confuso.
Neil McGill,

-2

CentOS 6.7 mi offre le prestazioni KVM + Spice adeguate su Dell R910. Penso che una volta che ci provi non tornerai a nient'altro (sul serio)!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.