Novaj versioj de Box86 kaj Box64-emuliloj, kiuj permesas vin ruli x86-ludojn sur ARM-sistemoj

Eldonoj de Box86 0.2.6 kaj Box64 0.1.8 emuliloj estis publikigitaj por rulado de Linuksaj programoj konstruitaj por x86 kaj x86_64 arkitekturoj sur ARM, ARM64, PPC64LE kaj RISC-V procesoroj. Projektoj disvolvas sinkrone kun unu disvolva teamo - Box86 estas limigita al la kapablo ruli 32-bitajn x86-aplikaĵojn, dum Box64 disponigas la kapablon ruli 64-bitajn ekzekuteblajn. La projekto donas grandan atenton al organizado de la lanĉo de videoludaj aplikoj, inkluzive de la kapablo lanĉi Vindozajn konstruojn per vino kaj Proton. La fontotekstoj de la projekto estas skribitaj en la C-lingvo kaj distribuitaj (Box86, Box64) sub la MIT-licenco.

Karakterizaĵo de la projekto estas la uzo de hibrida ekzekutmodelo, en kiu emulado estas aplikata nur al la maŝinkodo de la aplikaĵo mem kaj specifaj bibliotekoj. Senmarkaj sistembibliotekoj, inkluzive de libc, libm, GTK, SDL, Vulkan, kaj OpenGL, estas anstataŭigitaj kun variaĵoj indiĝenaj al la celplatformoj. Tiel, bibliotekaj vokoj estas efektivigitaj sen kopiado, kio permesas signifan rendimenton pliiĝon.

Emulado de kodo kiu ne havas indiĝenajn anstataŭaĵojn por la celplatformo estas farita uzante la dinamikan rekompiladon (DynaRec) teknikon de unu aro de maŝininstrukciaĵo ĝis alia. Kompare kun la interpreto de maŝinaj instrukcioj, dinamika rekompilo montras 5-10 fojojn pli altan rendimenton.

En agadotestoj, dum funkciado sur la Armhf kaj Aarch86-platformoj, la Box64 kaj Box64-emuliloj signife superis la QEMU kaj FEX-emu-projektojn, kaj en kelkaj testoj (glmark2, openarena) ili atingis rendimenton identan al prizorgado de asembleo indiĝena al la celplatformo. . En la komputi-intensaj 7-zip kaj dav1d komparnormoj, la agado de Box64 estis inter 27% kaj 53% de tiu de la indiĝena aplikaĵo (kompare kun QEMU ĉe 5-16% kaj FEX-emu ĉe 13-26%). Aldone, komparo estis farita kun la emulilo Rosetta 2 uzata de Apple por ruli x86-kodon sur sistemoj kun blato ARM M1. Rosetta 2 prizorgis la 7zip-bazitan teston ĉe 71% de la indiĝena konstruo, kaj Box64 ĉe 57%.

Novaj versioj de Box86 kaj Box64-emuliloj, kiuj permesas vin ruli x86-ludojn sur ARM-sistemoj

Koncerne aplikaĵkongruon, el 165 ludoj testitaj, ĉirkaŭ 70% sukcese gajnis. Ĉirkaŭ 10% pli da laboro, sed kun certaj rezervoj kaj limigoj. Subtenataj ludoj inkluzivas WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious kaj plej multajn GameMaker-ludojn. El la ludoj, kun kiuj rimarkas problemojn, estas menciitaj ludoj bazitaj sur la motoro Unity3D, kiu estas ligita al la pakaĵo Mono, kies emulado ankoraŭ ne ĉiam funkcias pro la kompilo JIT uzata en Mono, kaj ankaŭ havas sufiĉe altajn grafikojn. postuloj kiuj ne ĉiam estas atingeblaj sur ARM-tabuloj. Anstataŭigo de GTK-aplikbibliotekoj estas nuntempe limigita al GTK2 (anstataŭigo de GTK3/4 ne estas plene efektivigita).

Ĉefaj ŝanĝoj en novaj eldonoj:

  • Aldonita ligado por la Vulkan-biblioteko. Aldonita subteno por Vulkan kaj DXVK-grafika API (efektivigo de DXGI, Direct3D 9, 10 kaj 11 aldone al Vulkan).
  • Plibonigitaj ligadoj por GTK-bibliotekoj. Aldonitaj ligoj por gstreamer kaj bibliotekoj ofte uzataj en GTK-aplikoj.
  • Aldonita komenca subteno (ĝis nun nur interpreta reĝimo) por arkitekturoj RISC-V kaj PPC64LE.
  • Cimoj estis faritaj por plibonigi SteamPlay-subtenon kaj la Proton-tavolon. Eblas ruli multajn Linukso- kaj Vindozo-ludojn de Steam sur AArch64-tabuloj kiel ekzemple Raspberry Pi 3 kaj 4.
  • Plibonigita memoradministrado, mmap-konduto kaj monitorado de malobservoj pri memorprotekto.
  • Plibonigita subteno por klona sistemvoko en libc. Aldonita subteno por novaj sistemvokoj.
  • En la dinamika rekompila motoro, laboro kun SSE/x87-registroj estis plibonigita, subteno por novaj maŝinkodoj estis aldonita, konvertiĝoj de flosilo kaj duoblaj nombroj estis optimumigitaj, prilaborado de internaj saltoj estis plibonigita, kaj subteno por novaj arkitekturoj estis plibonigita. simpligita.
  • Plibonigita ELF-dosieralŝutilo.

fonto: opennet.ru

Aldoni komenton