Nuove versioni degli emulatori Box86 e Box64, che ti consentono di eseguire giochi x86 su sistemi ARM

Sono stati pubblicati i rilasci degli emulatori Box86 0.2.6 e Box64 0.1.8, progettati per eseguire programmi Linux compilati per architetture x86 e x86_64 su apparecchiature con processori ARM, ARM64, PPC64LE e RISC-V. I progetti vengono sviluppati in modo sincrono da un team di sviluppatori: Box86 è limitato alla capacità di eseguire applicazioni x32 a 86 bit e Box64 offre la possibilità di eseguire eseguibili a 64 bit. Il progetto presta grande attenzione all'organizzazione del lancio di applicazioni di gioco, inclusa la possibilità di avviare build di Windows tramite Wine e Proton. Il codice sorgente del progetto è scritto in C e distribuito (Box86, Box64) sotto la licenza MIT.

Una caratteristica del progetto è l'utilizzo di un modello di esecuzione ibrido, in cui l'emulazione viene applicata solo al codice macchina dell'applicazione stessa e a librerie specifiche. Le librerie di sistema tipiche, tra cui libc, libm, GTK, SDL, Vulkan e OpenGL, vengono sostituite con opzioni native delle piattaforme di destinazione. In questo modo, le chiamate alla libreria vengono eseguite senza emulazione, con conseguenti miglioramenti significativi delle prestazioni.

L'emulazione del codice per il quale non sono presenti sostituzioni native della piattaforma di destinazione viene eseguita utilizzando una tecnica di ricompilazione dinamica (DynaRec) da un insieme di istruzioni macchina a un altro. Rispetto all'interpretazione delle istruzioni della macchina, la ricompilazione dinamica dimostra prestazioni 5-10 volte superiori.

Nei test delle prestazioni, gli emulatori Box86 e Box64, quando eseguiti sulle piattaforme Armhf e Aarch64, hanno sovraperformato significativamente i progetti QEMU e FEX-emu e nei test individuali (glmark2, openarena) hanno raggiunto prestazioni identiche all'esecuzione di un assembly nativo del target piattaforma. Nei test ad alta intensità di calcolo 7-zip e dav1d, le prestazioni di Box64 variavano dal 27% al 53% delle prestazioni dell'applicazione nativa (per confronto, QEMU ha mostrato risultati del 5-16% e FEX-emu - 13-26% ). Inoltre, è stato effettuato un confronto con l'emulatore Rosetta 2, utilizzato da Apple per eseguire codice x86 su sistemi con chip M1 ARM. Rosetta 2 ha fornito al test basato su 7zip prestazioni del 71% rispetto alla build nativa e Box64 del 57%.

Nuove versioni degli emulatori Box86 e Box64, che ti consentono di eseguire giochi x86 su sistemi ARM

Per quanto riguarda la compatibilità con le applicazioni, su 165 giochi testati, circa il 70% ha funzionato con successo. Circa un altro 10% lavora, ma con alcune riserve e restrizioni. I giochi supportati includono WorldOfGoo, Airline Tycoon Deluxe, FTL, Undertale, A Risk of Rain, Cook Serve Delicious e la maggior parte dei giochi GameMaker. Tra i giochi con cui sono stati riscontrati problemi si menzionano i giochi basati sul motore Unity3D, che è legato al pacchetto Mono, la cui emulazione non sempre funziona a causa della compilazione JIT utilizzata in Mono, e inoltre ha abbastanza requisiti grafici elevati che non sono sempre realizzabili sulle schede ARM. La sostituzione delle librerie applicative GTK è attualmente limitata a GTK2 (la sostituzione di GTK3/4 non è completamente implementata).

Principali modifiche nelle nuove versioni:

  • Aggiunto collegamento per la libreria Vulkan. Aggiunto supporto per l'API grafica Vulkan e DXVK (implementazione di DXGI, Direct3D 9, 10 e 11 su Vulkan).
  • Collegamenti migliorati per le librerie GTK. Aggiunti collegamenti per gstreamer e librerie comunemente utilizzate nelle applicazioni GTK.
  • Aggiunto supporto iniziale (solo modalità di interpretazione per ora) per le architetture RISC-V e PPC64LE.
  • Sono state apportate correzioni per migliorare il supporto per SteamPlay e il livello Proton. Fornisce la possibilità di eseguire molti giochi Linux e Windows da Steam su schede AArch64 come Raspberry Pi 3 e 4.
  • Gestione della memoria, prestazioni mmap e rilevamento delle violazioni della protezione della memoria migliorati.
  • Supporto migliorato per la chiamata di sistema clone in libc. Aggiunto il supporto per le nuove chiamate di sistema.
  • Il motore di ricompilazione dinamica ha migliorato il lavoro con i registri SSE/x87, aggiunto il supporto per nuovi codici macchina, ottimizzato le conversioni di numeri float e double, migliorata l'elaborazione delle transizioni interne e semplificato l'aggiunta del supporto per nuove architetture.
  • Caricatore di file ELF migliorato.

Fonte: opennet.ru

Aggiungi un commento