Virtualisierung: Was ist der Unterschied zwischen KVM und QEMU?


Beste Antwort

KVM ist eine Abzweigung von QEMU. KVM-Codebasis wird geändert, um die Hardwarebeschleunigung zu unterstützen, sofern verfügbar (gleiche Architektur für Host- und Gast-VM).

In den meisten Fällen wird QEMU zum Emulieren einer anderen Architektur verwendet (z. B. ARM / Power Arch emulieren mit x86-Prozessor). . Ich habe dies verwendet, um ein RaspberryPI-Image auszuführen, das auf ARM in meinem Laptop mit einem Intel-Prozessor ausgeführt wird.

Ein Unterschied besteht darin, dass QEMU auf einem Prozessor ausgeführt wird, ohne dass eine Hardwarevirtualisierungserweiterung (Intel) erforderlich ist VT / VT-d, AMD-V), während KVM es verwendet. Mit Hardware-Virtualisierungserweiterungen können Sie direkt auf die Hardware auf der physischen Maschine zugreifen. Der Nachteil ist, dass die KVM-Codebasis keine andere Architektur emulieren kann.

Aber Wenn KVM auf einem Computer ohne HW virt ext ausgeführt wird, wechselt es zurück zu QEMU, um die VM auszuführen.

Um zu überprüfen, ob Ihr Prozessor Hardware virt unterstützt, können Sie für Windows http://www.cpuid.com/cpuz.php oder http://www.grc.com/securable.htm und suchen Sie nach der Erweiterung „vmx“ oder „svm“. (Letzteres ist viel einfacher.)

Verwenden Sie unter Linux

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

Beide Codebasen werden zusammengeführt, und wir werden sie in Zukunft als ein Projekt betrachten. Dadurch wird KVM veraltet und mit der QEMU-Codebasis zusammengeführt.

Übrigens, fast alle neuen Prozessoren werden von veröffentlicht Intel und AMD unterstützen Virtualisierung, aber ich habe einen Acer-Laptop mit einem Intel-Prozessor gesehen, der keine Hardwarevirtualisierung unterstützt. Überprüfen Sie auch Ihr BIOS, ob diese Erweiterung aktiviert ist. In anderen BIOS ist die Erweiterung standardmäßig deaktiviert.

Antwort

Ursprünglich von Serverfehler

KVM :

KVM ist ein paar Dinge: Erstens Es ist ein Linux-Kernelmodul (jetzt in der Hauptzeile enthalten), das den Prozessor in einen neuen „Gast“ -Status versetzt. Der Gaststatus verfügt über einen eigenen Satz von Ringstatus, aber privilegierte ring0-Anweisungen greifen auf den Hypervisor-Code zurück. Da es sich um einen neuen Prozessorausführungsmodus handelt, muss der Code in keiner Weise geändert werden.

Abgesehen von der Prozessorzustandsumschaltung verarbeitet das Kernelmodul auch einige Teile des Low-Level-Moduls Emulation, wie die MMU-Register (zur Verarbeitung von VMs) und einige Teile der PCI-emulierten Hardware.

Zweitens ist KVM eine Abzweigung der ausführbaren Qemu-Datei. Beide Teams arbeiten aktiv daran, Unterschiede auf ein Minimum zu beschränken, und es gibt Fortschritte bei der Reduzierung. Letztendlich ist das Ziel, dass Qemu überall funktionieren sollte, und wenn ein KVM-Kernelmodul verfügbar ist, könnte es verwendet werden. Auf absehbare Zeit konzentriert sich das Qemu-Team jedoch auf die Hardware-Emulation und Portabilität, während sich die KVM-Mitarbeiter auf das Kernel-Modul konzentrieren (manchmal werden kleine Teile der Emulation dorthin verschoben, wenn sich herausstellt, dass es die Leistung verbessert) und auf die Schnittstelle mit dem Rest des Userspace-Codes

Die ausführbare Datei kvm-qemu funktioniert wie normales Qemu: Ordnet RAM zu, lädt den Code und erzeugt einen Thread, anstatt ihn neu zu kompilieren oder KQemu aufzurufen (dies ist wichtig). Der Thread ruft das KVM-Kernelmodul auf, um in den Gastmodus zu wechseln, und fährt mit der Ausführung des VM-Codes fort. Bei einer Berechtigungsanweisung wird wieder auf das KVM-Kernelmodul umgeschaltet, das dem Qemu-Thread bei Bedarf signalisiert, dass er den größten Teil der Hardwareemulation übernimmt.

Eines der schönen Dinge dieser Architektur ist, dass der Gast Code wird in einem Posix-Thread emuliert, den Sie mit normalen Linux-Tools verwalten können. Wenn Sie eine VM mit 2 oder 4 Kernen möchten, erstellt kvm-qemu 2 oder 4 Threads, von denen jeder das KVM-Kernelmodul aufruft, um mit der Ausführung zu beginnen. Die Parallelität (wenn Sie über genügend echte Kerne verfügen) oder die Zeitplanung (wenn Sie dies nicht tun) wird vom normalen Linux-Scheduler verwaltet, wodurch der Code klein und die Überraschungen begrenzt bleiben.

Qemu :

QEmu ist eine vollständige und eigenständige Software für sich. Sie verwenden es, um Maschinen zu emulieren. Es ist sehr flexibel und portabel. Hauptsächlich arbeitet es mit einem speziellen „Recompiler“, der für einen bestimmten Prozessor geschriebenen Binärcode in einen anderen umwandelt (z. B. um MIPS-Code auf einem PPC-Mac oder ARM auszuführen In einem x86-PC).

Um mehr als nur den Prozessor zu emulieren, enthält Qemu eine lange Liste von Peripherie-Emulatoren: Festplatte, Netzwerk, VGA, PCI, USB, serielle / parallele Ports usw.

Quelle: Unterschied zwischen KVM und QEMU

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.