Ci sono dei reali vantaggi nell'assegnare più "core" a VirtualBox?


40

Ho un 2.8 quad core i7 con un VirtualBox. Ho la possibilità di assegnare fino a 4 core a una macchina ospite, ma ne ho fatti solo due. Quali sono i vantaggi / gli svantaggi dell'assegnazione di più core a un ospite? A proposito, sono ancora in grado di giocare a StarCraft 2 con le impostazioni Ultra mentre eseguo due sistemi operativi guest (Win 7 e Ubuntu), e lo stesso vale con BFBC2 (i miei stress tester). Come reagisce i7 ai carichi irregolari attraverso i core?

Risposte:


62

I core "virtuali" assegnati a una VM sono disponibili per l'uso in multielaborazione all'interno del sistema operativo client. Se si assegna un solo core a una macchina virtuale, il sistema operativo guest non ha alcuna possibilità di distribuire il carico su più core. Supponiamo quindi alcuni scenari pratici:

Host con 4 CPU, guest assegnato 1 CPU

  • Macchina host che esegue 4 core fisici
  • Sistema operativo client nella VM assegnato 1 core

In questo caso il SO guest sarà in grado di utilizzare solo un core. Pertanto, se si esegue un'applicazione multi-thread che si adatta bene su più core, verrà comunque eseguita su un solo core. Pertanto, tutti i thread sul sistema operativo guest devono condividere un core fisico.

L'esecuzione di un SO guest in questa configurazione che carica completamente la CPU produrrà un carico della CPU del SO host del ~ 25% (uno su 4 core caricato sull'host).

Naturalmente è ancora possibile eseguire attività che consumano CPU all'interno del sistema operativo host e utilizzare i restanti 3 core.

Host con 4 CPU, guest assegnato a 4 CPU

  • Macchina host che esegue 4 core fisici
  • Il sistema operativo client all'interno della VM ha assegnato 4 core

In questo caso, è possibile eseguire applicazioni multi-thread ben ridimensionate all'interno della VM guest che può sfruttare appieno tutte e 4 le CPU virtuali. VirtualBox utilizzerà 4 core fisici per elaborare le attività pianificate all'interno della VM e quindi il carico della CPU host potrebbe raggiungere un massimo del 100% di utilizzo.

Quindi quale impostazione dovresti scegliere?

La risposta a questa domanda dipende praticamente da cosa vorresti fare. In alcuni casi potrebbe essere utile assegnare tutti i core a una VM o persino eseguire più VM con ognuna la totalità delle CPU assegnate. In questi casi una VM può sfruttare appieno l'intera potenza di elaborazione dell'host. Se alle VM sono assegnate più CPU di quelle effettivamente presenti, le VM saranno influenzate dal carico su VM diverse. Per evitare ciò, è possibile dedicare alcuni core a macchine virtuali specifiche. Ad esempio, l'esecuzione di 2 VM con 2 CPU assegnate ciascuna su un nodo a 4 core potrebbe aiutare ogni VM a ottenere 2 CPU dedicate (supponendo che non vi sia alcun carico imposto dal sistema operativo host che occupa anche una parte della potenza di elaborazione).

Ha un impatto negativo sul mio host di assegnare tutti i core a una VM?

Anche in questo caso dipende dall'esecuzione del software. Se si esegue una macchina virtuale inattiva (nessun programma ad alta intensità di CPU in esecuzione), il carico imposto da questa macchina virtuale sarà vicino allo 0%. È anche possibile eseguire 10 VM in parallelo e verificare comunque un carico della CPU dell'host vicino allo 0% se tutte le VM sono inattive.

Come si comporta la CPU su un carico irregolare?

Bene, la distribuzione del carico della CPU dipende fortemente da un componente integrato specifico del sistema operativo chiamato scheduler. Per Windows XP lo scheduler ha provato a caricare round-robin tutti i core della CPU. Pertanto, l'esecuzione di un'attività a thread singolo a pieno carico su una CPU quad-core avrebbe prodotto un carico del 25% circa su ciascun core.
Sfortunatamente questo si è rivelato negativo per la moderna gestione della potenza della CPU. Per i sistemi moderni è persino un vantaggio se un singolo core viene caricato fino al 100% prima che il secondo core venga coinvolto. Il motivo è che fino a quando non vi è carico sufficiente per utilizzare completamente un nucleo, gli altri nuclei possono rimanere in modalità di sonno profondo per risparmiare energia e ridurre la dissipazione del calore.

Per alcune CPU come Intel Core i-Series e la più recente AMD (Bulldozer) questo è ancora più interessante poiché nel caso in cui venga utilizzato solo un sottoinsieme dei core, quelli inutilizzati vengono disattivati. Ciò riduce il consumo energetico della CPU. Entrambi (Intel e AMD) iniziano a utilizzare il budget di consumo termico e energetico, quindi per overcloccare i core attivi. Quindi, ciò può dare una spinta alle applicazioni a thread singolo (che non possono essere distribuite su più core per lavorare su un'attività in parallelo). Tuttavia, quando tutti i core sono attivi, la maggior parte di queste tecnologie "boost" hanno solo un piccolo effetto sulla potenza di elaborazione poiché la situazione "all core attivo" è esattamente la situazione per cui è stata progettata la CPU.

Quindi la risposta è che il tuo core i7 gestisce molto bene il carico irregolare su singoli core e potrebbe persino fornire un aumento delle prestazioni alle applicazioni a thread singolo. Tuttavia, questo incremento è compreso nell'intervallo di qualche percento, mentre in realtà le applicazioni multi-thread che possono distribuire il carico su più core della CPU possono essere potenziate da fattori (x2 su dual-core, 4x su quad-core ...) nel caso ottimale . Quindi il multi-threading fornisce sempre più potenza in termini di potenza della CPU combinata rispetto al single-threading combinato con il potenziamento del clock.


1
Wow, questo mi aiuta davvero a capire il comportamento multi-core, non solo come influenza la VMS.
Dan Allen,

2
Stavo riscontrando un problema con il mio client Ubuntu 12.04 LTS che funziona molto lentamente sul mio Macbook Air con 2 Ghz i7 Dual core. Ho aumentato l'impostazione del client a due cpus e ora si accende. Sto ignorando il messaggio di avviso di impostazioni non ottimali.
Mike Graf,

È molto complicato poiché VirtualBox non usa Core, usa Processori e tutti hanno 1 Processore forse 2 .. anche se si tratta di un quad-core o octa-core, a meno che non chiamino Processori Cores?
SSpoke il

0

Non ho approfondito i manuali sul sito VB, ma suppongo che l'allocazione dei core a una macchina guest consentirebbe al sistema operativo guest di vedere più core e quindi consentire alle applicazioni che possono trarre vantaggio da quei core extra la velocità aggiunta / potenza / efficienza, come per il sistema operativo host.

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.