Host quad core con hyper-threading, quanti processori configurare in VirtualBox?


10

Ho un processore i7 quad-core con hyperthreading (8 core logici), quando ho configurato una macchina virtuale per utilizzare 8 processori, VirtualBox mi ha dato un avviso dicendo che ho solo quattro core (che è vero) e che ciò potrebbe causare un problema di prestazioni. Ma l'hyper-threading è una funzionalità hardware, quindi il sistema operativo vede 8 core e invia istruzioni a tutti 8. Che cosa succede se impostandolo su 4 fa sì che la VM usi 2 core (4 thread) invece di 4 thread simultanei (su tutti e 4 i core )? L'avviso che ho ricevuto tiene conto del fatto che la mia macchina ha hyper-threading?

Risposte:


9

Sulla base del benchmark fatto da Kristian Wedberg , direi che dovresti usare tutti i core logici che hai.
Inoltre ho fatto il mio benchmark usando la stessa CPU (i7, 4 CPU con HT) che ha confermato l'aumento delle prestazioni per le applicazioni multi-thread. Se il PC guest (Win. 8.1 x64) utilizzava tutti gli 8 core, anche il PC host (Ubuntu x64) utilizzava tutti gli 8 core.

inserisci qui la descrizione dell'immagine

Ho confrontato anche le prestazioni in applicazioni a thread singolo. In entrambi i casi ho misurato gli stessi valori in modo che non vi siano penalità utilizzando un numero di CPU superiore a quello fisico (ma logico).
Qui puoi vedere che 1 carico completo della CPU nel PC guest comporterà 1 carico della CPU nel PC host.

inserisci qui la descrizione dell'immagine


Concordato. Stavo usando 4 core e ho scoperto che ci vuole solo circa il 50% del tempo CPU durante la creazione del mio progetto. Quindi, nonostante l'avvertimento, sono passato a 8 che è il numero dei core logici, la build impiegava il 100% del tempo della CPU e credo che funzionasse più velocemente di prima.
Deqing,

Questo è abbastanza interessante, ricordo di aver letto che Linux cerca specificamente di focalizzare il carico su 1 core logico da ciascun core HT fisico per aumentare l'efficienza. Mi chiedo se il kernel Linux guest possa vedere che la CPU è hyper-thread e ottimizzare la sua pianificazione per quel tipo di configurazione.
Anthony,

8

Ho scoperto che anche se è possibile (e probabilmente più veloce) in VirtualBox (la mia esperienza è stata con la versione 5.1.0) di allocare vCPU a una VM basata su processori logici, si potrebbe riscontrare problemi all'interno del sistema operativo guest durante l'esecuzione a carico elevato . Nel mio caso una VM Windows 2012 R2 con 12 vCPU su un host Ubuntu 16.04 a 8 core (che riporta 16 processori logici) farebbe BSOD durante un carico elevato della CPU con il messaggio di errore DPC_WATCHDOG_VIOLATION. Un'analisi minidump che utilizza osronline.com ha mostrato che e1g6032e.sys (il driver di rete Intel 100/1000 nativo di Windows) è la causa della violazione.

Questo mi porta a credere che il tempismo all'interno del sistema operativo guest sia influenzato negativamente quando si allocano le vCPU in base alla capacità del processore logico e si esegue la VM a carico elevato per periodi prolungati. Nel mio caso, il carico della CPU al 100% all'interno della VM di Windows per alcuni minuti comporterebbe il BSOD. Dopo aver ridotto il conteggio della vCPU a 8 (che corrisponde al conteggio dei core fisici dell'host), la VM di Windows non esegue più BSOD in simili situazioni di carico elevato. La documentazione online di VirtualBox dice che si dovrebbe fare questo, ma non offre alcun motivo.

Nel mio ambiente c'erano anche altre due macchine virtuali Ubuntu in esecuzione, ognuna con 8 vCPU proprie. Il carico su di essi era tuttavia minimo al momento dei problemi BSOD della VM di Windows.


Risposta eccezionale (con fonti), grazie! Un paio d'anni in ritardo, ma ora lo so :)
Anthony,

2

L'avviso che ho ricevuto tiene conto del fatto che la mia macchina ha hyper-threading?

Sì. Se si imposta il numero di core in una macchina virtuale su un numero maggiore rispetto al numero fisicamente presente, il processo di pianificazione delle attività in Virtual Box esegue il commit delle risorse della CPU, portando a importanti problemi di prestazioni.

Per quanto riguarda la distribuzione del carico tra i core, questo è il lavoro del sistema operativo host e dovrebbe comportarsi nel maniero corretto.


4
Hai dei dati a supporto delle tue dichiarazioni? Qualcuno ha fatto una ricerca envobi.com/post/virtualbox-hyper-threading-benchmark-surprise e raccomandano di impostare il numero di CPU Virtual Box sul numero di CPU logiche .
Maxim Egorushkin,

0

Era una macchina virtuale originale per la tua macchina? A volte si verificano errori particolari se si clona una VM e la si sposta su un altro computer e / o si modificano le impostazioni.
Consiglio di scaricare e installare l'ultima versione di Virtual Box con le estensioni più recenti.

Ho eseguito il commit di tutti e otto i core e non ricevo questo errore con il mio i7 che esegue una VM con Ubuntu 13.10.

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.