Новыя версіі эмулятараў Box86 і Box64, якія дазваляюць запускаць x86-гульні на сістэмах ARM

Апублікаваны выпускі эмулятараў Box86 0.2.6 і Box64 0.1.8, прызначаных для запуску Linux-праграм, сабраных для архітэктур x86 і x86_64, на абсталяванні з працэсарамі ARM, ARM64, PPC64LE і RISC-V. Праекты развіваюцца сінхронна адной камандай распрацоўнікаў – Box86 абмяжоўваецца магчымасцю запуску 32-разрадных прыкладанняў x86, а Box64 забяспечвае запуск 64-разрадных выкананых файлаў. Праект надае вялікую ўвагу арганізацыі запуску гульнявых прыкладанняў, у тым ліку падаючы магчымасць запуску Windows-зборак праз wine і Proton. Зыходныя тэксты праекта напісаны на мове Сі і распаўсюджваюцца (Box86, Box64) пад ліцэнзіяй MIT.

Асаблівасцю праекту, з'яўляецца ўжыванне гібрыднай мадэлі выканання, пры якой эмуляцыя ўжываецца толькі да машыннага кода самога прыкладанні і спецыфічных бібліятэк. Тыпавыя сістэмныя бібліятэкі, у тым ліку libc, libm, GTK, SDL, Vulkan і OpenGL, падмяняюцца на варыянты, родныя для мэтавых платформаў. Такім чынам, бібліятэчныя выклікі выконваюцца без эмуляцыі, што дазваляе дабіцца значнага павелічэння прадукцыйнасці.

Эмуляцыя кода, для якога адсутнічаюць родныя для мэтавай платформы замены, выконваецца з выкарыстаннем тэхнікі дынамічнай перакампіляцыі (DynaRec) з аднаго набору машынных інструкцый у іншы. У параўнанні з інтэрпрэтацыяй машынных інструкцый дынамічная перакампіляванне дэманструе ў 5-10 разоў больш высокую прадукцыйнасць.

У тэстах прадукцыйнасці эмулятары Box86 і Box64 пры выкананні на платформах Armhf і Aarch64 істотна апярэдзілі праекты QEMU і FEX-emu, а ў асобных тэстах (glmark2, openarena) дазволілі дамагчыся прадукцыйнасці ідэнтычнай запуску зборкі, роднай для мэтавай платформы. У тэстах 7-zip і dav1d, якія выконваюць інтэнсіўныя вылічэнні, прадукцыйнасць Box64 склала ад 27% да 53% ад прадукцыйнасці роднага прыкладання (для параўнання QEMU паказаў вынік у 5-16%, а FEX-emu – 13-26%). Дадаткова было зроблена параўнанне з эмулятарам Rosetta 2, які ўжываецца кампаніяй Apple для запуску x86-кода на сістэмах з ARM-чыпам M1. Rosetta 2 забяспечыў выкананне тэста на базе 7zip з прадукцыйнасцю 71% ад роднай зборкі, а Box64 – 57%.

Новыя версіі эмулятараў Box86 і Box64, якія дазваляюць запускаць x86-гульні на сістэмах ARM

Што тычыцца сумяшчальнасці з праграмамі, то са 165 пратэставаных гульняў паспяхова зарабілі каля 70%. Яшчэ прыкладна 10% працуюць, але з пэўнымі агаворкамі і абмежаваннямі. Сярод падтрымліваемых гульняў WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, Risk of Rain, Cook Serve Delicious і большасць гульняў кампаніі GameMaker. З гульняў, з якімі адзначаюцца праблемы, згадваюцца гульні на базе рухавічка Unity3D, які завязаны на пакет Mono, эмуляцыя якога пакуль не заўсёды працуе з-за прымяняецца ў Mono JIT-кампіляцыі, а таксама мае дастаткова высокія патрабаванні да графікі, не заўсёды дасягальныя на ARM-плата. Падмена бібліятэк GTK-прыкладанняў пакуль абмяжоўваецца GTK2 (падмена GTK3/4 рэалізаваная не цалкам).

Асноўныя змены ў новых выпусках:

  • Дададзена абвязка для бібліятэкі Vulkan. Дададзена падтрымка графічнага API Vulkan і DXVK (рэалізацыя DXGI, Direct3D 9, 10 і 11 па-над Vulkan).
  • Палепшаны абвязкі для бібліятэк GTK. Дададзеныя абвязкі для gstreamer і бібліятэк, звычайна выкарыстоўваных у GTK-прыкладаннях.
  • Дададзена пачатковая падтрымка (пакуль толькі рэжым інтэрпрэтацыі) архітэктур RISC-V і PPC64LE.
  • Унесены выпраўленні, накіраваныя на паляпшэнне падтрымкі SteamPlay і праслойкі Proton. Забяспечана магчымасць запуску шматлікіх Linux і Windows гульняў са Steam на поплатках AArch64, такіх як Raspberry Pi 3 і 4.
  • Палепшана кіраванне памяццю, праца mmap і адсочванне парушэнняў абароны памяці.
  • Палепшана падтрымка сістэмнага выкліку clone у libc. Дададзена падтрымка новых сістэмных выклікаў.
  • У рухавічку дынамічнай перакампіляцыі палепшана праца з рэгістрамі SSE/x87, дададзена падтрымка новых машынных кодаў, аптымізаваны пераўтварэнні лікаў float і double, палепшана апрацоўка ўнутраных пераходаў, спрошчана даданне падтрымкі новых архітэктур.
  • Палепшаны загрузнік файлаў у фармаце ELF.

Крыніца: opennet.ru

Дадаць каментар