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

Se han publicado los lanzamientos de los emuladores Box86 0.2.6 y Box64 0.1.8, diseñados para ejecutar programas Linux compilados para arquitecturas x86 y x86_64 en equipos con procesadores ARM, ARM64, PPC64LE y RISC-V. Los proyectos son desarrollados sincrónicamente por un equipo de desarrolladores: Box86 se limita a la capacidad de ejecutar aplicaciones x32 de 86 bits y Box64 brinda la capacidad de ejecutar ejecutables de 64 bits. El proyecto presta gran atención a la organización del lanzamiento de aplicaciones de juegos, incluida 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 distribuido (Box86, Box64) bajo licencia MIT.

Una característica del proyecto es el uso de un modelo de ejecución híbrido, en el que la emulación se aplica únicamente al código de máquina de la propia aplicación y a bibliotecas específicas. Las bibliotecas típicas del sistema, incluidas libc, libm, GTK, SDL, Vulkan y OpenGL, se reemplazan con opciones nativas de las plataformas de destino. De esta manera, las llamadas a la biblioteca se ejecutan sin emulación, lo que genera importantes mejoras en el rendimiento.

La emulación de código para el cual no existen reemplazos nativos en la plataforma de destino se realiza mediante una 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 la máquina, la recompilación dinámica demuestra un rendimiento entre 5 y 10 veces mayor.

En las pruebas de rendimiento, los emuladores Box86 y Box64, cuando se ejecutaron en las plataformas Armhf y Aarch64, superaron significativamente a los proyectos QEMU y FEX-emu, y en pruebas individuales (glmark2, openarena) lograron un rendimiento idéntico al de ejecutar un ensamblado nativo para el objetivo. plataforma. En las pruebas de computación intensiva de 7-zip y dav1d, el rendimiento de Box64 osciló entre el 27% y el 53% del rendimiento de la aplicación nativa (a modo de comparación, QEMU logró entre el 5% y el 16% y FEX-emu entre el 13% y el 26%). Además, se realizó una comparación con el emulador Rosetta 2, utilizado por Apple para ejecutar código x86 en sistemas con el chip M1 ARM. Rosetta 2 proporcionó a la prueba basada en 7zip un rendimiento del 71% de la versión nativa, y Box64, un 57%.

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

En cuanto a la compatibilidad con las aplicaciones, de los 165 juegos probados, alrededor del 70% funcionó con éxito. Otro 10% aproximadamente trabaja, pero con ciertas reservas y restricciones. Los juegos compatibles incluyen WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious y la mayoría de los juegos de GameMaker. Entre los juegos con los que se han observado problemas, se mencionan los juegos basados ​​​​en el motor Unity3D, que está vinculado al paquete Mono, cuya emulación no siempre funciona debido a la compilación JIT utilizada en Mono, y también tiene bastante Altos requisitos de gráficos que no siempre se pueden lograr en placas ARM. La sustitución de bibliotecas de aplicaciones GTK está actualmente limitada a GTK2 (la sustitución de GTK3/4 no está completamente implementada).

Principales cambios en nuevos lanzamientos:

  • Se agregó enlace para la biblioteca Vulkan. Se agregó soporte para la API de gráficos Vulkan y DXVK (implementación de DXGI, Direct3D 9, 10 y 11 sobre Vulkan).
  • Enlaces mejorados para bibliotecas GTK. Se agregaron enlaces para gstreamer y bibliotecas comúnmente utilizadas en aplicaciones GTK.
  • Se agregó soporte inicial (solo modo de interpretación por ahora) para arquitecturas RISC-V y PPC64LE.
  • Se han realizado correcciones para mejorar la compatibilidad con SteamPlay y la capa Proton. Brinda la capacidad de ejecutar muchos juegos de Linux y Windows desde Steam en placas AArch64 como Raspberry Pi 3 y 4.
  • Gestión de memoria mejorada, rendimiento de mmap y seguimiento de violaciones de protección de memoria.
  • Soporte mejorado para la llamada al sistema de clonación en libc. Se agregó soporte para nuevas llamadas al sistema.
  • El motor de recompilación dinámica mejoró el trabajo con registros SSE/x87, agregó soporte para nuevos códigos de máquina, optimizó las conversiones de números flotantes y dobles, mejoró el procesamiento de transiciones internas y simplificó la adición de soporte para nuevas arquitecturas.
  • Cargador de archivos ELF mejorado.

Fuente: opennet.ru

Añadir un comentario