Nieuwe versies van Box86- en Box64-emulators, waarmee u x86-games op ARM-systemen kunt uitvoeren

Er zijn releases gepubliceerd van Box86 0.2.6 en Box64 0.1.8-emulators, ontworpen om Linux-programma's uit te voeren die zijn gecompileerd voor x86- en x86_64-architecturen op apparatuur met ARM-, ARM64-, PPC64LE- en RISC-V-processors. Projecten worden synchroon ontwikkeld door één team van ontwikkelaars - Box86 is beperkt tot de mogelijkheid om 32-bit x86-applicaties uit te voeren, en Box64 biedt de mogelijkheid om 64-bit uitvoerbare bestanden uit te voeren. Het project besteedt veel aandacht aan het organiseren van de lancering van gaming-applicaties, inclusief het bieden van de mogelijkheid om Windows-builds te starten via Wine en Proton. De broncode voor het project is geschreven in C en gedistribueerd (Box86, Box64) onder de MIT-licentie.

Kenmerkend voor het project is het gebruik van een hybride uitvoeringsmodel, waarbij emulatie alleen wordt toegepast op de machinecode van de applicatie zelf en specifieke bibliotheken. Typische systeembibliotheken, waaronder libc, libm, GTK, SDL, Vulkan en OpenGL, zijn vervangen door opties die eigen zijn aan de doelplatforms. Op deze manier worden bibliotheekaanroepen uitgevoerd zonder emulatie, wat resulteert in aanzienlijke prestatieverbeteringen.

Emulatie van code waarvoor geen vervangingen bestaan ​​die eigen zijn aan het doelplatform, wordt uitgevoerd met behulp van een techniek van dynamische hercompilatie (DynaRec) van de ene set machine-instructies naar de andere. Vergeleken met het interpreteren van machine-instructies levert dynamische hercompilatie vijf tot tien keer hogere prestaties op.

In prestatietests presteerden de Box86- en Box64-emulators, wanneer ze werden uitgevoerd op de Armhf- en Aarch64-platforms, aanzienlijk beter dan de QEMU- en FEX-emu-projecten, en in individuele tests (glmark2, openarena) bereikten ze prestaties die identiek waren aan het uitvoeren van een assemblage die eigen is aan het doel platform. In de rekenintensieve 7-zip- en dav1d-tests varieerden de prestaties van Box64 van 27% tot 53% van de prestaties van de native applicatie (ter vergelijking: QEMU liet resultaten zien van 5-16%, en FEX-emu - 13-26% ). Daarnaast werd een vergelijking gemaakt met de Rosetta 2-emulator, die door Apple wordt gebruikt om x86-code uit te voeren op systemen met de M1 ARM-chip. Rosetta 2 leverde de op 7zip gebaseerde test met prestaties van 71% van de native build, en Box64 - 57%.

Nieuwe versies van Box86- en Box64-emulators, waarmee u x86-games op ARM-systemen kunt uitvoeren

Wat de compatibiliteit met applicaties betreft: van de 165 geteste games werkte ongeveer 70% met succes. Ongeveer nog eens 10% werkt, maar met bepaalde voorbehouden en beperkingen. Ondersteunde spellen zijn onder meer WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious en de meeste GameMaker-spellen. Onder de spellen waarmee problemen zijn opgemerkt, wordt melding gemaakt van spellen die zijn gebaseerd op de Unity3D-engine, die is gekoppeld aan het Mono-pakket, waarvan de emulatie niet altijd werkt vanwege de JIT-compilatie die in Mono wordt gebruikt, en ook redelijk hoge grafische eisen die niet altijd haalbaar zijn op ARM-borden. Vervanging van GTK-applicatiebibliotheken is momenteel beperkt tot GTK2 (vervanging van GTK3/4 is niet volledig geïmplementeerd).

Belangrijkste wijzigingen in nieuwe releases:

  • Binding toegevoegd voor de Vulkan-bibliotheek. Ondersteuning toegevoegd voor de grafische API Vulkan en DXVK (implementatie van DXGI, Direct3D 9, 10 en 11 bovenop Vulkan).
  • Verbeterde bindingen voor GTK-bibliotheken. Bindingen toegevoegd voor gstreamer en bibliotheken die vaak worden gebruikt in GTK-applicaties.
  • Initiële ondersteuning toegevoegd (voorlopig alleen interpretatiemodus) voor RISC-V- en PPC64LE-architecturen.
  • Er zijn oplossingen aangebracht om de ondersteuning voor SteamPlay en de Proton-laag te verbeteren. Biedt de mogelijkheid om veel Linux- en Windows-games van Steam uit te voeren op AArch64-borden zoals Raspberry Pi 3 en 4.
  • Verbeterd geheugenbeheer, mmap-prestaties en tracking van schendingen van geheugenbescherming.
  • Verbeterde ondersteuning voor de kloonsysteemaanroep in libc. Ondersteuning toegevoegd voor nieuwe systeemaanroepen.
  • De dynamische hercompilatie-engine heeft het werken met SSE/x87-registers verbeterd, ondersteuning toegevoegd voor nieuwe machinecodes, geoptimaliseerde conversies van float- en dubbele getallen, verbeterde verwerking van interne overgangen en de toevoeging van ondersteuning voor nieuwe architecturen vereenvoudigd.
  • Verbeterde ELF-bestandslader.

Bron: opennet.ru

Voeg een reactie