Virtualizare: Care este diferența dintre KVM și QEMU?


Cel mai bun răspuns

KVM este un fork al QEMU. KVM bazat pe cod este modificat pentru a suporta accelerarea hardware atunci când este disponibil (aceeași arhitectură pentru VM gazdă și invitată)

De cele mai multe ori, QEMU este folosit pentru a emula o altă arhitectură (de exemplu, Emulează ARM / Power arch. Folosind procesorul x86) . Am folosit acest lucru pentru a rula o imagine RaspberryPI care rulează pe ARM în laptopul meu care are un procesor Intel.

O diferență între ele este că QEMU rulează pe un procesor fără a fi nevoie de extensie de virtualizare hardware (Intel VT / VT-d, AMD-V) în timp ce KVM îl folosește. Extensiile de virtualizare hardware vă permit să accesați hardware-ul direct pe mașina fizică. Dezavantajul este că baza de cod KVM nu poate emula o altă arhitectură.

când KVM este rulat pe o mașină fără nicio extensie HW, acesta revine la QEMU pentru a rula VM.

Pentru a verifica dacă procesorul acceptă hardware hardware, pentru Windows, puteți utiliza http://www.cpuid.com/cpuz.php sau http://www.grc.com/securable.htm și verificați dacă există extensia „vmx” sau „svm”. (Acesta din urmă este mult mai ușor)

Pe Linux, utilizați

  • egrep „(vmx | svm)” / proc / cpuinfo

Fuzionarea ambelor baze de cod este în proces și le vom vedea ca un proiect în viitor. Acest lucru va face KVM învechit și fuzionat cu baza de cod QEMU.

Apropo, aproape toate noile procesoare lansate de Intel și AMD acceptă virtualizarea, dar am văzut un laptop Acer cu un procesor Intel care nu acceptă virtualizarea hardware. De asemenea, vă rugăm să verificați BIOS-ul dacă această extensie este activată. Alt BIOS are extensia dezactivată în mod implicit.

Răspuns

Inițial din Eroare server

KVM :

KVM este câteva lucruri: mai întâi este un modul de kernel Linux (acum inclus în linia principală) care comută procesorul într-o nouă stare „invitat”. Starea invitat are propriul set de stări de apel, dar instrucțiunile privilegiate pentru ring0 revin la codul de hipervizor. Deoarece este un nou mod de execuție a procesorului, codul nu trebuie modificat în niciun fel.

În afară de comutarea stării procesorului, modulul kernel gestionează și câteva părți de nivel scăzut ale emulare, precum registrele MMU (utilizate pentru a gestiona VM) și unele părți ale hardware-ului emulat PCI.

în al doilea rând, KVM este o bifurcație a executabilului Qemu. Ambele echipe lucrează activ pentru a menține diferența la minimum și există progrese în reducerea acesteia. În cele din urmă, scopul este ca Qemu să funcționeze oriunde, iar dacă este disponibil un modul de kernel KVM, acesta ar putea fi folosit. Dar pentru viitorul previzibil, echipa Qemu se concentrează pe emularea și portabilitatea hardware, în timp ce oamenii KVM se concentrează pe modulul kernel (uneori mutând părți mici ale emulației acolo, dacă s-a dovedit că îmbunătățește performanța) și pe interfața cu restul codului spațiului utilizatorului. .

Executabilul kvm-qemu funcționează ca Qemu normal: alocă RAM, încarcă codul și, în loc să-l recompileze sau să apeleze KQemu, generează un fir (acest lucru este important); firul apelează modulul kernel KVM pentru a trece în modul guest și continuă să execute codul VM. La o instrucțiune de privilegiu, comută înapoi la modulul kernel KVM, care, dacă este necesar, semnalizează firul Qemu pentru a gestiona cea mai mare parte a emulației hardware.

Unul dintre lucrurile frumoase ale acestei arhitecturi este că oaspetele codul este emulat într-un thread posix, pe care îl puteți gestiona cu instrumente Linux normale. Dacă doriți o VM cu 2 sau 4 nuclee, kvm-qemu creează 2 sau 4 fire, fiecare dintre ele apelează modulul kernel KVM pentru a începe executarea. Concurența (dacă aveți suficiente nuclee reale) sau programarea (dacă nu aveți) este gestionată de programatorul normal Linux, păstrând codul mic și surprizele limitate.

Qemu :

QEmu este un software complet și independent. Îl utilizați pentru a emula mașini, este foarte flexibil și portabil. În principal funcționează de un „recompiler” special care transformă codul binar scris pentru un procesor dat într-un altul (să zicem, pentru a rula codul MIPS pe un Mac PPC sau ARM într-un computer x86).

Pentru a emula mai mult decât procesorul, Qemu include o listă lungă de emulatoare periferice: disc, rețea, VGA, PCI, USB, porturi seriale / paralele etc.

Sursă: Diferența dintre KVM și QEMU

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *