Die Release-Version des QEMU-Projekts 9.0 wurde vorgestellt. Als Emulator ermöglicht QEMU das Ausführen von Programmen, die für eine Hardware-Plattform kompiliert wurden, auf einem System mit völlig anderer Architektur, beispielsweise das Ausführen einer Anwendung für ARM auf einem x86-kompatiblen PC. Im Virtualisierungsmodus erreicht QEMU eine nahezu hardwareähnliche Leistung der Ausführung von Code in einer isolierten Umgebung, indem es Instruktionen direkt auf der CPU verarbeitet und entweder den Xen-Hypervisor oder das KVM-Modul in Linux oder das NVMM-Modul in NetBSD nutzt.
Das Projekt wurde ursprünglich von Fabrice Bellard mit dem Ziel ins Leben gerufen, die Ausführung von für die x86-Plattform kompilierten Linux-Binärdateien auf Architekturen, die von x86 abweichen, zu ermöglichen. Im Laufe der Jahre wurden die vollständige Emulation von 14 Hardware-Architekturen und die Unterstützung von über 400 emulierten Hardware-Geräten hinzugefügt. Für die Version 9.0 wurden über 2700 Änderungen von 220 Entwicklern implementiert.
Wesentliche Verbesserungen in QEMU 9.0 hinzugefügt:
- Im virtio-blk-Treiber, der ein virtuelles Blockgerät bereitstellt für virtuellen Maschinen, Unterstützung für ein mehrstufiges Warteschlangensystem (multiqueue) hinzugefügt, das es ermöglicht, Warteschlangen für verschiedene Blockgeräte zu trennen, um einen mehrstufigen Zugriff auf Multi-Core-Systemen zu gewährleisten (verschiedene Warteschlangen eines Datenträgers können von unterschiedlichen Ein-/Ausgabeströmen bearbeitet werden).
- Im Blockgerät usb-storage wurden die Eigenschaften 'backend_defaults', 'logical_block_size', 'physical_block_size', 'min_io_size', 'opt_io_size' und 'discard_granularity' hinzugefügt.
- In die gdbstub-Bibliothek, die für das Remote-Debugging in GDB mit dem RSP-Protokoll (Remote Serial Protocol) ausgelegt ist, wurde Unterstützung für den fork-follow-Modus, die Operation siginfo:read und das Abfangen von Systemaufrufen im Benutzerspace hinzugefügt.
- Die Backends für die Vorverteilung des Speichers (preallocation) wurden an den Betrieb im Multithreading-Modus angepasst und können nun gleichzeitig Anfragen aus mehreren Threads bearbeiten.
- Im Migrationstool für virtuelle Maschinen wurde der Modus „mapped-ram“ hinzugefügt, der die Effizienz beim Erstellen von Snapshots virtueller Maschinen erhöht. Die Erkennung von Null-Seiten im Speicher wurde verbessert, was die Migration inaktiver virtueller Maschinen bei Vorhandensein von multifd-Unterstützung erheblich beschleunigt hat. Bei Migrationen auf Basis von VFIO (Virtual Function I/O) wurde die Unterstützung für den Neustart aus einem gespeicherten Zustand (Checkpoint-Restart) implementiert.
- Die Implementierung des ESP SCSI Geräts (am53c974/dc390) wurde neu geschrieben.
- Unterstützung für den Verschlüsselungsalgorithmus SM4 hinzugefügt und die Nutzung in dem Blockgerätdriver ‚luks‘ ermöglicht.
- Im Driver ‚luks‘ wurde die Unterstützung für die Erstellung und Nutzung von Dateien mit gespeicherten LUKS-Überschriften hinzugefügt.
- Im ARM-Emulator wurde die Unterstützung für die Boards L475E-IOT01A IoT, mp3-an536 (MPS3 mit AN536-Firmware) und raspi4b (Raspberry Pi 4 Model B) implementiert. Die Emulation von CPU-Erweiterungen wie ECV (Enhanced Counter Virtualization), NV (Nested Virtualization) und NV2 (Enhanced Nested Virtualization) wurde hinzugefügt. Außerdem wurden die Möglichkeiten der Emulatoren für die Boards Freescale i.MX6, Allwinner R40, Bananapi, Raspberry Pi, npcm7xx und virt erweitert.
- Im RISC-V-Architektur-Emulator wurde die Unterstützung für die Befehlssatzerweiterungen Zacas, amocas, RVA22, Zaamo, Zalrsc und Ztso hinzugefügt. virtuellen Maschinen wurde vereinfacht. RISC-V unterstützt jetzt SMBIOS. Für SRAT, SLIT, AIA und PLIC wurde die ACPI-Unterstützung implementiert. Die Unterstützung für RHCT-Tabellen wurde aktualisiert.
- Im HPPA-Architektur-Emulator bis Version 16 wurde die Firmware SeaBIOS-hppa aktualisiert. Die maximale Speicherkapazität wurde von 3 GB auf 3840 MB erhöht. Die Option „—nodefaults“ wurde hinzugefügt.
- Im LoongArch-Architektur-Emulator wurde die Unterstützung für KVM-Beschleunigung sowie für die vektoriellen Befehlssatzerweiterungen LSX/LASX implementiert.
- Im s390x-Architektur-Emulator wurde die Unterstützung für die Befehle CVDG, CVB, CVBY und CVBG hinzugefügt. Die LAE (Load Address Extended)-Emulation wurde verbessert.
- Im 68k-Architektur-Emulator wurde das Gerät nubus-virtio-mmio hinzugefügt, das den Zugriff auf virtio-Geräte aus q800-Maschinen ermöglicht.
- Es wurde eine Build-Option mit dem Flag ‘-fzero-call-used-regs’ bereitgestellt, die vor Informationslecks aus Funktionen schützt und die Anzahl der Blöcke reduziert, die zur Erstellung von ROP-Gadgets (Return-Oriented Programming) in Exploits geeignet sind. Außerdem wurde eine Build-Option mit dem Flag ‘-ftrivial-auto-var-init=zero’ hinzugefügt, um alle im Stack gespeicherten Variablen automatisch mit dem Wert null zu initialisieren.
- Für den Betrieb von QEMU mit KVM ist jetzt mindestens ein Linux-Kernel der Version 4.4 erforderlich. Für ARM-Hosts wird diese Grenze in Zukunft auf Version 4.19 angehoben. Der Support für die Verwendung von 32-Bit Windows als Host-Betriebssystem wurde eingestellt.
- Unterstützung für OpenBSD 7.4 hinzugefügt.
Quelle: opennet.ru
