Una VM con 2 CPU è davvero più veloce di una con 4 CPU?


67

Il nostro IT ha creato una VM con 2 CPU allocate anziché le 4 richieste. Il motivo è che la VM ha prestazioni migliori con 2 CPU anziché 4 (secondo loro). La logica è che l'hypervisor VM (VMWare in questo caso) attende che tutte le CPU siano disponibili prima di impegnarne una. Pertanto, ci vuole più tempo per attendere 4 anziché 2 CPU.

Questa affermazione ha senso?

Risposte:


62

Questo era vero, ma non è più esclusivamente vero.

Ciò a cui si riferiscono è il Co-Scheduling rigoroso .

Soprattutto, mentre nel rigoroso algoritmo di co-scheduling, l'esistenza di una vCPU in ritardo fa arrestare l'intera macchina virtuale. Nell'algoritmo rilassato di co-scheduling, una vCPU leader decide se deve essere arrestata in base allo skew rispetto alla vCPU fratello più lento

Ora, se l'host ha solo 4 thread, allora saresti sciocco assegnarli tutti. Se ha due processori e 4 thread per processore, potresti non voler allocare tutto il contenuto di un singolo processore, poiché l'hypervisor dovrebbe cercare di mantenere le vCPU sullo stesso nodo NUMA per rendere più veloce l'accesso alla memoria, e tu sei rendendo questo lavoro più difficile assegnando un intero socket a una singola macchina virtuale (vedere la pagina 12 di quel PDF sopra).

Quindi ci sono scenari in cui un numero inferiore di vCPU può funzionare meglio di più, ma non è vero il 100% delle volte.

Detto questo, raramente allocare più di 3 vCPU per ospite. Tutti ottengono 2 per impostazione predefinita, 3 se si tratta di un carico di lavoro pesante e 4 per cose come server SQL o macchine virtuali di elaborazione batch molto pesanti o un server terminal con molti utenti.


3
Solo a parte - anche a parte gli ostacoli alla virtualizzazione, è generalmente difficile scrivere software che sfrutti il ​​parallelismo. Se i tuoi ragazzi del software non sono abbastanza bravi, in realtà potrebbe essere meglio avere quattro host virtuali che eseguono un'istanza del software ciascuno rispetto a un host che esegue quattro thread di esecuzione.
Luaan,

4
@Luaan La confezione contiene SQL Server, quindi suppongo che ci siano dei bravi software lì.
AngryHacker

1
@AngryHacker sì Il server SQL può utilizzare tutti e 4 i core in modo molto efficiente assumendo che tu abbia le MAXDOPimpostazioni appropriate . Tuttavia, a seconda del carico di lavoro, un server SQL eccessivamente tassato è spesso un segno di cattiva progettazione del database: indici errati, nessun indice cluster, troppi indici, nessuna ottimizzazione, ecc. (Non sempre, ma spesso).
Mark Henderson

1
@Luaan Questo è ancora parallelismo ... solo con una latenza molto più alta se hanno bisogno di parlarsi. :)
reirab

@MarkHenderson È piuttosto ben ottimizzato, ma alcuni carichi di lavoro sono troppo grandi per essere gestiti facilmente da 2 CPU più una tonnellata di altre query contemporaneamente.
AngryHacker

15

Questo dipende in gran parte dall'hypervisor sottostante e dagli amministratori che lo eseguono, mi spiego:

  1. È una cattiva pratica darti arbitrariamente 4 CPU solo perché l'hai richiesta. In generale, pensi di aver bisogno di 4; ma il monitoraggio delle risorse dice che hai solo bisogno di 1.
  2. VMware ESXi, ad esempio, richiede il blocco di tutte le pCPU quando una vCPU richiede una risorsa CPU ; quindi su questo hypervisor è male per le prestazioni. KVM non fa il blocco come fa ESXi; utilizza lo scheduler del kernel sottostante, ma ancora a lungo termine può creare contese sulla CPU.
  3. Se stai costruendo sistemi fin dall'inizio con 4 CPU, non stai davvero ridimensionando, ma aumentando (che è una cattiva pratica soprattutto sulle VM). Potresti voler controllare come stai progettando tutto ciò su cui stai lavorando in modo che possa essere costruito per adattarsi alle moderne infrastrutture cloud di oggi.

Cosa puoi imparare da questo? Crea sempre macchine virtuali con risorse minime e aumenta se necessario. Ridimensiona sempre anziché verso l'alto e sarai in grado di eseguire la tua app ovunque.

A causa del blocco che può essere sperimentato con l'hypervisor, è vero che 2 CPU possono essere più veloci di 4 CPU.


4

Sì, l'affermazione ha senso in generale. Tuttavia, è qualcosa che dovresti testare per la tua esatta configurazione e carico di lavoro. A volte più CPU è meglio se puoi effettivamente trarne vantaggio. Tuttavia, se in realtà non c'è molto parallelismo, una VM configurata con meno CPU spesso avrà prestazioni leggermente migliori poiché evita i rallentamenti dovuti alle pause dello stato Pronto CPU.

Ho ridotto le vCPU su un certo numero di nostre macchine virtuali e ho visto un miglioramento del throughput nella maggior parte dei casi. Una manciata è peggiorata e ha dovuto essere incrementata sul conteggio vCPU.

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.