Secondo me nessuna delle risposte di cui sopra è soddisfacente.
Penso che l'articolo a cui mi riferisco al seguente link sia ben mirato a rispondere a questa domanda:
http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html
CITAZIONE:
L'idea alla base di HT è consentire l'esecuzione di un thread dell'applicazione diverso quando l'app in esecuzione si blocca; a causa di errori di filiale, bolle nella tubazione, ecc. Per renderlo possibile, ci deve essere un'altra porta o un registro AS. Tale registro diventa visibile al sistema operativo quando HT è abilitato. Tuttavia, il sistema operativo (e fino alla catena alimentare per qualsiasi strumento perf che stai usando) ora pensa che sia disponibile il doppio della capacità del processore, ovvero una CPU al 100% su ciascuna porta AS.
Ma sotto il cofano, c'è ancora una sola unità di esecuzione: il singolo, fisico, core con cui hai iniziato prima che HT fosse abilitato. La differenza è che viene condivisa in qualche modo tra le 2 porte AS. Il modo in cui il singolo core viene commutato tra le due porte è molto complicato, ma è più facilmente comprensibile in termini di code polling. Vado a quel livello di dettaglio nelle mie lezioni GCaP.
Le misurazioni dei test più efficaci che ho, indicano che ogni porta HT non può occupare più del 75%, in media, o il 150% della capacità totale prevista del 200% in base al sistema operativo. La capacità "mancante" del 50%, a cui ho fatto riferimento in precedenza, è un'illusione. Intel ha affermato che ci si può aspettare qualcosa tra il 120% e il 130% per le applicazioni generali.
In effetti, sono abbastanza sicuro che il sistema operativo possa raggiungere il 100% su ciascun core virtuale, non c'è dubbio. Ho appena fatto un:
mvn clean install -DskipTests -T 5
E posso assicurarti i miei 8 core virtuali e 4 core fisici sono andati tutti al 100% degli utilizzi della CPU. E sicuramente non ho 8 core sulla mia macchina.
Per farla breve, si può presumere quanto segue se il carico totale della CPU supera il 100% al massimo, e molto probabilmente in modo abbastanza accurato, utilizzando esattamente il 100% del core fisico. Detto questo, se hai CORE 1 fisico diviso in CPU 1 e CPU 2 del sistema operativo e su CPU 1 hai un utilizzo totale del 50% e su CPU 2 hai un utilizzo totale del 50%, molto probabilmente nella vita reale sei mettendo una pressione di un utilizzo totale del 100% su quella CPU. Hai raggiunto il limite massimo.
Ma ovviamente il sistema operativo nei suoi strumenti di monitoraggio del sistema non ha idea che ti stia offrendo un'illusione. Dal punto di vista del sistema operativo e di come gestisce le risorse, crederà che ogni singolo core virtuale sia ancora al 50% inattivo, quindi se ci sono più attività da eseguire cercherà di distribuirle uniformemente su quei due core . Quindi quando si supera il 100% dell'utilizzo della CPU, durante un periodo di utilizzo della CPU, c'è sempre un lavoro in coda da eseguire in quel periodo di tempo che non ha mai avuto un cambiamento per ottenere un cronometro sulla CPU. Alla fine lo otterrà, ma ci sono sempre alcuni thread che in realtà non sono nemmeno in esecuzione anche se sono pianificati per l'esecuzione.
Grazie