Bästa svaret
KVM är en gaffel av QEMU. KVM-kodbaserad modifieras för att stödja hårdvaruacceleration när det är tillgängligt (samma arkitektur för värd- och gäst-VM)
Mest om tiden används QEMU för att emulera en annan arkitektur (t.ex. Emulera ARM / Power arch. Med x86-processor) . Jag har använt den här för att köra en RaspberryPI-bild som körs på ARM i min bärbara dator som har en Intel-processor.
En skillnad mellan dem är att QEMU körs på en processor utan att behöva ha hårdvaruvirtualisering (Intel VT / VT-d, AMD-V) medan KVM använder det. Hårdvaruvirtualiseringstillägg gör att du kan komma åt hårdvaran på den fysiska maskinen direkt. Nackdelen är att KVM-kodbas inte kan efterlikna en annan arkitektur.
Men när KVM körs på en maskin utan HW virt ext., byter den tillbaka till QEMU för att köra den virtuella datorn.
För att kontrollera om din processor stöder hårdvarudeklaration, för Windows kan du använda http://www.cpuid.com/cpuz.php eller http://www.grc.com/securable.htm och leta efter tillägget ”vmx” eller ”svm”. (Det senare är mycket lättare)
På Linux använder du
- egrep ”(vmx | svm)” / proc / cpuinfo
Sammanslagning av båda kodbaserna är under processen och vi kommer att se dem som ett projekt i framtiden. Detta kommer att göra KVM föråldrad och slås samman till QEMU-kodbas.
Förresten, nästan alla nya processorer släpptes av Intel och AMD stöder virtualisering men jag har sett en Acer-bärbar dator med en Intel-processor som inte stöder hårdvaruvirtualisering. Kontrollera också din BIOS om det här tillägget är aktiverat. Annat BIOS har tillägget inaktiverat som standard.
Svar
Ursprungligen från Serverfel
KVM :
KVM är ett par saker: först det är en Linux-kärnmodul (ingår nu i huvudlinjen) som byter processor till ett nytt ”gäst” -tillstånd. Gästtillståndet har sin egen uppsättning ringtillstånd, men privilegierade ring0-instruktioner faller tillbaka till hypervisor-koden. Eftersom det är ett nytt processläge för exekvering, behöver koden inte modifieras på något sätt.
Förutom omkoppling av processortillstånd, hanterar kärnmodulen också några lågnivådelar av emulering, som MMU-registren (används för att hantera VM) och vissa delar av PCI-emulerad hårdvara.
För det andra är KVM en gaffel för Qemu-körningen. Båda lagen arbetar aktivt för att hålla skillnaden på ett minimum, och det finns framsteg i att minska den. Så småningom är målet att Qemu ska fungera var som helst, och om en KVM-kärnmodul är tillgänglig kan den användas. Men inom överskådlig framtid fokuserar Qemu-teamet på hårdvaruemulering och bärbarhet, medan KVM-folk fokuserar på kärnmodulen (ibland flyttar små delar av emuleringen dit, om det visar sig att det förbättrar prestanda), och gränssnitt med resten av användarutrymmeskoden .
Den körbara kvm-qemu-körningen fungerar som vanlig Qemu: tilldelar RAM, läser in koden och istället för att kompilera den igen eller ringa KQemu, ger den en tråd (detta är viktigt); tråden anropar KVM-kärnmodulen för att växla till gästläge och fortsätter att köra VM-koden. På en behörighetsinstruktion växlar den tillbaka till KVM-kärnmodulen, som vid behov signalerar Qemu-tråden för att hantera det mesta av hårdvaruemuleringen.
En av de trevliga sakerna med denna arkitektur är att gästen koden emuleras i en posix-tråd, som du kan hantera med vanliga Linux-verktyg. Om du vill ha en virtuell dator med 2 eller 4 kärnor skapar kvm-qemu 2 eller 4 trådar, var och en av dem ringer KVM-kärnmodulen för att börja köra. Samtidigheten (om du har tillräckligt med riktiga kärnor) eller schemaläggning (om du inte gör det) hanteras av den normala Linux-schemaläggaren, vilket gör att koden är liten och överraskningarna är begränsade.
Qemu :
QEmu är en komplett och fristående programvara på egen hand. Du använder den för att emulera maskiner, den är väldigt flexibel och bärbar. Huvudsakligen fungerar den med en speciell ”recompiler” som förvandlar binär kod skriven för en given processor till en annan (säg att köra MIPS-kod på en PPC mac eller ARM i en x86-dator).
För att emulera mer än bara processorn innehåller Qemu en lång lista med perifera emulatorer: disk, nätverk, VGA, PCI, USB, seriella / parallella portar etc.
Källa: Skillnad mellan KVM och QEMU