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.