Versione të reja të emulatorëve Box86 dhe Box64, duke ju lejuar të ekzekutoni lojëra x86 në sistemet ARM

Janë publikuar publikimet e emulatorëve Box86 0.2.6 dhe Box64 0.1.8, të krijuar për të ekzekutuar programe Linux të përpiluara për arkitekturat x86 dhe x86_64 në pajisje me procesorë ARM, ARM64, PPC64LE dhe RISC-V. Projektet zhvillohen në mënyrë sinkronike nga një ekip zhvilluesish - Box86 është i kufizuar në aftësinë për të ekzekutuar aplikacione 32-bit x86 dhe Box64 ofron mundësinë për të ekzekutuar ekzekutues 64-bit. Projekti i kushton vëmendje të madhe organizimit të lançimit të aplikacioneve të lojërave, duke përfshirë sigurimin e aftësisë për të nisur versionet e Windows përmes verës dhe Protonit. Kodi burimor për projektin është shkruar në C dhe shpërndahet (Box86, Box64) nën licencën MIT.

Një tipar i projektit është përdorimi i një modeli ekzekutimi hibrid, në të cilin emulimi zbatohet vetëm në kodin e makinës së vetë aplikacionit dhe bibliotekave specifike. Bibliotekat tipike të sistemit, duke përfshirë libc, libm, GTK, SDL, Vulkan dhe OpenGL, zëvendësohen me opsione vendase në platformat e synuara. Në këtë mënyrë, thirrjet e bibliotekës ekzekutohen pa emulim, duke rezultuar në përfitime të konsiderueshme të performancës.

Emulimi i kodit për të cilin nuk ka zëvendësime vendase në platformën e synuar kryhet duke përdorur një teknikë të ripërpilimit dinamik (DynaRec) nga një grup udhëzimesh makinerie në tjetrën. Krahasuar me interpretimin e udhëzimeve të makinës, rikompilimi dinamik demonstron performancë 5-10 herë më të lartë.

Në testet e performancës, emulatorët Box86 dhe Box64, kur u ekzekutuan në platformat Armhf dhe Aarch64, ia kaluan dukshëm projektet QEMU dhe FEX-emu, dhe në testet individuale (glmark2, openarena) ata arritën performancë identike me drejtimin e një asambleje vendase për objektivin. platformë. Në testet me intensitet të llogaritjes 7-zip dhe dav1d, performanca e Box64 varionte nga 27% në 53% të performancës së aplikacionit vendas (për krahasim, QEMU tregoi rezultate prej 5-16%, dhe FEX-emu - 13-26% ). Për më tepër, u bë një krahasim me emulatorin Rosetta 2, i përdorur nga Apple për të ekzekutuar kodin x86 në sistemet me çipin M1 ARM. Rosetta 2 siguroi testin e bazuar në 7zip me performancë prej 71% të ndërtimit vendas, dhe Box64 - 57%.

Versione të reja të emulatorëve Box86 dhe Box64, duke ju lejuar të ekzekutoni lojëra x86 në sistemet ARM

Sa i përket pajtueshmërisë me aplikacionet, nga 165 lojëra të testuara, rreth 70% funksionuan me sukses. Rreth 10% të tjera punojnë, por me rezerva dhe kufizime të caktuara. Lojërat e mbështetura përfshijnë WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious dhe shumicën e lojërave GameMaker. Ndër lojërat me të cilat janë vërejtur probleme, përmenden lojërat e bazuara në motorin Unity3D, i cili është i lidhur me paketën Mono, emulimi i të cilit nuk funksionon gjithmonë për shkak të përpilimit JIT të përdorur në Mono, dhe gjithashtu ka mjaft kërkesa të larta grafike që nuk janë gjithmonë të arritshme në bordet ARM. Zëvendësimi i bibliotekave të aplikacioneve GTK aktualisht është i kufizuar në GTK2 (zëvendësimi i GTK3/4 nuk është zbatuar plotësisht).

Ndryshimet kryesore në publikimet e reja:

  • Lidhja e shtuar për bibliotekën Vulkan. Mbështetje e shtuar për API grafike Vulkan dhe DXVK (zbatimi i DXGI, Direct3D 9, 10 dhe 11 në krye të Vulkan).
  • Lidhje të përmirësuara për bibliotekat GTK. Lidhje të shtuara për gstreamer dhe bibliotekat që përdoren zakonisht në aplikacionet GTK.
  • Mbështetja fillestare e shtuar (për momentin vetëm mënyra e interpretimit) për arkitekturat RISC-V dhe PPC64LE.
  • Janë bërë rregullime për të përmirësuar mbështetjen për SteamPlay dhe shtresën Proton. Ofron mundësinë për të ekzekutuar shumë lojëra Linux dhe Windows nga Steam në bordet AArch64 si Raspberry Pi 3 dhe 4.
  • Menaxhimi i përmirësuar i kujtesës, performanca mmap dhe gjurmimi i shkeljeve të mbrojtjes së kujtesës.
  • Mbështetje e përmirësuar për thirrjen e sistemit të klonimit në libc. Mbështetje e shtuar për thirrjet e reja të sistemit.
  • Motori dinamik i rikompilimit ka përmirësuar punën me regjistrat SSE/x87, ka shtuar mbështetje për kodet e reja të makinerive, konvertime të optimizuara të numrave float dhe të dyfishtë, ka përmirësuar përpunimin e tranzicioneve të brendshme dhe ka thjeshtuar shtimin e mbështetjes për arkitekturat e reja.
  • Ngarkues i përmirësuar i skedarëve ELF.

Burimi: opennet.ru

Shto një koment