Nouvelles versions des émulateurs Box86 et Box64, permettant d'exécuter des jeux x86 sur les systèmes ARM

Des versions des émulateurs Box86 0.2.6 et Box64 0.1.8 ont été publiées, conçues pour exécuter des programmes Linux compilés pour les architectures x86 et x86_64 sur des équipements équipés de processeurs ARM, ARM64, PPC64LE et RISC-V. Les projets sont développés de manière synchrone par une équipe de développeurs - Box86 est limité à la capacité d'exécuter des applications x32 86 bits, et Box64 offre la possibilité d'exécuter des exécutables 64 bits. Le projet accorde une grande attention à l'organisation du lancement d'applications de jeux, notamment en offrant la possibilité de lancer des builds Windows via Wine et Proton. Le code source du projet est écrit en C et distribué (Box86, Box64) sous licence MIT.

Une caractéristique du projet est l'utilisation d'un modèle d'exécution hybride, dans lequel l'émulation est appliquée uniquement au code machine de l'application elle-même et à des bibliothèques spécifiques. Les bibliothèques système typiques, notamment libc, libm, GTK, SDL, Vulkan et OpenGL, sont remplacées par des options natives des plates-formes cibles. De cette façon, les appels à la bibliothèque sont exécutés sans émulation, ce qui entraîne des gains de performances significatifs.

L'émulation du code pour lequel il n'existe pas de remplacement natif sur la plateforme cible est réalisée à l'aide d'une technique de recompilation dynamique (DynaRec) d'un ensemble d'instructions machine à un autre. Par rapport à l’interprétation des instructions machine, la recompilation dynamique démontre des performances 5 à 10 fois supérieures.

Dans les tests de performances, les émulateurs Box86 et Box64, lorsqu'ils sont exécutés sur les plates-formes Armhf et Aarch64, ont largement surpassé les projets QEMU et FEX-emu, et dans des tests individuels (glmark2, openarena), ils ont obtenu des performances identiques à l'exécution d'un assemblage natif de la cible. plate-forme. Dans les tests 7-zip et dav1d à forte intensité de calcul, les performances de Box64 variaient de 27 % à 53 % des performances de l'application native (à titre de comparaison, QEMU a montré des résultats de 5 à 16 % et FEX-emu de 13 à 26 % ). De plus, une comparaison a été faite avec l'émulateur Rosetta 2, utilisé par Apple pour exécuter du code x86 sur les systèmes dotés de la puce ARM M1. Rosetta 2 a fourni au test basé sur 7zip des performances de 71 % par rapport à la version native, et Box64 - 57 %.

Nouvelles versions des émulateurs Box86 et Box64, permettant d'exécuter des jeux x86 sur les systèmes ARM

Quant à la compatibilité avec les applications, sur 165 jeux testés, environ 70 % ont fonctionné avec succès. Environ 10 % supplémentaires travaillent, mais avec certaines réserves et restrictions. Les jeux pris en charge incluent WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious et la plupart des jeux GameMaker. Parmi les jeux avec lesquels des problèmes ont été constatés, on citera les jeux basés sur le moteur Unity3D, qui est lié au package Mono, dont l'émulation ne fonctionne pas toujours en raison de la compilation JIT utilisée dans Mono, et qui a également assez des exigences graphiques élevées qui ne sont pas toujours réalisables sur les cartes ARM. La substitution des bibliothèques d'applications GTK est actuellement limitée à GTK2 (la substitution de GTK3/4 n'est pas entièrement implémentée).

Principaux changements dans les nouvelles versions :

  • Ajout d'une liaison pour la bibliothèque Vulkan. Ajout de la prise en charge des API graphiques Vulkan et DXVK (implémentation de DXGI, Direct3D 9, 10 et 11 au-dessus de Vulkan).
  • Liaisons améliorées pour les bibliothèques GTK. Ajout de liaisons pour gstreamer et les bibliothèques couramment utilisées dans les applications GTK.
  • Ajout du support initial (uniquement en mode interprétation pour l'instant) pour les architectures RISC-V et PPC64LE.
  • Des correctifs ont été apportés pour améliorer la prise en charge de SteamPlay et de la couche Proton. Offre la possibilité d'exécuter de nombreux jeux Linux et Windows à partir de Steam sur des cartes AArch64 telles que Raspberry Pi 3 et 4.
  • Amélioration de la gestion de la mémoire, des performances mmap et du suivi des violations de protection de la mémoire.
  • Prise en charge améliorée de l'appel système clone dans la libc. Ajout de la prise en charge des nouveaux appels système.
  • Le moteur de recompilation dynamique a amélioré le travail avec les registres SSE/x87, ajouté la prise en charge de nouveaux codes machine, optimisé les conversions de nombres flottants et doubles, amélioré le traitement des transitions internes et simplifié l'ajout de la prise en charge de nouvelles architectures.
  • Chargeur de fichiers ELF amélioré.

Source: opennet.ru

Ajouter un commentaire