È stato presentato il rilascio del progetto QEMU 9.0. Come emulatore, QEMU consente di eseguire un programma compilato per una piattaforma hardware su un sistema con architettura completamente diversa, ad esempio, eseguire un'applicazione per ARM su un PC compatibile con x86. In modalità virtualizzazione, le prestazioni di esecuzione del codice in un ambiente isolato sono vicine a quelle di un sistema hardware grazie all'esecuzione diretta delle istruzioni sulla CPU e all'uso dell'ipervisore Xen o del modulo KVM in Linux, o del modulo NVMM in NetBSD.
Il progetto è stato originariamente creato da Fabrice Bellard con l'obiettivo di consentire l'esecuzione di file eseguibili Linux compilati per la piattaforma x86 su architetture diverse da x86. Negli anni di sviluppo è stato aggiunto il supporto per la piena emulazione di 14 architetture hardware, mentre il numero di dispositivi hardware emulati ha superato 400. Per la versione 9.0 sono state apportate oltre 2700 modifiche da 220 sviluppatori.
Miglioramenti chiave aggiunti in QEMU 9.0:
- Nel driver virtio-blk, che fornisce un dispositivo di blocco virtuale per di macchine virtuali, è stata aggiunta la supporto per un sistema di code multilivello (multiqueue), che consente di separare le code per diversi dispositivi di blocco per garantire l'accesso multithreaded su sistemi multicore (diverse code di un disco possono essere gestite da diversi thread di input/output).
- Nel dispositivo di blocco usb-storage è stata aggiunta la supporto per le proprietà ‘backend_defaults’, ‘logical_block_size’, ‘physical_block_size’, ‘min_io_size’, ‘opt_io_size’ e ‘discard_granularity’.
- Nella libreria gdbstub, progettata per il debugging remoto in GDB utilizzando il protocollo RSP (Remote Serial Protocol), è stata aggiunta la supporto per la modalità fork-follow, l'operazione siginfo:read e l'intercettazione delle chiamate di sistema nello spazio utente.
- I backend per la preallocazione della memoria sono stati adattati per funzionare in modalità multithreading e ora possono gestire simultaneamente richieste provenienti da più thread.
- Nello strumento per la migrazione delle macchine virtuali è stata aggiunta la modalità «mapped-ram», che aumenta l'efficienza nella creazione di snapshot delle macchine virtuali. È stato migliorato il riconoscimento della pagina di memoria zero, il che ha notevolmente accelerato la migrazione delle macchine virtuali inattive quando il sistema supporta multifd. Durante la migrazione basata su VFIO (Virtual Function I/O) è stata implementata la supporto per il riavvio dallo stato salvato (checkpoint-restart).
- È stata riscritta l'implementazione del dispositivo ESP SCSI (am53c974/dc390).
- È stata aggiunta la supporto per l'algoritmo di crittografia SM4 e resa possibile la sua utilizzo nel driver del dispositivo a blocchi ‘luks’.
- Nel driver ‘luks’ è stata aggiunta la supporto per la creazione e l'utilizzo di file con intestazioni LUKS salvate.
- Nell'emulatore dell'architettura ARM è stata implementata la supporto per le schede L475E-IOT01A IoT, mp3-an536 (MPS3 con firmware AN536) e raspi4b (Raspberry Pi 4 Model B). È stata anche aggiunta la supporto per l'emulazione delle estensioni del processore ECV (Enhanced Counter Virtualization), NV (Nested Virtualization) e NV2 (Enhanced Nested Virtualization). Sono state ampliate le funzionalità degli emulatori per le schede Freescale i.MX6, Allwinner R40, Bananapi, Raspberry Pi, npcm7xx e virt.
- L'emulatore architetturale RISC-V ha aggiunto il supporto per le estensioni del set di istruzioni Zacas, amocas, RVA22, Zaamo, Zalrsc e Ztso. In macchine virtuali RISC-V è stato aggiunto il supporto per SMBIOS. È stato implementato il supporto per ACPI per SRAT, SLIT, AIA e PLIC. Aggiornato il supporto per le tabelle RHCT.
- Nell'emulatore architetturale HPPA, il firmware SeaBIOS-hppa è stato aggiornato alla versione 16. La dimensione massima della memoria è aumentata da 3 GB a 3840 MB. È stata aggiunta l'opzione di supporto '—nodefaults'.
- Nell'emulatore architetturale LoongArch è stata aggiunta la supporto per l'accelerazione KVM e implementato il supporto per le estensioni vettoriali del set di istruzioni LSX/LASX.
- Nell'emulatore architetturale s390x è stato aggiunto il supporto per le istruzioni CVDG, CVB, CVBY e CVBG. È stata migliorata l'emulazione LAE (Load Address Extended).
- Nell'emulatore architetturale 68k è stato aggiunto il dispositivo nubus-virtio-mmio, consentendo l'accesso ai dispositivi virtio dalle macchine q800.
- È stata fornita una build con il flag ‘-fzero-call-used-regs’, permettendo di proteggere contro la fuoriuscita di informazioni dalle funzioni e ridurre il numero di blocchi idonei per la costruzione di gadget ROP (Return-Oriented Programming) negli exploit. È stata inoltre aggiunta una build con il flag ‘-ftrivial-auto-var-init=zero’ per l'inizializzazione automatica a zero di tutte le variabili memorizzate nello stack.
- Per eseguire QEMU con KVM è ora necessario avere almeno il kernel Linux 4.4. Per gli host ARM in futuro si prevede di alzare questa soglia alla versione 4.19. È stata interrotta la supporto per l'uso di Windows a 32 bit come sistemi operativi host.
- Aggiunta la supporto per OpenBSD 7.4.
Fonte: opennet.ru
