Нові версії емуляторів 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, A 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

Додати коментар або відгук