Virtualisering: Hva er forskjellen mellom KVM og QEMU?


Beste svaret

KVM er en gaffel med QEMU. KVM kodebasert er modifisert for å støtte maskinvareakselerasjon når den er tilgjengelig (samme arkitektur for verts- og gjest-VM)

Mest om gangen brukes QEMU til å etterligne en annen arkitektur (f.eks. . Jeg har brukt dette til å kjøre et RaspberryPI-bilde som kjører på ARM i den bærbare datamaskinen min som har en Intel-prosessor.

En forskjell mellom dem er at QEMU kjører på en prosessor uten behov for maskinvarevirtualiseringsutvidelse (Intel VT / VT-d, AMD-V) mens KVM bruker den. Maskinvarevirtualiseringsutvidelser lar deg få tilgang til maskinvaren på den fysiske maskinen direkte. Ulempen er at KVM-kodebase ikke kan etterligne en annen arkitektur.

Men når KVM kjøres på en maskin uten HW virt ext., bytter den tilbake til QEMU for å kjøre VM.

For å sjekke om prosessoren din støtter maskinvaredyrking, for Windows, kan du bruke http://www.cpuid.com/cpuz.php eller http://www.grc.com/securable.htm og se etter utvidelsen «vmx» eller «svm». (Sistnevnte er mye lettere)

På Linux bruker du

  • egrep «(vmx | svm)» / proc / cpuinfo

Sammenslåing av begge kodebaser er i prosessen, og vi vil se dem som ett prosjekt i fremtiden. Dette vil gjøre KVM foreldet og slått sammen til QEMU-kodebase.

Forresten, nesten alle nye prosessorer utgitt av Intel og AMD støtter virtualisering, men jeg har sett en Acer-bærbar PC med en Intel-prosessor som ikke støtter maskinvarevirtualisering. Sjekk også BIOS hvis denne utvidelsen er aktivert. Annet BIOS har utvidelsen deaktivert som standard.

Svar

Opprinnelig fra Serverfeil

KVM :

KVM er et par ting: først det er en Linux-kjernemodul (nå inkludert i hovedlinjen) som bytter prosessoren til en ny «gjest» -tilstand. Gjestetilstanden har sitt eget sett med ringetilstander, men privilegerte ring0-instruksjoner faller tilbake til hypervisor-koden. Siden det er en ny prosessormodus for utførelse, trenger ikke koden endres på noen måte.

Bortsett fra at prosessortilstanden byttes, håndterer kjernemodulen også noen få deler på lavt nivå av emulering, i likhet med MMU-registerene (brukes til å håndtere VM) og noen deler av PCI-emulert maskinvare.

For det andre er KVM en gaffel av Qemu-kjørbarheten. Begge lag jobber aktivt for å holde forskjellen på et minimum, og det er fremskritt i å redusere den. Til slutt er målet at Qemu skal fungere hvor som helst, og hvis en KVM-kjernemodul er tilgjengelig, kan den brukes. Men i overskuelig fremtid fokuserer Qemu-teamet på maskinvareemulering og bærbarhet, mens KVM-folk fokuserer på kjernemodulen (noen ganger flytter små deler av emulasjonen dit, hvis det viser seg å forbedre ytelsen), og grensesnitt med resten av brukerområdet .

Den kjm-qemu-kjørbare filen fungerer som vanlig Qemu: tildeler RAM, laster inn koden, og i stedet for å kompilere den på nytt, eller ringe KQemu, gyter den en tråd (dette er viktig); tråden kaller KVM-kjernemodulen for å bytte til gjestemodus og fortsetter å utføre VM-koden. På en privilegieinstruksjon bytter den tilbake til KVM-kjernemodulen, som om nødvendig signaliserer Qemu-tråden om å håndtere det meste av maskinvareemuleringen.

En av de fine tingene med denne arkitekturen er at gjesten koden er emulert i en posix-tråd, som du kan administrere med vanlige Linux-verktøy. Hvis du vil ha en VM med 2 eller 4 kjerner, oppretter kvm-qemu 2 eller 4 tråder, hver av dem kaller KVM-kjernemodulen for å begynne å kjøre. Samtidigheten (hvis du har nok ekte kjerner) eller planlegging (hvis du ikke gjør det) administreres av den vanlige Linux-planleggeren, og holder koden liten og overraskelser begrenset.

Qemu :

QEmu er en komplett og frittstående programvare alene. Du bruker den til å etterligne maskiner, den er veldig fleksibel og bærbar. Hovedsakelig fungerer den av en spesiell «recompiler» som forvandler binær kode skrevet for en gitt prosessor til en annen (for eksempel å kjøre MIPS-kode på en PPC mac, eller ARM i en x86-PC).

For å etterligne mer enn bare prosessoren inkluderer Qemu en lang liste med perifere emulatorer: disk, nettverk, VGA, PCI, USB, serielle / parallelle porter osv.

Kilde: Forskjell mellom KVM og QEMU

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *