La version 7.2 du projet QEMU a été publiée. En tant qu'émulateur, QEMU permet d'exécuter un programme compilé pour une plateforme matérielle sur un système avec une architecture complètement différente, par exemple, d'exécuter une application pour ARM sur un PC compatible x86. En mode de virtualisation, les performances d'exécution du code dans un environnement isolé sont proches de celles d'un système matériel grâce à l'exécution directe des instructions sur le CPU et à l'utilisation de l'hyperviseur Xen ou du module KVM.
Le projet a été initialement créé par Fabrice Bellard dans le but de permettre l'exécution de fichiers exécutables Linux compilés pour la plateforme x86 sur d'autres architectures que x86. Au fil des années de développement, le support de l'émulation complète a été ajouté pour 14 architectures matérielles, et le nombre d'appareils matériels émulés a dépassé 400. Pour la version 7.2, plus de 1800 modifications ont été apportées par 205 développeurs.
Améliorations clés ajoutées dans QEMU 7.2 :
- Dans l'émulateur x86, le générateur de code classique TCG a ajouté le support des instructions AVX, AVX2, F16C, FMA3 et VAES, ainsi qu'une optimisation des performances liée à l'utilisation des instructions SSE. Pour KVM ajout de la prise en charge du mécanisme de suivi de sortie de machine virtuelle ('notify vmexit'), permettant de contourner les erreurs dans le CPU susceptibles de provoquer un blocage.
- Dans l'émulateur ARM, le support du CPU Cortex-A35 et des extensions de processeur ETS (Enhanced Translation Synchronization), PMUv3p5 (PMU Extensions 3.5), GTG (Guest Translation Granule 4KB, 16KB, 64KB), HAFDBS (contrôle matériel du drapeau d'accès et de l'état 'dirty') et E0PD (prévention de l'accès EL0 aux tables d'adresses partagées) a été réalisé.
- Dans l'émulateur LoongArch, le support fw_cfg DMA, le branchement à chaud de la mémoire et l'émulation des dispositifs TPM (Trusted Platform Module) ont été ajoutés.
- Dans l'émulateur OpenRISC, la plateforme 'virt' a été mise en œuvre pour effectuer des tests de dispositifs et pour être utilisée dans des systèmes d'intégration continue. Le support de l'exécution multithread du générateur de code classique TCG (Tiny Code Generator) a été réalisé.
- Dans l'émulateur RISC-V, la possibilité de charger le firmware à partir du pflash en mode S (S-mode) dans les machines émulées 'virt' a été mise en œuvre. L'interaction avec l'arbre des dispositifs a été améliorée.
- L'émulateur d'architecture 390x prend en charge l'extension MSA5 (Message-Security-Assist Extension 5 avec l'instruction PRNO pour la génération de nombres pseudo-aléatoires), les instructions KIMD/KLM (implémentation de SHA-512) et l'interprétation avancée de zPCI pour les systèmes invités basés sur l'hyperviseur KVM.
- Les backends de gestion de la mémoire assurent la préallocation de mémoire en tenant compte de l'architecture NUMA.
- La vérification des en-têtes des dispositifs de stockage chiffrés LUKS a été renforcée, avec la possibilité de créer des images LUKS sur macOS.
- Dans le backend 9pfs, qui permet d'utiliser le système de fichiers réseau Plan 9 pour l'accès d'une machine virtuelle à une autre, la transition vers l'utilisation de hachages GHashTable dans le tableau d'identifiants a permis d'augmenter les performances de 6 à 12 fois dans certaines situations.
- De nouveaux backends netdev stream et dgram ont été ajoutés.
- Dans l'agent pour les systèmes invités basés sur l'architecture ARM, la prise en charge de FreeBSD a été ajoutée.
- Dans les compilations GUI pour macOS, il est désormais possible d'inclure dans un seul fichier exécutable des interfaces basées sur Cocoa et SDL/GTK.
- Le sous-module intégré « slirp » a été supprimé, il est désormais recommandé d'utiliser la bibliothèque système libslirp.
- En raison de l'absence de possibilité de test, la prise en charge des systèmes hôtes avec des processeurs MIPS 32 bits utilisant l'ordre des octets « Big endian » a été déclarée obsolète.
Source : opennet.ru
