Novas versións dos emuladores Box86 e Box64, que che permiten executar xogos x86 en sistemas ARM

Publicáronse lanzamentos dos emuladores Box86 0.2.6 e Box64 0.1.8, deseñados para executar programas Linux compilados para arquitecturas x86 e x86_64 en equipos con procesadores ARM, ARM64, PPC64LE e RISC-V. Os proxectos son desenvolvidos de forma sincronizada por un equipo de desenvolvedores: Box86 está limitado á capacidade de executar aplicacións x32 de 86 bits e Box64 ofrece a posibilidade de executar executables de 64 bits. O proxecto presta moita atención á organización do lanzamento de aplicacións de xogos, incluíndo a posibilidade de lanzar compilacións de Windows a través de viño e Proton. O código fonte do proxecto está escrito en C e distribúese (Box86, Box64) baixo a licenza MIT.

Unha característica do proxecto é o uso dun modelo de execución híbrido, no que a emulación se aplica só ao código máquina da propia aplicación e a bibliotecas específicas. As bibliotecas típicas do sistema, incluíndo libc, libm, GTK, SDL, Vulkan e OpenGL, substitúense por opcións nativas das plataformas de destino. Deste xeito, as chamadas á biblioteca execútanse sen emulación, o que resulta en importantes ganancias de rendemento.

A emulación de código para o que non existen substitucións nativas da plataforma de destino realízase mediante unha técnica de recompilación dinámica (DynaRec) dun conxunto de instrucións de máquina a outro. En comparación coa interpretación das instrucións da máquina, a recompilación dinámica demostra un rendemento 5-10 veces superior.

Nas probas de rendemento, os emuladores Box86 e Box64, cando se executaron nas plataformas Armhf e Aarch64, superaron significativamente aos proxectos QEMU e FEX-emu, e nas probas individuais (glmark2, openarena) acadaron un rendemento idéntico ao de executar un conxunto nativo do obxectivo. plataforma. Nas probas de 7-zip e dav1d de computación intensiva, o rendemento de Box64 variou do 27% ao 53% do rendemento da aplicación nativa (para comparación, QEMU mostrou resultados do 5-16% e FEX-emu - 13-26% ). Ademais, realizouse unha comparación co emulador Rosetta 2, usado por Apple para executar código x86 en sistemas co chip M1 ARM. Rosetta 2 proporcionou a proba baseada en 7zip cun rendemento do 71% da compilación nativa e Box64 - 57%.

Novas versións dos emuladores Box86 e Box64, que che permiten executar xogos x86 en sistemas ARM

En canto á compatibilidade coas aplicacións, dos 165 xogos probados, preto do 70% funcionaron con éxito. Preto doutro 10% traballa, pero con certas reservas e restricións. Os xogos compatibles inclúen WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious e a maioría dos xogos de GameMaker. Entre os xogos cos que se observaron problemas, menciónanse os xogos baseados no motor Unity3D, que está ligado ao paquete Mono, cuxa emulación non sempre funciona debido á compilación JIT utilizada en Mono, e que ademais ten bastante altos requisitos gráficos que non sempre son alcanzables en placas ARM. A substitución das bibliotecas de aplicacións GTK está limitada actualmente a GTK2 (a substitución de GTK3/4 non está totalmente implementada).

Principais cambios nas novas versións:

  • Engadiuse a ligazón para a biblioteca Vulkan. Engadido soporte para a API de gráficos Vulkan e DXVK (implementación de DXGI, Direct3D 9, 10 e 11 enriba de Vulkan).
  • Ligazóns melloradas para bibliotecas GTK. Engadíronse ligazóns para gstreamer e bibliotecas que se usan habitualmente nas aplicacións GTK.
  • Engadido soporte inicial (só modo de interpretación polo momento) para arquitecturas RISC-V e PPC64LE.
  • Fixéronse correccións para mellorar a compatibilidade con SteamPlay e a capa Proton. Ofrece a posibilidade de executar moitos xogos de Linux e Windows desde Steam en placas AArch64 como Raspberry Pi 3 e 4.
  • Mellora a xestión da memoria, o rendemento mmap e o seguimento de infraccións de protección da memoria.
  • Compatibilidade mellorada para a chamada do sistema clon en libc. Engadido soporte para novas chamadas do sistema.
  • O motor de recompilación dinámica mellorou o traballo cos rexistros SSE/x87, engadiu compatibilidade con novos códigos de máquina, optimizou as conversións de números flotantes e dobres, mellorou o procesamento de transicións internas e simplificou a adición de soporte para novas arquitecturas.
  • Cargador de ficheiros ELF mellorado.

Fonte: opennet.ru

Engadir un comentario