Quindi davvero, qual è il sovraccarico della virtualizzazione e quando dovrei preoccuparmi?


16

Sto cercando buone regole empiriche per capire quando NON virtualizzare una macchina.

Ad esempio, so che un processo completamente associato alla CPU con un utilizzo vicino al 100% non è probabilmente una buona idea da virtualizzare, ma ha senso eseguire qualcosa che sfrutti la CPU per la maggior parte del tempo un "importo sostanziale" (diciamo 40 o 50%)?

Un altro esempio: se virtualizzo 1000 macchine, anche se sono utilizzate solo in modo leggero o moderato, probabilmente sarebbe male eseguire tutto su un host con solo 4 core.

Qualcuno può riassumere i suggerimenti sulla virtualizzazione in base al carico di lavoro della macchina o al numero puro di macchine guest rispetto alle risorse host?

In genere virtualizzo su host Windows usando VirtualBox o VMWare, ma suppongo che questa sia una domanda piuttosto generica.


1
anche con alcune attività legate alla CPU c'è un punto di virtualizzazione: consentire agli utenti di inviare lavori ai cluster poiché le immagini VM consentono loro un controllo molto maggiore sull'ambiente in cui i lavori vengono eseguiti rispetto a quanto sarebbe possibile con un semplice programmatore batch, ad esempio.
Flexo,

Ma a un certo punto la pianificazione dell '"esecuzione della VM" sembra inutile sovraccarico quando è già abbastanza difficile pianificare thread all'interno di una singola VM, ho ragione?
kvista,

Risposte:


13

Sottosistema disco. Questa di solito è la risorsa meno condivisibile. La memoria, ovviamente, ma quella è evidente.

Le limitazioni del sottosistema del disco funzionano in entrambi i modi. Se un sistema utilizza molti I / O su disco, gli altri guest rallentano. Se questo ospite è in produzione, ha probabilmente bisogno di una risposta rapida alle query web. Questo può essere molto frustrante e anche un grande motivo per non noleggiare hardware virtuale. È possibile ridurre al minimo questo problema utilizzando i dischi dedicati.

L'uso di solo 512 MB di memoria nei guest mette tutta la cache del disco sull'host. E non è equamente diviso tra gli ospiti.

Non preoccuparti per l'IO della CPU. In questo modo la virtualizzazione è molto efficiente, spesso correlata come solo più processi in esecuzione sullo stesso sistema. Raramente vedo sistemi multi-xeon in esecuzione al 100% su CPU.

modifica: errori di battitura


3
i requisiti di I / O su disco pesante sarebbero la ragione numero 1 per non virtualizzare - è la risorsa più colpita dalle penalità di virtualizzazione, vedi codinghorror.com/blog/2006/10/…
Jeff Atwood,

Grazie - entrambi i commenti sono utili. Ti stai solo chiedendo se qualcuno sa perché l'uso elevato del disco è problematico da virtualizzare? Perché gli ingegneri della virtualizzazione ignorerebbero questo problema relativamente basilare? O è fondamentalmente più complesso della virtualizzazione della CPU?
kvista,

Nota - @Jeff, sto leggendo il tuo post sul blog del 2006 e presumo che spiegherà perché (meglio, prenotazione mandrino), ma la mia domanda ai progettisti / implementatori della virtualizzazione rimane la stessa - è fondamentalmente problematico per la virtualizzazione in un modo in cui la virtualizzazione della CPU non lo è?
kvista,

3
Ci sono solo così tante ricerche che un hard disk può fare. Per 5ms hard disk questo sarebbe 200 cerca un secondo. E, in generale, quando un sistema operativo copia i file o esegue la scansione delle directory, utilizza sempre il 100% del disco io. Durante questo periodo, tutte le piccole richieste dal disco vengono ritardate e ce ne sono molte. Anche i buffer del filesystem vengono sprecati a causa della copia. Si potrebbe dire che il nostro concetto di sistema operativo funzionante si basa su un hard disk inattivo.
Antti Rytsölä,

1
Grazie. Immagino che sarebbe interessante vedere se gli SSD cambiassero questa equazione. Ma ora ci stiamo avvicinando troppo alla modalità discussione. Ho capito - grazie a tutti.
kvista,

15

Cose che non metterei mai in una VM:

  • Tutto ciò che utilizza hardware specifico che non può essere virtualizzato: di solito grafica, alcuni moduli di sicurezza hardware, qualsiasi cosa con driver personalizzati (driver di rete per scopi speciali, ad esempio).

  • Sistemi con problemi di licenza. Alcuni addebiti software per CPU fisica o core, indipendentemente dal numero di allocazioni alla VM. Verrai colpito in un controllo se avessi la licenza software per un singolo core in esecuzione in una macchina virtuale su un server a 32 core.

Cose che scoraggerei inserendo una VM:

  • Software che fa già uno sforzo per utilizzare tutte le risorse nell'hardware delle materie prime. Le macchine che lavorano come parte di uno sforzo di "big data" come hadoop sono in genere progettate per funzionare su metallo nudo.

  • Tutto ciò che sarà messo a punto per fare uso delle risorse. Quando inizi davvero a mettere a punto un database, le macchine virtuali in cerca di risorse lanciano davvero una chiave nel lavoro.

  • Tutto ciò che ha già un grosso collo di bottiglia. Già non gioca bene con se stesso, probabilmente non giocherà bene con gli altri.

Ci sono alcune cose che sono abbastanza fantastiche per mettere in VM:

  • Tutto ciò che passa un bel po 'di tempo al minimo. Gli host di utilità come posta e DNS hanno difficoltà a generare un carico sufficiente su hardware moderno per garantire server dedicati.

  • Applicazioni che non si adattano bene (o facilmente) da sole. Il codice legacy abbastanza spesso rientra in questa categoria. Se l'app non si espanderà per occupare il server, usa molti piccoli server virtuali.

  • Progetti / applicazioni che iniziano in piccolo ma crescono. È molto più semplice aggiungere risorse a una macchina virtuale (oltre a passare a hardware più nuovo e più grande) piuttosto che avviarsi su bare metal.

Inoltre, non sono sicuro se stai esagerando nel mettere un numero enorme di VM su un singolo host, ma se stai cercando una VM di grandi dimensioni: rapporto HW, potresti prendere in considerazione ESX, Xen, KVM. Farai molto meglio dell'utilizzo di VMware o virtualbox su Windows.


1
+1 commenti organizzati molto utili - grazie!
kvista,

Un altro commento - anche se uso ESX, ecc. Suppongo che a un certo punto non abbia senso inserire macchine X su un host Y core. Quali sono le buone regole pratiche? Presumo che i white paper sulla virtualizzazione da qualche parte debbano affrontare questo problema, ma purtroppo non sono in grado di trovarlo facilmente.
kvista,

1
Per VMware, puoi iniziare qui: vmware.com/technology/whyvmware/calculator
Cakemox,

Per riferimento: per il collegamento VMWare sopra è possibile configurare fino a 30 VM per CPU. L'impostazione predefinita è 6 VM per CPU.
Alex Yursha,

4

Esistono due punti per le prestazioni di virtualizzazione.

  • collo di bottiglia condiviso
  • emulazione

Sui colli di bottiglia condivisi, chi altro è sullo stesso ferro? Se ti trovi in ​​un ambiente virtualizzato, sei molto dipendente dal fatto che il partner di hosting sia onesto con te.

Penso che la domanda principale da porre sulle prestazioni grezze (in particolare l'interattività) sia quali parti del sistema di virtualizzazione sono emulate. Ciò varia in base alla configurazione. Disco e rete sono i candidati tipici. Come regola generale, l'emulazione raddoppia il "costo" delle prestazioni dell'esecuzione di un'azione, quindi ogni tempo di latenza dell'hardware dovrebbe essere conteggiato due volte e qualsiasi numero di thruput dovrebbe essere dimezzato.


1
i numeri che ho visto erano CPU al 96-97%, rete al 70-90% e disco al 40-70% (di metallo nudo)
Jeff Atwood,

1
+1 commento della regola empirica è utile.
kvista,

2

In definitiva, qualsiasi carico ad alte prestazioni non dovrebbe essere virtualizzato. Le revisioni delle prestazioni della virtualizzazione non sono banali. Vedi i risultati dei miei test qui:

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

OTOH, se stai cercando di consolidare un numero di macchine che sono per lo più inattive continuamente, la virtualizzazione è la strada da percorrere.


1

Buona risposta di AnttiR.

Inoltre, i sistemi time-critical. Ho appena capito che il marcio Hyper-V Dime (vm che sta lentamente cadendo indietro, tutti i sistemi operativi moderni in vm lo fanno, si risincronizzano spesso) non sta giocando bene con alcune applicazioni time-critical che sto sviluppando. Inoltre userò "molto" cpu lì, e sto pianificando di ottenere una macchina a 12 core solo per quell'applicazione in produzione.


Asterisk è una di queste applicazioni. Quando si visualizzano vengono visualizzate alcune cose molto particolari durante le chiamate in conferenza.
Ryaner,

Ho il problema con la stabilità dell'orologio per le registrazioni dei dati;) Grazie al cielo ottengo un timestamp affidabile dal feed di dati, ma scoprire se ci sono problemi di rete è difficile quando l'orologio di sistema non è stabile.
TomTom,
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.