Noile versiuni ale emulatoarelor Box86 și Box64, permițându-vă să rulați jocuri x86 pe sisteme ARM

Au fost publicate versiuni ale emulatorilor Box86 0.2.6 și Box64 0.1.8, concepute pentru a rula programe Linux compilate pentru arhitecturi x86 și x86_64 pe echipamente cu procesoare ARM, ARM64, PPC64LE și RISC-V. Proiectele sunt dezvoltate sincron de o echipă de dezvoltatori - Box86 este limitat la capacitatea de a rula aplicații x32 pe 86 de biți, iar Box64 oferă posibilitatea de a rula executabile pe 64 de biți. Proiectul acordă o mare atenție organizării lansării aplicațiilor de jocuri, inclusiv oferind posibilitatea de a lansa versiuni Windows prin vin și Proton. Codul sursă al proiectului este scris în C și distribuit (Box86, Box64) sub licența MIT.

O caracteristică a proiectului este utilizarea unui model de execuție hibrid, în care emularea este aplicată numai codului mașină al aplicației în sine și bibliotecilor specifice. Bibliotecile de sistem tipice, inclusiv libc, libm, GTK, SDL, Vulkan și OpenGL, sunt înlocuite cu opțiuni native pentru platformele țintă. În acest fel, apelurile de bibliotecă sunt executate fără emulare, rezultând câștiguri semnificative de performanță.

Emularea codului pentru care nu există înlocuitori native platformei țintă se realizează folosind o tehnică de recompilare dinamică (DynaRec) de la un set de instrucțiuni de mașină la altul. În comparație cu interpretarea instrucțiunilor mașinii, recompilarea dinamică demonstrează performanțe de 5-10 ori mai mari.

În testele de performanță, emulatorii Box86 și Box64, atunci când au fost executați pe platformele Armhf și Aarch64, au depășit semnificativ proiectele QEMU și FEX-emu, iar în testele individuale (glmark2, openarena) au obținut performanțe identice cu rularea unui ansamblu nativ țintă. platformă. În testele 7-zip și dav1d cu consum intens de calcul, performanța Box64 a variat între 27% și 53% din performanța aplicației native (pentru comparație, QEMU a atins 5-16% și FEX-emu 13-26%). În plus, a fost făcută o comparație cu emulatorul Rosetta 2, folosit de Apple pentru a rula cod x86 pe sisteme cu cip M1 ARM. Rosetta 2 a oferit testului bazat pe 7zip o performanță de 71% din versiunea nativă și Box64 - 57%.

Noile versiuni ale emulatoarelor Box86 și Box64, permițându-vă să rulați jocuri x86 pe sisteme ARM

În ceea ce privește compatibilitatea cu aplicațiile, din 165 de jocuri testate, aproximativ 70% au funcționat cu succes. Cam încă 10% lucrează, dar cu anumite rezerve și restricții. Jocurile acceptate includ WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious și majoritatea jocurilor GameMaker. Printre jocurile cu care s-au remarcat probleme se menționează jocurile bazate pe motorul Unity3D, care este legat de pachetul Mono, a cărui emulare nu funcționează întotdeauna din cauza compilației JIT folosită în Mono și, de asemenea, are destul de cerințe grafice ridicate care nu sunt întotdeauna realizabile pe plăcile ARM. Înlocuirea bibliotecilor de aplicații GTK este în prezent limitată la GTK2 (înlocuirea GTK3/4 nu este implementată complet).

Principalele modificări în noile versiuni:

  • S-a adăugat legare pentru biblioteca Vulkan. S-a adăugat suport pentru API-ul grafic Vulkan și DXVK (implementarea DXGI, Direct3D 9, 10 și 11 pe Vulkan).
  • Legături îmbunătățite pentru bibliotecile GTK. S-au adăugat legături pentru gstreamer și biblioteci utilizate în mod obișnuit în aplicațiile GTK.
  • S-a adăugat suport inițial (deocamdată doar modul de interpretare) pentru arhitecturile RISC-V și PPC64LE.
  • Au fost făcute remedieri pentru a îmbunătăți suportul pentru SteamPlay și stratul Proton. Oferă posibilitatea de a rula multe jocuri Linux și Windows de la Steam pe plăci AArch64, cum ar fi Raspberry Pi 3 și 4.
  • Gestionare îmbunătățită a memoriei, performanță mmap și urmărire a încălcării protecției memoriei.
  • Suport îmbunătățit pentru apelul de sistem clon în libc. S-a adăugat suport pentru noile apeluri de sistem.
  • Motorul de recompilare dinamică a îmbunătățit lucrul cu registrele SSE/x87, a adăugat suport pentru noile coduri de mașină, a optimizat conversiile numerelor float și duble, a îmbunătățit procesarea tranzițiilor interne și a simplificat adăugarea de suport pentru noile arhitecturi.
  • Încărcător de fișiere ELF îmbunătățit.

Sursa: opennet.ru

Adauga un comentariu