Le prestazioni di QEMU (ancora) rallentano quelle di VirtualBox ed esiste un modo per migliorarlo senza il supporto hardware + il modulo del kernel kvm?


9

Ho notato diversi articoli che hanno affermato che QEMU è più lento di VirtualBox (senza assistenza hardware) ma molti hanno anni e il più recente sembrava essere dello scorso anno.

  • È vero che QEMU è più lento di VirtualBox?
  • Se sì, perché?
  • Ci sono dei trucchi per colmare il gap prestazionale?

Alcuni dei miei sistemi host non supportano la virtualizzazione hardware, quindi sono particolarmente interessato ai suggerimenti sulle prestazioni che funzionano senza il modulo kernel.

Risposte:


9

Se stai parlando della virtualizzazione x86 su un host x86, tieni presente che kqemu (il vecchio modulo del kernel di accelerazione per qemu) è deprecato. Kernel Virtual Machine (KVM) è "la strada da percorrere" ma funziona solo su host Linux. L'ospite può essere qualsiasi sistema operativo desiderato purché sia ​​l'architettura x86.

Cross-architecture, qemu è ancora molto lento; proprio oggi stavo provando l'ultimo qemu con Debian MIPS64 nell'ospite ... era utilizzabile da un terminale ma terribilmente lento a Xorg. per quanto ne so, non è possibile utilizzare le istruzioni di accelerazione del processore come tabelle di pagina estese o VT-x quando si utilizza l'architettura incrociata. È tutto emulato nel software.

Quindi per la virtualizzazione da x86 a x86, qemu "raw" è lento, ma KVM (che usa qemu) è veloce. Abbastanza veloce. Così veloce che è la soluzione di virtualizzazione consigliata da Red Hat per RHEL.

VirtualBox fa ancora saltare tutto ciò che qemu / kvm può offrire in termini di prestazioni grafiche 2d / 3d con accelerazione hardware, perché kvm si concentra sulla virtualizzazione del server e virtualbox si concentra sulla virtualizzazione del desktop. Ma ti consiglio vivamente di provare kvm se hai a che fare con un server.

Modifica: per i tuoi host che non hanno alcuna accelerazione hardware, soffrirai di un overhead piuttosto grande indipendentemente da quale soluzione virt usi. Emulare elementi hardware nel software è difficile e costoso.


2
ls $(which kvm)mostra un collegamento simbolico a qemu-system-x86_64. Immagino che sia esattamente quello di cui stavi parlando con KVM usando QEMU?
Catskul,

Sì, ma KVM è, come suggerisce il nome, una macchina virtuale basata sul kernel , il che significa che le budella dell'hypervisor si trovano nel modulo del kernel 'kvm'. Puoi pensare che sia simile al vecchio kqemu se vuoi, ma dal punto di vista architettonico è molto diverso. qemu è più un frontend che un vero hypervisor quando kvm è in funzione.
allquixotic,

Oh, ho dimenticato di aggiungere: il motivo per cui qemu (e qualsiasi altro sistema di virtualizzazione) è così lento senza un "modulo kernel" (come dici tu; quello che intendi veramente è "senza accelerazione hardware") è che certe operazioni hardware che il le esibizioni degli ospiti sono molto difficili da emulare nel software. Bene, non è difficile in termini di inaffidabile o complicato; solo sloooooooooooooow. Ecco perché Intel ha trascorso la parte migliore di un decennio a fornirci istruzioni accelerate dall'hardware per i bit di virtualizzazione più lenti in termini di VT-x ed EPT. L'unica correzione è utilizzare hardware che supporti questi set di istruzioni.
allquixotic il

C'è qualcosa che rende più veloce la virtualbox anche senza accelerazione hardware?
Catskul,

No. Senza accelerazione hardware, le prestazioni dovrebbero essere abbastanza uguali. VirtualBox potrebbe avere ottimizzazioni x86 avanzate che lo rendono leggermente più veloce nel software, il che sarebbe appropriato poiché virtualbox supporta solo x86 in primo luogo, mentre qemu ha un campo di gioco molto più ampio (architetture non x86). Ma si tratta di un dettaglio di implementazione / progettazione che fondamentalmente verrebbe giù per localizzare nella cache, loop interni ottimizzati, assemblatore con codifica manuale, cache di I / O del disco sul lato host o altri trucchi. Non so fino a che punto vbox fa queste cose che qemu non fa ma non sono molto rilevanti ...
allquixotic

1

Supponendo che un host con una CPU abilitata alla virtualizzazione (Intel VT-x, AMD SVM), che esegue Qemu su un kernel (Linux con KVM), è ragionevolmente veloce.

Le ragioni tecniche per cui Qemu è lento con 2D (youtube, foglio di calcolo, giochi) ed emulazione 3D sono oscure per me. Tuttavia, posso immaginare che i "driver video" semplicemente non sono abbastanza buoni: l'hardware grafico nell'hardware non viene utilizzato in modo ottimale.

Sul lato positivo, un recente sviluppo ha introdotto il framework SPICE nel qemu. In realtà ha qualche anno e sembra ragionevolmente maturo. I vantaggi delle prestazioni video di correre con il driver video QXL sono enormi nella mia esperienza (sviluppo web 2D). Non so quanto sia paragonabile a Virtualbox, ma è sicuramente un miglioramento. Penso che SPICE sia un must per chiunque esegua Windows in Qemu.

Questa è solo la mia opinione e va notato che non ho mai provato a eseguire alcuna riproduzione 3D o video nell'ospite.


1
Se per "emulazione orientata alla grafica" fai riferimento all'accelerazione 3D, è perché le GPU non possono essere virtualizzate come le CPU. L'emulazione del software è incredibilmente lenta, quindi al giorno d'oggi ci sono due soluzioni: 1. Passthrough API (ovvero le chiamate DirectX nell'ospite vengono eseguite come chiamate DirectX sull'host) 2. Passthrough VGA (il vero affare: l'intera scheda grafica è resa disponibile all'ospite). QEMU supporta # 2.
Marcus,

@Marcus Passthrough è la strada da percorrere.
Ярослав Рахматуллин
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.