De release van het QEMU-project 9.0 is gepresenteerd. QEMU, als emulator, stelt je in staat om een programma dat voor een bepaald hardwareplatform is gebouwd, uit te voeren op een systeem met een compleet andere architectuur. Bijvoorbeeld, het uitvoeren van een ARM-applicatie op een x86-compatibele pc. In de virtualisatiemodus is de uitvoering van code in een geïsoleerde omgeving met QEMU bijna gelijk aan die van een fysiek systeem, doordat directe instructies op de CPU worden uitgevoerd en de hypervisor Xen of de KVM-module in Linux of de NVMM-module in NetBSD worden gebruikt.
Het project is oorspronkelijk opgericht door Fabrice Bellard met als doel de mogelijkheid te bieden om Linux-uitvoerbare bestanden die voor het x86-platform zijn gebouwd, uit te voeren op architecturen die verschillen van x86. Door de jaren heen is de ondersteuning voor volledige emulatie voor 14 hardwarearchitecturen toegevoegd, en het aantal geëmuleerde hardwareapparaten heeft meer dan 400 overschreden. Voor versie 9.0 zijn meer dan 2700 wijzigingen aangebracht door 220 ontwikkelaars.
Belangrijke verbeteringen toegevoegd in QEMU 9.0:
- In de virtio-blk-driver, die een virtueel blokapparaat biedt voor virtuele machines, is ondersteuning voor multiqueue-systeem toegevoegd, waardoor de wachtrijen voor verschillende blokapparaten gescheiden kunnen worden om multithread-toegang op multicore-systemen te garanderen (verschillende wachtrijen van één schijf kunnen door verschillende I/O-threads worden verwerkt).
- In het usb-storage blokapparaat is ondersteuning toegevoegd voor de eigenschappen 'backend_defaults', 'logical_block_size', 'physical_block_size', 'min_io_size', 'opt_io_size' en 'discard_granularity'.
- In de gdbstub-bibliotheek, bedoeld voor externe debugging in GDB met behulp van het RSP (Remote Serial Protocol), is ondersteuning toegevoegd voor de fork-follow-modus, operatie siginfo:read en het onderscheppen van systeemoproepen in de gebruikersruimte.
- De backends voor geheugentoewijzing (preallocation) zijn aangepast om in multithread-modus te werken en kunnen nu gelijktijdig verzoeken vanuit meerdere threads verwerken.
- In de tools voor het migreren van virtuele machines is de modus 'mapped-ram' toegevoegd, die de efficiëntie van het aanmaken van snapshots van virtuele machines verhoogt. De identificatie van de nulpagina in het geheugen is verbeterd, wat de migratie van inactieve virtuele machines aanzienlijk versneld heeft in systemen met ondersteuning voor multifd. Bij migraties gebaseerd op VFIO (Virtual Function I/O) is ondersteuning voor herstarten vanuit de opgeslagen status (checkpoint-restart) geïmplementeerd.
- De implementatie van het ESP SCSI-apparaat (am53c974/dc390) is herschreven.
- Ondersteuning voor het versleutelingsalgoritme SM4 is toegevoegd en het gebruik ervan in de blokapparaatstuurprogramma 'luks' is mogelijk gemaakt.
- In de driver 'luks' is ondersteuning toegevoegd voor het maken en gebruiken van bestanden met opgeslagen LUKS-koppen.
- In de emulator voor de ARM-architectuur is ondersteuning gerealiseerd voor de L475E-IOT01A IoT-boards, mp3-an536 (MPS3 met firmware AN536) en raspi4b (Raspberry Pi 4 Model B). Ondersteuning voor de emulator van processoruitbreidingen ECV (Enhanced Counter Virtualization), NV (Nested Virtualization) en NV2 (Enhanced Nested Virtualization) is toegevoegd. De mogelijkheden van de emulators voor de Freescale i.MX6, Allwinner R40, Bananapi, Raspberry Pi, npcm7xx en virt zijn uitgebreid.
- In de RISC-V-emulator is ondersteuning toegevoegd voor de architectuurcommando-extensies Zacas, amocas, RVA22, Zaamo, Zalrsc en Ztso. virtuele machines RISC-V biedt ondersteuning voor SMBIOS. Voor SRAT, SLIT, AIA en PLIC is ACPI-ondersteuning gerealiseerd. De ondersteuning voor RHCT-tabellen is geüpdatet.
- In de HPPA-emulator tot versie 16 is de firmware SeaBIOS-hppa geüpdatet. De maximale geheugengrootte is verhoogd van 3 GB naar 3840 MB. Ondersteuning voor de optie “--nodefaults” is toegevoegd.
- In de LoongArch-emulator is ondersteuning voor KVM-versnelling geïntroduceerd en is ondersteuning voor vectoruitbreidingen van de instructieset LSX/LASX gerealiseerd.
- In de s390x-emulator is ondersteuning toegevoegd voor de instructies CVDG, CVB, CVBY en CVBG. De emulatie van LAE (Load Address Extended) is verbeterd.
- In de 68k-emulator is het apparaat nubus-virtio-mmio toegevoegd, waarmee toegang tot virtio-apparaten vanuit q800-machines mogelijk is.
- Een build met de vlag ‘-fzero-call-used-regs’ is gegarandeerd, wat helpt om informatielekken uit functies te voorkomen en het aantal blokken dat geschikt is voor het bouwen van ROP-gadgets (Return-Oriented Programming) in exploits te verminderen. Ook is er een build met de vlag ‘-ftrivial-auto-var-init=zero’ toegevoegd voor automatische initialisatie met nul van alle variabelen die op de stack worden opgeslagen.
- Voor het uitvoeren van QEMU met KVM is nu minimaal Linux-kernel 4.4 vereist. Voor ARM-hosts wordt in de toekomst overwogen om deze drempel te verhogen naar versie 4.19. De ondersteuning voor 32-bits Windows als host-OS is beëindigd.
- Ondersteuning voor OpenBSD 7.4 is toegevoegd.
Bron: opennet.ru
