Esiste un'impostazione ottimale per il numero di core della CPU esposti a una VM?


23

VirtualBox, e possibilmente altri software VM, consente all'utente di specificare il numero di CPU esposte alla VM. Nel mio caso particolare, ho una CPU dual core, con Windows 7 a 64 bit in esecuzione nativa e Ubuntu 9.04 a 64 bit come VM.

Il file della guida suggerisce di non impostare questo valore al di sopra del numero di core fisici disponibili. Questo ha senso. Quindi, è meglio allocare 1 o 2 core della CPU? Dipende interamente dal carico della CPU nativa?

Risposte:


6

Dipende interamente da cosa sta facendo il SO guest. Nella mia esperienza personale una VM esegue un singolo programma (build server, trac server, SVN, ecc.), Quindi non c'è motivo di impostarlo al di sopra di uno.

Un possibile caso potrebbe essere se è un utente finale a dire un'università che sta usando il sistema operativo guest come usa e getta (cioè TA), quindi potrebbe impostarlo su un valore superiore a uno.


Quindi, in altre parole: per un sistema temporaneo, puoi anche massimizzare la quota del core della CPU; ma per un uso "normale" o tipico, impostarlo su un core (quindi non interferire troppo con le prestazioni del sistema operativo host)?
sblair,

18

Le informazioni contenute in questa risposta non sono più corrette . Era corretto ai tempi della rigida programmazione congiunta, ma non è più il caso.

Sto mantenendo la risposta di seguito per motivi di prosperità, ma per favore non fare affidamento su di essa per essere precisi per i moderni hypervisor.


Non dovresti mai assegnare tutti i tuoi core come vCPU in una macchina virtuale.

Se una VM richiede alcun tempo di CPU, VMWare ha allocare sia tutta la CPU virtuali, o nessuno della CPU virtuali.

Ciò significa che, su un sistema a 4 core, se si allocano tutti e 4 i core, è possibile allocare al tempo del processore solo all'host o al guest, non entrambi contemporaneamente.

Ciò rovinerà assolutamente le prestazioni in entrambi gli ambienti.

Sentiti libero di allocare un numero dispari di core (diciamo, 3). Sembra strano, ma è un'opzione totalmente legittima.

Generalmente non allogio mai più di (n / 2) vCPU (nel tuo caso, 2) - ma normalmente sto allocando core su server con tra 12 e 32 core in cui è possibile allocare un numero enorme di vCPU senza impatto significativo.


questa è l'unica risposta finora scritta con qualsiasi grado di autorità. Grazie per aver condiviso le tue esperienze.
G-Wiz,

5
-1: non coerente con la mia esperienza. La VM è un processo il cui tempo di CPU può essere programmato allo stesso modo di qualsiasi altro processo sull'host. È possibile regolare la priorità dei processi della VM sull'host e il sistema bilancerà i carichi in modo appropriato.
bwDraco,

2
( continua ) Supponiamo che tu abbia un server a 16 core. Una configurazione di esempio sarebbe 4 VM, ciascuna configurata per 8 core. Sebbene ciò possa sembrare troppi core virtuali, consente alle singole VM di scalare meglio i carichi di lavoro più pesanti. Se l'utilizzo combinato supera il numero di core fisici, l'host bilancerà i carichi di conseguenza. Ecco come la virtualizzazione può aumentare la velocità effettiva e ridurre i costi, sfruttando al massimo l'hardware host.
bwDraco,

@DragonLord: questa risposta ha più di 2 anni su una domanda che ha quasi 4 anni e potrebbe essere basata su informazioni obsolete. Mi riferisco al "Co-Scheduling rigoroso" di ESX ma non ricordo quanti anni abbiano queste informazioni e non mi sono tenuto aggiornato su come la programmazione della CPU è cambiata negli ultimi anni.
Mark Henderson,

1
Volevo solo lasciare una nota qui che su Ubuntu 14.04 e 16.04, ci sono problemi di avvio e arresti anomali se si imposta il numero di CPU su un numero dispari. Non sono stato in grado di capire perché perché ho semplicemente deciso di mantenerlo su numeri pari per evitare i problemi.
Dorian,

3

Il numero di core esposti alle CPU guest non influisce sulle prestazioni quanto vorresti. Regola semplicemente la quantità di core che la CPU ospite "vede".

A seconda della configurazione dell'emulatore, potrebbe letteralmente dimezzare le prestazioni della macchina virtuale, non fare nulla o influire solo sul modo in cui il sistema operativo / le applicazioni guest hanno suddiviso la pianificazione dei thread.

È meglio lasciarlo al valore predefinito. Se riscontri problemi di prestazioni sul PC host, puoi semplicemente regolare la priorità del processo con Task Manager di Windows.


3

Come accennato da Nate, fintanto che la VM funzionerà principalmente con un processo a thread singolo, ci sono poche ragioni per allocare più di un core.

Tuttavia, se prevedi di usarlo in un modo che può beneficiare di più core (programma multi-thread, molti programmi paralleli, ...), la storia è più complicata. In precedenza avevo ipotizzato che usare metà della tua CPU per la tua VM fosse una buona idea. Si scopre che questo non è sempre ottimale.

L'unico modo per essere sicuri è di eseguire benchmark .. Non so perché, ma nel mio sistema Core2 Quad (che ha il supporto VT-x, paging nidificato, ..), l'utilizzo di 1 dei 4 core funziona meglio che usare 2 o più core! Lo vedo semplicemente nei tempi di avvio della VM, ma anche durante i benchmark di compilazione.

Con altri risultati hardware sono diversi. Ho anche un i7 con 8 core e le prestazioni sembrano scalare molto meglio con il numero di core lì (usando 4 lì felicemente).

Il mio consiglio: confronta prima un nuovo hardware.


1

Mi fiderei dello scheduler del sistema operativo e imposterò la VM sul numero di core fisici, a meno che tu non sappia che vuoi sempre che l'host abbia un core potenzialmente inattivo mentre sei impegnato nella VM.


1

Questo dipende da cosa vuoi fare sulla macchina virtuale e sulla macchina fisica. Se è necessario utilizzare la macchina virtuale mentre il sistema operativo host viene utilizzato per qualche altra attività, potrebbe essere meglio usare due core del processore per la VM in modo che l'host ne abbia due rimanenti se la VM è a pieno carico. D'altra parte, se si lavora principalmente sulla macchina virtuale, è possibile utilizzare tutti i core del processore.

Tuttavia, a meno che non ci si possa aspettare che il guest utilizzi tutti e quattro i core contemporaneamente, è possibile utilizzarli tutti in sicurezza continuando a lavorare sul sistema operativo host. Ricordare che è sempre possibile regolare la priorità del processo VM mentre è in esecuzione sul sistema operativo host e il sistema bilancerà i carichi di conseguenza.


Questo si basa sulla mia esperienza con VirtualBox. Poiché non ho familiarità con i prodotti VMware, potrei sbagliarmi; in tal caso, eliminerò questa risposta.
bwDraco,

0

sì, direi anche che dipende. Ma dirò cosa preferisco fare. Al lavoro ho una CPU quad core. Quindi per la mia immagine virtuale (win7), ho assegnato due CPU. In questo modo, posso utilizzare contemporaneamente sia la macchina host che la macchina virtuale e ciascuna di esse ha le stesse risorse della CPU.

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.