Perché l'aumento del "Numero di processori logici" per una VM ospitata Hyper-V aumenta le prestazioni di quella VM?


9

A mio avviso, le macchine virtuali (supponendo che Relative Weightsiano uguali) ottengono una quota uguale del processore.

Quando viene concesso un po 'di tempo di elaborazione alla VM, non dovrebbe importare se la VM sta vedendo un singolo core da utilizzare o più core, poiché l'elaborazione viene fuori da una matrice di processori sull'host Hyper-V, indipendentemente. Tuttavia, quando imposto l' Number of logical processorsimpostazione da 1 a 4 in Hyper-V per una determinata macchina virtuale, vedo un enorme aumento delle prestazioni.

Le specifiche sulla mia configurazione attuale sono approssimativamente:

  • L'host Hyper-V ha 32 GB di RAM, 24 processori logici (parola sbagliata?), Qualche TB di spazio.

  • Alle macchine virtuali sono assegnati 6 GB di RAM, 1 o 4 core, poche centinaia di GB di spazio e in esecuzione 2008 R2.

Ho sperimentato qualcosa di simile nelle precedenti configurazioni di Hyper-V.

Risposte:


20

Le macchine virtuali in ogni hypervisor che conosco sono in grado di utilizzare CPU virtuali aggiuntive su cui pianificare thread di esecuzione simultanei aggiuntivi.

È esattamente quello strato di astrazione tra macchina fisica e macchina virtuale che non funziona nel modo descritto. La VM non è a conoscenza di quanti core ha la macchina fisica. La VM non "vede" le CPU fisiche (o core) sulla macchina fisica. L'hypervisor fornisce alla VM quante CPU virtuali e il SO guest utilizza quelle CPU virtuali per pianificare thread simultanei aggiuntivi ... Il numero totale di CPU virtuali che l'hypervisor distribuisce alle macchine virtuali può persino superare il numero di CPU fisiche / nuclei nella macchina.

Detto in altro modo, una macchina virtuale, quando assegnata una singola vCPU, pianifica i suoi thread come se avesse una sola CPU. Non importa quanti core ci siano nella macchina fisica sottostante. (Anche se vale la pena notare che la macchina fisica può programmare quel thread VM su un core fisico per un quantum di thread o intervallo di tempo, quindi eseguirlo su un altro core fisico alla successiva esecuzione. non ho idea di tutto ciò che sta accadendo. Tutto quello che sa è che può programmare solo un thread alla volta, uno dopo l'altro, perché ha solo una CPU virtuale.)

E siamo molto chiari sui nostri termini qui. Assegnare vCPU o CPU virtuali a VM, non a "core". I core (con cui presumo che intendi unità di elaborazione fisica che condividono un singolo socket fisico) non equivalgono a vCPU. C'è uno strato di astrazione tra di loro. Se a una VM è assegnata solo 1 vCPU, è possibile pianificare l'esecuzione di un solo thread alla volta. Ecco perché la tua VM funziona più velocemente con 2 -4 CPU virtuali assegnate ad essa - perché ora è in grado di pianificare l'esecuzione simultanea di più thread.

Tuttavia, c'è sicuramente una legge di rendimenti decrescenti qui, poiché un numero eccessivo di CPU virtuali comporta un costo operativo sempre più elevato in cose come la sincronizzazione, ecc.

Esistono lievi differenze tra il modo in cui gli hypervisor Hyper-V e VMware pianificano l'esecuzione dei thread della macchina virtuale e differiscono nel loro approccio alla "sottoscrizione eccessiva" delle risorse fisiche, ma questo è un buon concetto generale per iniziare.


7
@ Flapjack00 No ... questo è esattamente l'opposto di quello che ho appena detto. E siamo molto chiari sui nostri termini qui. Assegnare vCPU o CPU virtuali a VM, non a "core". I core (con cui presumo che tu intenda unità di elaborazione fisica che condividono un singolo socket) non equivalgono a vCPU. C'è uno strato di astrazione tra di loro. Se a una VM è assegnata solo 1 vCPU, è possibile pianificare l'esecuzione di un solo thread alla volta.
Ryan Ries,

1
Ah! Quindi, in tal caso, una VM configurata con 4 vCPU potrebbe pianificare 4 thread contemporaneamente. Supponendo che il mio host abbia abbastanza vCPU disponibili, quei 4 thread potrebbero essere elaborati contemporaneamente?
Blackjack00

1
@ Flapjack00 "Supponendo che il mio host abbia abbastanza vCPU disponibili" - L'host non ha vCPU, la VM ha. L'host ha core (o, più correttamente, processori logici - un singolo core può avere più processori logici, come con Hyper-threading) a cui vengono assegnate le vCPU.
BlueRaja,

2
@ Dan, questo è un problema specifico di VMware. Non influisce su Hyper-V.
Jake Oshins,

1
Il "x vCpu richiede i blocchi Y cpu" che VMware aveva rimosso è stato rimosso in ESX 3.5, quindi non si applica più a nessun hypervisor moderno. Detto questo, dovresti stare attento a non assegnare risorse non necessarie alle tue VM, e le vCpu sono particolarmente importanti. Troppi di questi e perderai prestazioni complessive.
pauska,

3

La quantità di CPU virtuali assegnate è importante. Il software in esecuzione nella macchina virtuale non è a conoscenza del fatto che si trova in una macchina virtuale e che l'host è in grado di offrire più di ciò che viene presentato nella macchina virtuale. Pertanto, se si esegue software in grado di sfruttare più core della CPU, in una VM a cui è assegnato un solo core, il software pianificherà solo un core per le proprie attività e anche la VM utilizzerà solo un core host su un tempo. Dopo aver assegnato alla VM più core, il software può pianificare più attività parallele, che la CPU degli host pianificherà per la VM.

Fare attenzione a non dare troppe macchine virtuali, in modo da non causare contese, se una VM ha più core virtuali rispetto all'host, la VM si contenderà contro se stessa e, nel caso di hypervisor programmati in gruppo, come VMware, la VM non essere mai in grado di eseguire nulla (l'opzione di sovrallocare è ovviamente bloccata dal livello di gestione).

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.