Liegt die Leistung von QEMU (noch) hinter der von VirtualBox zurück und gibt es eine Möglichkeit, diese ohne die Hardwareunterstützung + das kvm-Kernelmodul zu verbessern?


9

Ich habe mehrere Artikel bemerkt, in denen behauptet wurde, QEMU sei langsamer als VirtualBox (ohne Hardware-Unterstützung), aber einige sind Jahre alt, und der neueste schien aus dem letzten Jahr zu stammen.

  • Stimmt es, dass QEMU langsamer als VirtualBox ist?
  • Wenn ja warum?
  • Gibt es irgendwelche Tricks, um die Leistungslücke zu schließen?

Einige meiner Hostsysteme unterstützen keine Hardwarevirtualisierung, daher interessieren mich besonders Leistungstipps, die ohne das Kernelmodul funktionieren.

Antworten:


10

Wenn Sie über x86-Virtualisierung auf einem x86-Host sprechen, sollten Sie beachten, dass kqemu (das alte Beschleunigungskernmodul für qemu) veraltet ist. Kernel Virtual Machine (KVM) ist "der Weg nach vorne", funktioniert aber nur auf Linux-Hosts. Der Gast kann ein beliebiges Betriebssystem sein, solange es sich um eine x86-Architektur handelt.

Qemu ist architekturübergreifend immer noch sehr langsam. Erst heute habe ich das neueste Qemu mit Debian MIPS64 im Gast ausprobiert ... es war von einem Terminal aus verwendbar, aber in Xorg schrecklich langsam. Nach meinem besten Wissen können Sie keine Anweisungen zur Prozessorbeschleunigung wie erweiterte Seitentabellen oder VT-x verwenden, wenn Sie architekturübergreifend arbeiten. Es ist alles in Software emuliert.

Also für x86 zu x86 - Virtualisierung, „raw“ Qemu ist langsam, aber KVM (die verwendet qemu) ist schnell. Ziemlich schnell. So schnell, dass es die von Red Hat empfohlene Virtualisierungslösung für RHEL ist.

VirtualBox bläst immer noch alles weg, was qemu / kvm in Bezug auf die hardwarebeschleunigte 2D / 3D-Grafikleistung bieten kann, da sich kvm auf die Servervirtualisierung und virtualbox auf die Desktopvirtualisierung konzentriert. Aber ich würde definitiv empfehlen, dass Sie sich kvm ansehen, wenn Sie mit einem Server zu tun haben.

Bearbeiten: Für Ihre Hosts, die keine Hardwarebeschleunigung haben, werden Sie einen ziemlich großen Overhead haben, unabhängig davon, welche virtuelle Lösung Sie verwenden. Das Emulieren von Hardware-Dingen in Software ist schwierig und teuer.


2
ls $(which kvm)zeigt einen Symlink zu qemu-system-x86_64. Ich vermute, genau darüber haben Sie mit KVM über QEMU gesprochen?
Catskul

Ja, aber KVM ist, wie der Name schon sagt, eine Kernel - basierte virtuelle Maschine, das bedeutet , dass die Hypervisor Eingeweide sind im Kernelmodul ‚kvm‘. Sie können sich vorstellen, dass es dem alten Kqemu ähnlich ist, wenn Sie möchten, aber architektonisch ist es sehr unterschiedlich. qemu ist eher ein Frontend als ein tatsächlicher Hypervisor, wenn kvm in Betrieb ist.
Allquixotic

Oh, ich habe vergessen hinzuzufügen: Der Grund, warum qemu (und jedes andere Virtualisierungssystem) ohne ein "Kernelmodul" so langsam ist (wie Sie sagen; was Sie wirklich meinen, ist "ohne Hardwarebeschleunigung"), ist, dass bestimmte Hardwareoperationen, die das Gastauftritte sind in Software sehr schwer zu emulieren. Nun, nicht schwer in Bezug auf unzuverlässig oder kompliziert; nur sloooooooooooooow. Aus diesem Grund hat Intel den größten Teil eines Jahrzehnts damit verbracht, uns hardwarebeschleunigte Anweisungen für die langsamsten Virtualisierungsschritte in Bezug auf VT-x und EPT zu geben. Die einzige Lösung besteht darin, Hardware zu verwenden, die diese Befehlssätze unterstützt.
Allquixotic

Gibt es etwas, das die Virtualbox auch ohne Hardwarebeschleunigung schneller macht?
Catskul

Nein. Ohne Hardwarebeschleunigung sollte die Leistung ziemlich gleich sein. VirtualBox verfügt möglicherweise über erweiterte x86-Optimierungen, die die Ausführung in Software etwas beschleunigen, was angemessen wäre, da virtualbox in erster Linie nur x86 unterstützt, während qemu ein viel breiteres Spielfeld bietet (Nicht-x86-Architekturen). Dies ist jedoch ein Implementierungs- / Designdetail, das im Wesentlichen auf die Cache-Lokalität, optimierte innere Schleifen, handcodierten Assembler, Host-seitiges Festplatten-E / A-Caching oder andere Tricks zurückzuführen ist. Ich bin mir nicht sicher, inwieweit vbox diese Dinge tut, die Qemu nicht tut, aber sie sind nicht sehr relevant ...
allquixotic

1

Angenommen, ein Host mit einer virtualisierungsfähigen CPU (Intel VT-x, AMD SVM), auf dem Qemu auf einem Kernel (Linux mit KVM) ausgeführt wird, ist relativ schnell.

Die technischen Gründe dafür, dass Qemu mit 2D (Youtube, Tabellenkalkulation, Spiele) und 3D-Emulation langsam ist, sind mir unklar. Ich kann jedoch vermuten, dass die "Videotreiber" einfach nicht gut genug sind - die Grafikhardware in der Hardware wird nicht optimal genutzt.

Positiv zu vermerken ist, dass eine kürzlich erfolgte Entwicklung das SPICE-Framework in qemu eingeführt hat. Eigentlich ist es ein paar Jahre alt und scheint einigermaßen ausgereift zu sein. Die Vorteile der Videoleistung beim Ausführen mit dem QXL-Videotreiber sind meiner Erfahrung nach enorm (2D-Webentwicklung). Ich weiß nicht, wie gut es im Vergleich zu Virtualbox ist, aber es ist definitiv eine Verbesserung. Ich denke, SPICE ist ein Muss für jeden, der Windows in Qemu ausführt.

Dies ist ausschließlich meine Meinung und es sollte beachtet werden, dass ich noch nie versucht habe, eine 3D- oder Videowiedergabe im Gast auszuführen.


1
Wenn Sie sich mit "grafikorientierter Emulation" auf 3D-Beschleunigung beziehen, liegt dies daran, dass GPUs nicht wie CPUs virtualisiert werden können. Die Softwareemulation ist unglaublich langsam, daher gibt es heutzutage zwei Lösungen: 1. API-Passthrough (dh DirectX-Aufrufe im Gast werden als DirectX-Aufrufe auf dem Host ausgeführt) 2. VGA-Passthrough (das eigentliche Problem: Die gesamte Grafikkarte wird zur Verfügung gestellt an den Gast). QEMU unterstützt # 2.
Marcus

@Marcus Passthrough ist der richtige Weg.
Ярослав Рахматуллин
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.