Nuevas versiones de los emuladores Box86 y Box64, que permiten ejecutar juegos x86 en sistemas ARM.

Se han publicado las versiones de los emuladores Box86 0.2.6 y Box64 0.1.8, destinados a ejecutar programas de Linux compilados para arquitecturas x86 y x86_64 en hardware con procesadores ARM, ARM64, PPC64LE y RISC-V. Los proyectos son desarrollados de manera sincrónica por un mismo equipo de desarrolladores: Box86 se limita a la ejecución de aplicaciones x86 de 32 bits, mientras que Box64 permite la ejecución de archivos ejecutables de 64 bits. El proyecto presta especial atención a la ejecución de aplicaciones de juegos, incluyendo la posibilidad de iniciar compilaciones de Windows a través de wine y Proton. El código fuente del proyecto está escrito en C y se distribuye (Box86, Box64) bajo la licencia MIT.

Una característica del proyecto es la aplicación de un modelo híbrido de ejecución, en el cual la emulación se aplica únicamente al código de máquina de la propia aplicación y a bibliotecas específicas. Las bibliotecas del sistema estándar, incluyendo libc, libm, GTK, SDL, Vulkan y OpenGL, se sustituyen por versiones nativas de las plataformas de destino. De este modo, las llamadas a las bibliotecas se ejecutan sin emulación, lo que permite lograr un aumento significativo en el rendimiento.

La emulación de código para el cual no hay sustitutos nativos para la plataforma de destino se lleva a cabo utilizando técnica de recompilación dinámica (DynaRec) de un conjunto de instrucciones de máquina a otro. En comparación con la interpretación de instrucciones de máquina, la recompilación dinámica demuestra un rendimiento de 5 a 10 veces superior.

En las pruebas de rendimiento, los emuladores Box86 y Box64 ejecutándose en plataformas Armhf y Aarch64 superaron significativamente a los proyectos QEMU y FEX-emu, y en pruebas específicas (glmark2, openarena) lograron un rendimiento equivalente al de ejecutar una compilación nativa de la plataforma objetivo. En las pruebas de 7-zip y dav1d, que realizan cálculos intensivos, el rendimiento de Box64 fue del 27% al 53% del rendimiento de la aplicación nativa (para comparación, QEMU mostró un resultado del 5-16%, y FEX-emu - 13-26%). Además, se realizó una comparación con el emulador Rosetta 2, utilizado por Apple para ejecutar código x86 en sistemas con chip ARM M1. Rosetta 2 logró ejecutar la prueba basada en 7zip con un rendimiento del 71% de la compilación nativa, mientras que Box64 alcanzó el 57%.

Nuevas versiones de los emuladores Box86 y Box64, que permiten ejecutar juegos x86 en sistemas ARM.

En cuanto a la compatibilidad con aplicaciones, de 165 juegos probados, alrededor del 70% funcionaron correctamente. Aproximadamente el 10% adicional funcionan, pero con ciertas condiciones y limitaciones. Entre los juegos compatibles se encuentran WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious y la mayoría de los juegos de GameMaker. Los problemas se han reportado en juegos basados en el motor Unity3D, que depende del paquete Mono, cuya emulación no siempre funciona debido a la compilación JIT utilizada en Mono, así como a los altos requisitos gráficos que a veces no son alcanzables en plataformas ARM. La sustitución de bibliotecas en aplicaciones GTK está actualmente limitada a GTK2 (la sustitución de GTK3/4 no está completamente implementada).

Los cambios principales en las nuevas versiones:

  • Se ha añadido un envoltorio para la biblioteca Vulkan. Se ha agregado soporte para la API gráfica Vulkan y DXVK (una implementación de DXGI, Direct3D 9, 10 y 11 sobre Vulkan).
  • Se han mejorado los envoltorios para las bibliotecas GTK. Se han añadido envoltorios para gstreamer y bibliotecas comúnmente utilizadas en aplicaciones GTK.
  • Se ha añadido soporte inicial (actualmente solo en modo interpretación) para las arquitecturas RISC-V y PPC64LE.
  • Se han realizado correcciones dirigidas a mejorar el soporte de SteamPlay y la capa de Proton. Se ha facilitado el lanzamiento de muchos juegos de Linux y Windows desde Steam en placas AArch64, como Raspberry Pi 3 y 4.
  • Se ha mejorado la gestión de memoria, el funcionamiento de mmap y el seguimiento de violaciones de protección de memoria.
  • Se ha mejorado el soporte para la llamada al sistema clone en libc. Se ha añadido soporte para nuevas llamadas al sistema.
  • Se ha mejorado el motor de recompilación dinámica en el manejo de registros SSE/x87, se ha añadido soporte para nuevos códigos de máquina, se han optimizado conversiones de números float y double, se ha mejorado el manejo de saltos internos y se ha simplificado la adición de soporte para nuevas arquitecturas.
  • Se ha mejorado el cargador de archivos en formato ELF.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster