KVM / Qemu, Ubuntu: Perché più CPU guest migliorano rapidamente l'I / O su disco?


9

Abbiamo un cluster Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt costituito da due nodi. Ogni nodo esegue Ubuntu 12.04 64 bit con i seguenti pacchetti / versioni:

  • Kernel 3.2.0-32-generico # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • pacemaker 1.1.7
  • battito cardiaco 3.0.5

I guest virtuali eseguono Ubuntu 10.04 64 Bit e Ubuntu 12.04 64 Bit. Utilizziamo una funzione libvirt per trasmettere le capacità delle CPU host agli ospiti virtuali al fine di ottenere le migliori prestazioni della CPU.

Ora ecco una configurazione comune su questo cluster:

  • Il "monitoraggio" della macchina virtuale ha 4 vCPU
  • Il "monitoraggio" della VM utilizza ide come interfaccia del disco (al momento stiamo passando a VirtIO per ovvie ragioni)

Di recente abbiamo eseguito alcuni semplici test. So che non sono professionali e non raggiungono standard elevati, ma mostrano già una forte tendenza:

Il nodo A esegue VM "bla" Il nodo B esegue VM "monitoraggio"

Quando risincronizziamo un file dalla "bla" della VM al "monitoraggio" della VM otteniamo solo 12 MB / s. Quando eseguiamo un semplice dd se = / dev / null di = / tmp / blubb all'interno del "monitoraggio" della VM otteniamo circa 30 MB / s.

Quindi abbiamo aggiunto altri 4 vCPU al "monitoraggio" della VM e lo abbiamo riavviato. Il "monitoraggio" della VM ora ha 8 vCPU. Abbiamo rieseguito i test con i seguenti risultati: Quando risincronizziamo un file dalla "bla" della VM al "monitoraggio" della VM, otteniamo ora 36 MB / s. Quando eseguiamo un semplice dd se = / dev / null di = / tmp / blubb all'interno del "monitoraggio" della VM, ora raggiungiamo circa 61 MB / s.

Per me questo effetto è abbastanza sorprendente. Come mai apparentemente l'aggiunta di più CPU virtuali per questo guest virtuale comporta automaticamente maggiori prestazioni del disco all'interno della VM?

Non ho una spiegazione per questo e apprezzerei molto il tuo contributo. Voglio capire quali sono le cause di questo aumento delle prestazioni poiché posso riprodurre questo comportamento al 100%.


2
Utilizzare uno strumento di benchmarking appositamente progettato come iozone o bonnie ++ per aiutare ad eliminare altre variabili.
ewwhite,

Sarebbe interessante l'aspetto del carico effettivo della CPU ... è qualcosa di cpu associato introdotto in un luogo nascosto (rsync plus probabilmente ssh è certamente in una certa misura, quindi i driver di rete sono introdotti in quel modo, anche dd potrebbe fare cose inaspettate legate alla cpu ...) o sono in realtà cose che si aspettano in modo non ottimale a vicenda a causa della minore disponibilità di thread di esecuzione?
Rackandboneman,

3
correre kvm_traceper vedere come IO_Exitscambia il numero di modifiche quando si cambiano i numeri della CPU. Immagino sia perché stai usando IDE, che viene programmato con le CPU guest. Con virtio le prestazioni dovrebbero essere coerenti e quando il piano dati è in qemu, otterrà un notevole incremento. Un'altra ipotesi può essere il fatto che si stia utilizzando una distribuzione nota per uno stack di virtualizzazione con errori.
dyasny il

@ ewwhite: Sì, eseguire test professionali sarebbe una buona scelta. Tuttavia, voglio prima capire perché si verifica questo comportamento I / O. @ rachandboneman: quando ho guardato per ultimo, le 4 CPU avevano un valore di attesa molto elevato (circa il 70-80%). @dyasny: Grazie, ci proverò. Come posso verificare che il piano dati sia attivato / attualmente utilizzato?
Valentin,

il piano dati è sperimentale per ora e sono abbastanza sicuro che la prima distribuzione a prelevarlo sarà Fedora. pl.digipedia.org/usenet/thread/11769/28329
dyasny

Risposte:


9

Darò un'idea / spiegazione molto approssimativa.

In una situazione OP, oltre alla misurazione all'interno della VM, anche l'host dovrebbe essere esaminato.

In questo caso, possiamo supporre che quanto segue sia corretto

  1. In tutto il test, la larghezza di banda di I / O (disco) dell'host non è massima. Man mano che l' "monitoring"I / O VM ( ) aumenta con più CPU allocate ad esso. Se l'I / O host era già al massimo, non dovrebbe esserci alcun aumento delle prestazioni di I / O.
  2. "bla"non è il fattore limitante Poiché le "monitoring"prestazioni di I / O sono migliorate senza modifiche a"bla"
  3. La CPU è la principale fabbrica per il miglioramento delle prestazioni (nel caso OP) Poiché l'I / O non è il collo di bottiglia e OP non menziona alcun cambiamento nella dimensione della memoria. Ma perché? O come?

Fattore aggiuntivo

  1. Scrivere richiede più tempo di Leggi Questo è lo stesso per VM e per host. In termini estremamente semplici: VM aspetta che l'host finisca di leggere e scrivere.

Cosa succede quando viene assegnato più CPU "monitoring"?

Quando "monitoring"vengono allocate più CPU, guadagna più potenza di elaborazione, ma guadagna anche più tempo di elaborazione per l'I / O.

Questo non ha nulla a che fare con il fatto rsyncche si tratta di un programma a thread singolo.

È lo strato I / O che utilizza la maggiore potenza della CPU o, più precisamente, il tempo di elaborazione aumentato.

Se "monitoring"durante il test viene utilizzato il programma di monitoraggio della cpu (es. Top) , non ne verrà mostrato uno, ma aumenterà tutto l'utilizzo della cpu e anche% wa. % wa è tempo di attesa dedicato all'I / O.

Questo aumento delle prestazioni avverrà solo quando l'I / O host non è max. su.

Non riesco a trovare la programmazione della CPU nel sito KVM, ma c'è questo blog che menziona KVM che sta usando CFS e cgroups, di seguito è la citazione

All'interno di KVM, ogni vcpu è mappato su un processo Linux che a sua volta utilizza l'assistenza hardware per creare i "fumi e mirror" necessari per la virtualizzazione. Pertanto, un vcpu è solo un altro processo per CFS e, soprattutto, per i cgroups che, come gestore delle risorse, consente a Linux di gestire l'allocazione delle risorse, in genere in modo proporzionale al fine di stabilire allocazioni di vincoli. I cgroup si applicano anche a memoria, rete e I / O. I gruppi di processi possono essere inseriti in un gruppo di pianificazione per applicare i requisiti di allocazione delle risorse a gruppi gerarchici di processi.

In breve, più cpu = più tempo cpu = più intervallo di tempo I / O in un determinato periodo di tempo.


Grazie per aver scritto questa risposta. "Più vCPU significa più tempo di elaborazione per l'I / O" è la spiegazione che stavo cercando. Vale la taglia!
Valentin,
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.