Die Version des Projekts QEMU 9.0 wurde vorgestellt. Als Emulator ermöglicht QEMU das Ausführen von Programmen, die für eine bestimmte Hardwareplattform erstellt wurden, auf einem System mit einer völlig anderen Architektur, beispielsweise das Ausführen einer Anwendung für ARM auf einem x86-kompatiblen PC. Im Virtualisierungsmodus ist die Ausführungsgeschwindigkeit des Codes in einer isolierten Umgebung nahe an der einer physischen Hardware aufgrund der direkten Ausführung von Befehlen auf der CPU und der Einbeziehung des Hypervisors Xen oder des KVM-Moduls in Linux oder des NVMM-Moduls in NetBSD.
Das Projekt wurde ursprünglich von Fabrice Bellard ins Leben gerufen, um die Ausführung von für die x86-Plattform kompilierten Linux-Executables auf Architekturen zu ermöglichen, die sich von x86 unterscheiden. Im Laufe der Jahre wurden über 2700 Änderungen von 220 Entwicklern vorgenommen, und es wurde Unterstützung für die vollständige Emulation von 14 Hardwarearchitekturen hinzugefügt, wobei die Anzahl emulierter Hardwaregeräte über 400 gestiegen ist.
Wesentliche Verbesserungen, die in QEMU 9.0 hinzugefügt wurden:
- Im virtio-blk-Treiber, der ein virtuelles Blockgerät bereitstellt für virtuelle Maschinen, wurde Unterstützung für ein mehrstufiges Warteschlangensystem (Multiqueue) hinzugefügt, das es ermöglicht, Warteschlangen für verschiedene Blockgeräte zu trennen, um den Multithread-Zugriff auf Mehrkernsystemen zu verbessern (verschiedene Warteschlangen eines Laufwerks können von verschiedenen E/A-Threads verarbeitet werden).
- Im Blockgerät usb-storage wurde Unterstützung für 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 unter Verwendung des RSP (Remote Serial Protocol) entwickelt wurde, wurde Unterstützung für den fork-follow-Modus, die Operation siginfo:read und das Abfangen von Systemaufrufen im Benutzerspeicher hinzugefügt.
- Die Backends für die vorzeitige Speicherreservierung (Preallocation) wurden für den Multithread-Betrieb angepasst und können jetzt gleichzeitig Anfragen aus mehreren Threads bearbeiten.
- Im Migrationstools für virtuelle Maschinen wurde der Modus „mapped-ram“ hinzugefügt, der die Effizienz der Erstellung von Snapshots virtueller Maschinen erhöht. Die Erkennung von Nullseiten im Speicher wurde verbessert, was die Migration inaktiver virtueller Maschinen bei bestehender multifd-Unterstützung erheblich beschleunigt hat. Bei der Migration auf VFIO (Virtual Function I/O) wurde die Unterstützung für den Neustart aus dem gespeicherten Zustand (checkpoint-restart) implementiert.
- Die Implementierung des Geräts ESP SCSI (am53c974/dc390) wurde neu geschrieben.
- Die Unterstützung des Verschlüsselungsalgorithmus SM4 wurde hinzugefügt, und es ist nun möglich, ihn im Treiber des Blockgeräts 'luks' zu verwenden.
- Im Treiber 'luks' wurde die Unterstützung für die Erstellung und Verwendung von Dateien mit gespeicherten LUKS-Headern hinzugefügt.
- Im Emulator der ARM-Architektur wurde Unterstützung für die Boards L475E-IOT01A IoT, mp3-an536 (MPS3 mit AN536-Firmware) und raspi4b (Raspberry Pi 4 Model B) implementiert. Unterstützung für die Emulation der Prozessorerweiterungen ECV (Enhanced Counter Virtualization), NV (Nested Virtualization) und NV2 (Enhanced Nested Virtualization) wurde hinzugefügt. Die Möglichkeiten der Emulatoren für Freescale i.MX6, Allwinner R40, Bananapi, Raspberry Pi, npcm7xx und virt wurden erweitert.
- Im Emulator der RISC-V-Architektur wurde die Unterstützung für die Anweisungen der Befehlssatzerweiterungen Zacas, amocas, RVA22, Zaamo, Zalrsc und Ztso hinzugefügt. virtuellen Maschinen RISC-V bietet Unterstützung für SMBIOS. Für SRAT, SLIT, AIA und PLIC wurde die Unterstützung für ACPI implementiert. Die Unterstützung für RHCT-Tabellen wurde aktualisiert.
- Im Emulator der HPPA-Architektur wurde die Firmware SeaBIOS-hppa bis Version 16 aktualisiert. Die maximale Speicherkapazität wurde von 3 GB auf 3840 MB erhöht. Unterstützung für die Option „—nodefaults“ wurde hinzugefügt.
- Im Emulator der LoongArch-Architektur wurde die Unterstützung für die KVM-Beschleunigung und die Implementierung der vektoriellen Erweiterungen des Befehlssatzes LSX/LASX hinzugefügt.
- Im Emulator der Architektur s390x wurde die Unterstützung für die Anweisungen CVDG, CVB, CVBY und CVBG hinzugefügt. Die Emulation von LAE (Load Address Extended) wurde verbessert.
- Im Emulator der 68k-Architektur wurde das Gerät nubus-virtio-mmio hinzugefügt, das den Zugriff auf virtio-Geräte aus q800-Maschinen ermöglicht.
- Die Erstellung mit der Option ‘-fzero-call-used-regs’ ermöglicht den Schutz vor Informationslecks aus Funktionen und reduziert die Anzahl der Blöcke, die für den Bau von ROP-Gadgets (Return-Oriented Programming) in Exploits geeignet sind. Außerdem wurde die Erstellung mit der Option ‘-ftrivial-auto-var-init=zero’ für die automatische Initialisierung aller im Stack gespeicherten Variablen mit dem Wert Null hinzugefügt.
- Für den Betrieb von QEMU mit KVM ist jetzt mindestens ein Linux-Kernel der Version 4.4 erforderlich. Für ARM-Hosts soll dieser Wert in Zukunft auf Version 4.19 erhöht werden. Die Unterstützung 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
