Best practice: vCPU per core fisico


27

Sto cercando di trovare alcuni documenti o guide sulle migliori pratiche per la virtualizzazione rispetto al provisioning di vCPU per core fisico (di una CPU). Se è importante, sto guardando vmWare per l'implementazione della virtualizzazione. Ad esempio, una CPU Intel Xeon può avere 4, 8, ecc. Core. Sono interessato a saperne di più sul provisioning oltre a una sola vCPU per un core fisico. Il fornitore con cui sto parlando pensa sicuramente che un singolo core possa essere predisposto in più vCPU.

Quello che vedo comunemente nella mia ricerca finora è: "Beh, dipende dalla tua applicazione". E in tal caso, la mia applicazione sta modificando il codice, compilando / collegando, testando e gestendo la configurazione. Naturalmente non tutte le VM devono essere configurate con più vCPU per core, ma nel caso generale.

Risposte:


24

Una singola CPU fisica può essere utilizzata come molte vCPU. Raramente le risorse della CPU si esauriscono nelle soluzioni di virtualizzazione. RAM e memoria sono sempre i fattori limitanti ...

Ricorda, in VMware, l'utilizzo della CPU è rappresentato nel MHz utilizzato, non nei core ... A meno che non stia fissando tutte le tue CPU virtuali al 100% TUTTO IL TEMPO , non penso che il tuo fornitore sia corretto.

Diamo un'occhiata al seguente cluster di sistemi ...

  • 9 host ESXi.
  • 160 macchine virtuali
  • 104 core di CPU fisica in tutto il cluster.
  • Il profilo medio della macchina virtuale è: 4 vCPU e RAM da 4 GB a 18 GB.
  • La CPU può essere sovrascritta in modo sicuro ... ma ricorda, può anche essere limitata, riservata e prioritaria a livello di VM.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

da un altro cluster attivo: 3 host 42 macchine virtuali inserisci qui la descrizione dell'immagine


4
Dopo aver visto 3936 migrazioni di vMotion non mi sento molto male per i nostri 1.200
Mark Henderson

2
Ieri stavo guardando le statistiche sul nostro cluster VM che confermano le cifre fornite da @ewwhite. Abbiamo 3 host, per un totale di 24 processori e 55 GHz. Abbiamo 59 VM con un totale di 79 vCPU allocate. Secondo le statistiche di vSphere, negli ultimi 6 mesi abbiamo usato una media di oltre 14 GHz (min 9 GHz, max 25 GHz) e durante quel periodo c'erano 0 Contesa sul conteggio dei core della CPU.
Paul Gear

7

Per espandersi sul write-up di ewwhite, a meno che non si disponga di applicazioni in grado di sfruttare esplicitamente più vCPU o più core per vCPU, l'assegnazione di più vCPU / core a una VM è assolutamente nulla. Infatti, il più delle volte finirai con prestazioni inferiori rispetto all'esecuzione su un singolo vCPU a cui è assegnato un core, in parte a causa del sovraccarico di pianificazione richiesto per eseguire più vCPU.

FWIW, in un'impostazione VDI il numero spesso citato è 5 vCPU per core fisico. Ovviamente, questo tiene conto dei desktop da ufficio. Se le tue VM sono davvero impegnate a compilare il codice continuamente, potresti non essere in grado di adattare 5 vCPU per core fisico.

Il motivo per cui così tante persone dicono che "dipende" è perché lo fa davvero. Osserva i valori CPU Ready e decidi se puoi caricare più CPU su un determinato sistema. CPU Ready è una misura in cui la vCPU è pronta per eseguire un comando, ma deve attendere che il tempo fisico della CPU diventi disponibile.

Nel tuo caso, se stai compilando programmi di grandi dimensioni, è del tutto possibile che le tue VM abbiano effettivamente bisogno di molto tempo CPU. Come notato da ewwhite, normalmente la virtualizzazione tende ad essere I / O del disco e RAM limitata piuttosto che CPU limitata.


13
absolutely zero benefit in allocating multiple vCPUs/cores to a VM- non del tutto corretto. Abbiamo un'applicazione a thread singolo che era sospesa su base settimanale. Quando una singola vCPU era al 100% era impossibile accedere a quel sistema e dovevamo eseguire un ripristino del livello hypervisor della VM. Abbiamo aggiunto una seconda vCPU e quando l'app si è bloccata, siamo riusciti a entrare facilmente ed eliminare il thread offensivo. Questo è un po 'un caso limite vero, ma non puoi mai occuparti di assoluti.
Mark Henderson

4
Ciò che Mark ha scritto è il motivo per cui utilizziamo due core come limite inferiore per ogni VM, indipendentemente dal fatto che ne abbiano bisogno o meno.
Nils,

2
Il valore Pronto è il modo migliore per sapere se stai eseguendo il provisioning eccessivo del tuo host, il tuo valore pronto dovrebbe essere il più basso possibile. È la percentuale di tempo in cui una VM è "pronta" per utilizzare un ciclo CPU, ma deve attendere che la CPU sia impegnata in un'altra attività. Per spiegare perché dare alla tua VM molti core può avere un impatto sulle prestazioni userò un semplice esempio: se ho 4 core fisici e 4vms, se hai 3 VM con 2 core e una VM con 4 core, le tue VM più piccole otterranno effettivamente più cicli, poiché possono "adattarsi" meglio ai multipli. Vai il più conservatore possibile con te vcpus!
Rqomey,

@MarkHenderson Posso vedere come ciò potrebbe essere utile e qualcosa del genere potrebbe potenzialmente accadere al ragazzo che ha posto la domanda dal momento che lavora con i compilatori.
Reality Extractor

@Nils Credo che dare a tutti i core VM 2 se è necessario o meno un business è una pessima idea. Potrebbe facilmente influenzarti negativamente in così tanti modi, dimensione dello slot, numero insufficiente di core disponibili per il riavvio / failover, perdita di prestazioni dovuta a ciò che ha scritto Rqomey, innumerevoli altre cose. Puoi praticamente entrare sempre nella tua VM tramite vCenter e DCUI.
Estrattore di realtà

3

Il problema di fondo è sostanzialmente lo stesso della pianificazione dei processi su un sistema fisico. Finché il carico del sistema è inferiore al numero di core (o persino processori logici, nel caso di HyperThreading) tutto va bene e i processori possono gestire il carico.

Quindi, purché il carico simultaneo su tutte le vCPU utilizzate non superi il carico che può essere gestito dai core fisici, tutto va bene.

Per le tue esigenze, solo la compilazione è un lavoro intuitivo per la CPU, che è necessario solo di volta in volta. Per i compilatori-VM assegniamo tutte le CPU disponibili. Quindi, se è necessario compilare, verrà eseguito il più rapidamente possibile (se il compilatore supporta la compilazione parallela).

Questo potrebbe non essere vero per un compilatore-VM che è sotto carico costante (ad es. Se si fornisce un servizio Internet per fare compilazioni e che viene costantemente utilizzato).


2

Una regola empirica che ho visto (possibilmente nella documentazione di VMware) è quella di non assegnare più core a una VM di quanti ne esistano fisicamente sull'host, perché ciò causerebbe l'emulazione di più vCore su un singolo core, aggiungendo un sovraccarico non necessario.


1
Che dire del contrario? Cosa succede se ho un Xeon a 6 core e allocare solo 4 core nella VM? Quale sarebbe la performance allora? Il sistema VM sarà in grado di ottenere energia da tutti e 6 i core fisici o sarà limitato a 4?
Overmind

Se gli dai solo 4 core, avrà accesso solo a 4 core alla volta. Ma la mia comprensione (non confermata) è che quei 4 core virtuali potrebbero essere allocati su qualsiasi 4 dei 6 core fisici, a meno che tu non abbia configurato il pinning.
Paul Gear,
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.