Novas versões dos emuladores Box86 e Box64, permitindo rodar jogos x86 em sistemas ARM

Foram publicadas versões dos emuladores Box86 0.2.6 e Box64 0.1.8, projetados para rodar programas Linux compilados para arquiteturas x86 e x86_64 em equipamentos com processadores ARM, ARM64, PPC64LE e RISC-V. Os projetos são desenvolvidos de forma síncrona por uma equipe de desenvolvedores - o Box86 é limitado à capacidade de executar aplicativos x32 de 86 bits e o Box64 oferece a capacidade de executar executáveis ​​de 64 bits. O projeto dá grande atenção à organização do lançamento de aplicativos de jogos, incluindo o fornecimento da capacidade de lançar compilações do Windows por meio do Wine e do Proton. O código fonte do projeto é escrito em C e distribuído (Box86, Box64) sob licença do MIT.

Uma característica do projeto é a utilização de um modelo de execução híbrido, em que a emulação é aplicada apenas ao código de máquina da própria aplicação e de bibliotecas específicas. Bibliotecas típicas do sistema, incluindo libc, libm, GTK, SDL, Vulkan e OpenGL, são substituídas por opções nativas das plataformas de destino. Dessa forma, as chamadas da biblioteca são executadas sem emulação, resultando em ganhos significativos de desempenho.

A emulação de código para o qual não há substituições nativas da plataforma alvo é realizada utilizando uma técnica de recompilação dinâmica (DynaRec) de um conjunto de instruções de máquina para outro. Comparada à interpretação de instruções de máquina, a recompilação dinâmica demonstra desempenho 5 a 10 vezes maior.

Nos testes de desempenho, os emuladores Box86 e Box64, quando executados nas plataformas Armhf e Aarch64, superaram significativamente os projetos QEMU e FEX-emu, e nos testes individuais (glmark2, openarena) obtiveram desempenho idêntico ao rodar um assembly nativo do alvo plataforma. Nos testes 7-zip e dav1d de computação intensiva, o desempenho do Box64 variou de 27% a 53% do desempenho do aplicativo nativo (para comparação, QEMU mostrou resultados de 5-16%, e FEX-emu - 13-26% ). Além disso, foi feita uma comparação com o emulador Rosetta 2, usado pela Apple para executar código x86 em sistemas com o chip M1 ARM. Rosetta 2 forneceu o teste baseado em 7zip com desempenho de 71% da compilação nativa e Box64 - 57%.

Novas versões dos emuladores Box86 e Box64, permitindo rodar jogos x86 em sistemas ARM

Quanto à compatibilidade com aplicativos, dos 165 jogos testados, cerca de 70% funcionaram com sucesso. Cerca de outros 10% funcionam, mas com certas ressalvas e restrições. Os jogos suportados incluem WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious e a maioria dos jogos GameMaker. Entre os jogos com problemas observados, destacam-se os jogos baseados no motor Unity3D, que está vinculado ao pacote Mono, cuja emulação nem sempre funciona devido à compilação JIT utilizada no Mono, e também possui bastante altos requisitos gráficos que nem sempre são alcançáveis ​​em placas ARM. A substituição de bibliotecas de aplicativos GTK está atualmente limitada ao GTK2 (a substituição do GTK3/4 não está totalmente implementada).

Principais mudanças nos novos lançamentos:

  • Adicionada ligação para a biblioteca Vulkan. Adicionado suporte para API gráfica Vulkan e DXVK (implementação de DXGI, Direct3D 9, 10 e 11 em cima de Vulkan).
  • Vinculações aprimoradas para bibliotecas GTK. Adicionadas ligações para gstreamer e bibliotecas comumente usadas em aplicativos GTK.
  • Adicionado suporte inicial (apenas modo de interpretação por enquanto) para arquiteturas RISC-V e PPC64LE.
  • Correções foram feitas para melhorar o suporte para SteamPlay e a camada Proton. Oferece a capacidade de executar muitos jogos Linux e Windows do Steam em placas AArch64, como Raspberry Pi 3 e 4.
  • Gerenciamento de memória aprimorado, desempenho mmap e rastreamento de violação de proteção de memória.
  • Suporte aprimorado para a chamada de sistema clone na libc. Adicionado suporte para novas chamadas de sistema.
  • O mecanismo de recompilação dinâmica melhorou o trabalho com registros SSE/x87, adicionou suporte para novos códigos de máquina, otimizou conversões de números flutuantes e duplos, melhorou o processamento de transições internas e simplificou a adição de suporte para novas arquiteturas.
  • Carregador de arquivos ELF aprimorado.

Fonte: opennet.ru

Adicionar um comentário