Quanto overhead ha la virtualizzazione x86 / x64?


24

Quanto overhead ha la virtualizzazione x86 / x64 (probabilmente userò VirtualBox, possibilmente VMWare, sicuramente non paravirtualizzazione) per ciascuna delle seguenti operazioni un host Win64 e guest Linux64 che utilizza la virtualizzazione hardware Intel?

  • Codice 64-bit in modalità utente associato alla CPU

  • Codice a 32 bit in modalità utente associato alla CPU

  • File I / O sul disco rigido (mi interessa principalmente la velocità effettiva, non la latenza)

  • I / O di rete

  • Primitive di sincronizzazione thread (mutex, semafori, variabili di condizione)

  • Interruttori di contesto del thread

  • Operazioni atomiche (usando il lockprefisso, cose come confronta-e-scambia)

Sono principalmente interessato al caso x64 assistito dall'hardware (sia Intel che AMD) ma non mi dispiacerebbe sapere della traduzione binaria non assistita e anche dei casi x86 (ovvero host e guest a 32 bit). Non mi interessa la paravirtualizzazione.


(1) "x86" significa 32 bit. Non sarai in grado di eseguire il codice a 64 bit. La virtualizzazione AMD64 (nota anche come x64) presenta limiti diversi poiché richiede estensioni hardware. (2) Intendi virtualizzazione x86 con traduzione binaria (solo x86) o virtualizzazione assistita da hardware (VT)?
Skyhawk,

@Miles: ho chiarito la domanda.
dsimcha,

Risposte:


26

Ho scoperto che non esiste una risposta semplice e assoluta a domande come la tua. Ogni soluzione di virtualizzazione si comporta in modo diverso su specifici test delle prestazioni. Inoltre, test come il throughput I / O del disco possono essere suddivisi in molti test diversi (lettura, scrittura, riscrittura, ...) e i risultati varieranno da una soluzione all'altra e da uno scenario all'altro. Questo è il motivo per cui non è banale indicare una soluzione come la più veloce per l'I / O su disco, ed è per questo che non esiste una risposta assoluta per etichette come overhead per l'I / O su disco.

Diventa più complesso quando si cerca di trovare una relazione tra diversi test di benchmark. Nessuna delle soluzioni che ho testato ha avuto buone prestazioni nei test di micro-operazioni. Ad esempio: all'interno della VM una singola chiamata a "gettimeofday ()" ha richiesto in media 11,5 volte più cicli di clock rispetto all'hardware. Gli hypervisor sono ottimizzati per le applicazioni del mondo reale e non funzionano bene con le micro-operazioni. Questo potrebbe non essere un problema per la tua applicazione che potrebbe adattarsi meglio come applicazione del mondo reale. Con micro-operazione intendo qualsiasi applicazione che impiega meno di 1.000 cicli di clock per terminare (per una CPU da 2,6 GHz, vengono spesi 1.000 cicli di clock in 385 nanosecondi o 3,85e-7 secondi).

Ho svolto test di benchmark approfonditi sulle quattro soluzioni principali per il consolidamento dei data center per l'archittettura x86. Ho eseguito quasi 3000 test confrontando le prestazioni all'interno delle macchine virtuali con le prestazioni hardware. Ho chiamato 'overhead' la differenza delle massime prestazioni misurate all'interno delle VM con le massime prestazioni misurate sull'hardware.

Le soluzioni:

  • VMWare ESXi 5
  • Microsoft Hyper-V Windows 2008 R2 SP1
  • Citrix XenServer 6
  • Red Hat Enterprise Virtualization 2.2

I SO guest:

  • Microsoft Windows 2008 R2 64 bit
  • Red Hat Enterprise Linux 6.1 64 bit

Informazioni sul test:

  • Server: 2X Sun Fire X4150 ciascuno con 8 GB di RAM, 2 CPU Intel Xeon E5440 e quattro porte Gigabit Ethernet
  • Dischi: dischi SAS 6X 136 GB su iSCSI su Ethernet gigabit

Software di riferimento:

  • CPU e memoria: benchmark Linpack per 32 e 64 bit. Questo richiede molta CPU e memoria.

  • I / O e latenza del disco: Bonnie ++

  • I / O di rete: Netperf: TCP_STREAM, TCP_RR, TCP_CRR, UDP_RR e UDP_STREAM

  • Micro-operazioni: rdtscbench : chiamate di sistema, comunicazione tra processi

Le medie sono calcolate con i parametri:

  • CPU e memoria: MEDIA (HPL32, HPL64)

  • I / O su disco: AVERAGE (put_block, rewrite, get_block)

  • I / O di rete: AVERAGE (tcp_crr, tcp_rr, tcp_stream, udp_rr, udp_stream)

  • Micro-operazioni AVERAGE (getpid (), sysconf (), gettimeofday (), malloc [1M], malloc [1G], 2pipes [], simplemath [])

Per il mio scenario di test, usando le mie metriche, le medie dei risultati delle quattro soluzioni di virtualizzazione sono:

Overhead del livello VM, guest Linux:

  • CPU e memoria: 14,36%

  • I / O di rete: 24,46%

  • I / O del disco: 8,84%

  • Latenza del disco per la lettura: 2,41 volte più lenta

  • Tempo di esecuzione di micro-operazioni: 10,84 volte più lento

Sovraccarico layer VM, guest Windows:

  • CPU e memoria media per 32 e 64 bit: 13,06%

  • I / O di rete: 35,27%

  • I / O del disco: 15,20%

Si noti che tali valori sono generici e non riflettono lo scenario di casi specifici.

Leggi l'articolo completo: http://petersenna.com/en/projects/81-performance-overhead-and-comparative-performance-of-4-virtualization-solutions


2
Questo articolo non è aggiornato
dyasny il

1
For a 2.6 GHz CPU, 1,000 clock cycles are spent in 23 milliseconds, non dovrebbe essere una semplice divisione di 1.000 per 2.600.000 per ottenere il numero di secondi che impiegano 1.000 cicli di clock? (che non è 23 millisecondi)
dvdvorle

2
@Sig. Felice, hai ragione. Ho ottenuto 385 nanosecondi di: 1000/2600000000 = 0,000000385 = 385 nanosecondi. Sei d'accordo con questo? Grazie per averlo segnalato.
Peter Senna

@dyasny, sto cercando hardware per ripetere i test con versioni aggiornate. Qualche idea su dove posso trovarlo?
Peter Senna

l'hardware può essere facilmente trovato in un negozio
dyasny il

4

Ci sono troppe variabili nella tua domanda, tuttavia potrei provare a restringerla. Supponiamo che tu vada con VMware ESX, fai tutto nel modo giusto - CPU più recente con supporto per virtualizzazione, strumenti VMware con archiviazione paravirtualizzata e driver di rete, molta memoria. Ora supponiamo che tu esegua una singola macchina virtuale su questa configurazione. Dalla mia esperienza, dovresti avere ~ 90% della velocità della CPU per il carico di lavoro associato alla CPU. Non posso dirti molto sulla velocità della rete, dal momento che stiamo usando collegamenti a 1 Gbps e posso saturare senza problemi, potrebbe essere diverso con il collegamento a 10 Gbps, ma non ne abbiamo. Il throughput di archiviazione dipende dal tipo di archiviazione, con circa l'80% del throughput di archiviazione con l'archiviazione locale, ma per NFS da 1 Gbps è vicino al 100% poiché la rete è un collo di bottiglia. Non posso dire di altre metriche,

Questi numeri sono molto approssimativi e dipendono fortemente dal tipo di carico, dall'hardware, dalla rete. Sta diventando ancora più sfocato quando si eseguono più carichi di lavoro sul server. Ma quello che sto per dire qui è che in condizioni ideali dovresti essere in grado di avvicinarti al 90% delle prestazioni native.

Anche dalla mia esperienza il problema molto più grande per le applicazioni ad alte prestazioni è la latenza ed è particolarmente vero per le applicazioni server client. Abbiamo un motore di calcolo che riceve richieste da oltre 30 clienti, esegue calcoli brevi e restituisce risultati. Su bare metal di solito spinge la CPU al 100% ma lo stesso server su VMware può caricare la CPU solo al 60-80% e questo è principalmente a causa della latenza nella gestione delle richieste / risposte.


Posso dire per esperienza che saturare un collegamento 10GbE con una singola macchina virtuale è molto difficile. Abbiamo usato VMWare FT, che può facilmente saturare un collegamento da 1 Gbps da solo, oltre 10 Gbe e non si è avvicinato alla saturazione.
Mark Henderson

0

Non ho approfondito le prestazioni delle primitive di base come il cambio di contesto e le operazioni atomiche, ma ecco i miei risultati di un test di forza bruta che ho effettuato di recente con diversi hypervisor. Dovrebbe essere indicativo di ciò che potresti aspettarti se la larghezza di banda della CPU e della RAM è limitata.

http://www.altechnative.net/2012/08/04/virtual-performance-part-1-vmware/


2
È fantastico che tu abbia alcune informazioni per Xen e KVM ... Ma per quanto riguarda i due Hypervisor più popolari ?! Mancano completamente. E hai incluso diversi hypervisor di tipo 2, nessun SysAdmin sano lo userebbe per la produzione.
Chris S

Down ha votato. Il link è morto.
Tim Duncklee,
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.