La version 11.0.0 du projet QEMU a été présenté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, la performance d'exécution du code dans un environnement isolé est proche de celle d'un système matériel grâce à l'exécution directe des instructions sur le CPU et à l'utilisation du hyperviseur Xen ou du module KVM sous Linux, ou du module NVMM sous NetBSD.
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 des architectures autres que x86. Au fil des ans, le support d'une émulation complète pour 14 architectures matérielles a été ajouté, et le nombre de périphériques matériels émulés a dépassé 400. Pour la version 11.0.0, plus de 2500 changements ont été effectués par 237 développeurs.
Améliorations clés ajoutées dans QEMU 11.0 :
- Le support pour les systèmes hôtes 32 bits a été supprimé, car il a été déclaré obsolète en avril dernier dans QEMU 10.0. Dans la version 10.2 de décembre, le générateur de code TCG (Tiny Code Generator) a cessé de prendre en charge les plateformes mips32 et ppc32, et dans la version 11.0 de QEMU, les plateformes restantes i386, arm, ppc et riscv32 ont été supprimées, avec un nettoyage de la base de code et du système de compilation des composants pour fonctionner sur des hôtes 32 bits.
- Un accélérateur de virtualisation « nitro » (« -accel nitro ») et un nouveau type de systèmes émulés « nitro » ont été mis en œuvre, permettant d'exécuter dans QEMU des enclaves isolées basées sur la technologie de calcul confidentiel AWS Nitro Enclave, par exemple pour des tests locaux des environnements Nitro Enclave dans QEMU. Dans AWS EC2, la technologie Nitro Enclave permet de lancer dans une machine virtuelle des enclaves isolées imbriquées pour travailler avec des données confidentielles, en leur allouant une partie de ses ressources.
- Le support pour les accélérateurs de virtualisation MSHV (Microsoft Hypervisor) et WHPX (Microsoft Windows Hypervisor Platform Extensions) a été amélioré.
- Lors de l'utilisation du hyperviseur KVM (« -accel kvm »), le support pour la virtualisation de l'extension Intel CET (Control-flow Enforcement Technology) a été introduit pour être utilisé dans des machines virtuelles la protection contre les exploits utilisant des techniques de programmation orientée retour (ROP - Return-Oriented Programming). Un support pour le redémarrage d'informations confidentielles a également été ajouté. machines virtuelles, utilisant des extensions pour le chiffrement de la mémoire AMD SEV-SNP (Virtualisation Chiffrée Sécurisée - Pagination Imbriquée Sécurisée) et Intel TDX (Extensions de Domaine de Confiance).
- L'appareil VirtIO-GPU, qui permet le fonctionnement d'un GPU virtuel, a été amélioré avec la possibilité de définir des résolutions d'écran distinctes pour différents dispositifs de sortie.
- Le VirtIO-GPU prend désormais en charge les contextes DRM (Direct Rendering Manager native context), permettant d'améliorer les performances du GPU virtuel depuis le système invité grâce à un passage direct des commandes au vrai GPU hôte. Le support des contextes DRM est activé avec le nouvel appareil virtio-gpu-gl en utilisant l'option « drm_native_context=on ». Contrairement aux contextes Virgl et Venus, qui opèrent au niveau de l'API OpenGL et Vulkan, le contexte DRM est implémenté au niveau UAPI du noyau Linux.
- Il est désormais possible d'utiliser le langage C++ pour le développement de plugins pour le générateur de code TCG (Tiny Code Generator).
- Le pilote de bloc NFS a ajouté le support pour la compilation avec la bibliothèque libnfs 6.
- Le pilote de bloc curl a été doté de l'option « force-range » pour forcer l'utilisation de l'en-tête HTTP « Range » lors du téléchargement d'images, sans vérification préalable de son support par une requête distincte avec l'en-tête HEAD.
- Le pilote de bloc FUSE a désactivé le traitement des opérations d'exportation en mode synchrone, qui bloquait le démarrage de la machine virtuelle jusqu'à ce que le traitement d'autres requêtes FUSE soit terminé. Il est désormais possible d'utiliser plusieurs threads d'entrée/sortie (iothread) lors de l'exécution d'exportations dans FUSE.
- L'émulateur d'architecture x86 a ajouté le support du processeur Intel Diamond Rapids (« Xeon 7 »).
- L'émulateur d'architecture ARM a ajouté le support des extensions processeur FEAT_ASID2 et FEAT_E2H0. Le générateur de code TCG a implémenté l'émulation des extensions SME (Scalable Matrix Extension).
- L'émulateur d'architecture HPPA a ajouté le support de l'émulation des processeurs 64 bits avec un espace d'adressage de 40 et 44 bits. Grâce à SeaBIOS-hppa24, l'initialisation du contrôleur PCI Astro est assurée, permettant l'utilisation des cartes graphiques PCI sur des systèmes 64 bits.
- L'émulateur d'architecture LoongArch a introduit la possibilité de migration du PMU (Performance Monitoring Unit) lors de l'utilisation de l'hyperviseur KVM. Le générateur de code TCG a implémenté l'émulation des extensions LA v1.1, sc.q et llacq/screl, ainsi que des instructions FRECIP et DRECIP pour le calcul des valeurs inverses.
- L'émulateur d'architecture PowerPC a ajouté le support des instantanés.
- L'émulateur d'architecture RISC-V prend en charge le processeur MIPS P8700 et les extensions d'ensemble d'instructions Zilsd, Zclsd, ZALASR et Smpmpmt.
- L'émulateur d'architecture s390 prend en charge le démarrage à partir des dispositifs virtio-blk-pci et simule l'instruction « DIVIDE TO INTEGER ».
- Un correctif a été accepté, réduisant les latences de 50 à 80 fois lors de l'utilisation de fdmon (surveillance des descripteurs de fichiers) en mode « aio=io_uring » et lorsque le système est en état d'inactivité (idle).
Source : opennet.ru
