FEX emulatora septembra laidiens sāk glabāt tulkoto mašīnkodu uz diska. Funkciju ieslēdz ar vides mainīgo FEX_DISKCACHE=1 vai JSON konfigurācijas rindu "DiskCache": "1". Pēc tam otrā spēles palaišanas reize vairs netērē laiku tā paša x86 koda tulkošanai. Laidienu 7. septembrī tagoja projekta uzturētājs Ryan Houdek.
FEX ļauj palaist x86 un x86-64 Linux programmas uz ARM64 aparatūras bez virtualizācijas. Kopā ar Wine un Proton tas nozīmē Windows spēles uz ARM klēpjdatoriem, planšetēm un VR ierīcēm. Šajā laidienā ir 257 komiti no 11 līdzautoriem, kamēr mēneša laidienos parasti sanāk 100 līdz 150.
Kešatmiņa diskā izmet atkārtoto tulkošanu
FEX tulko x86 instrukcijas uz ARM64 instrukcijām izpildes laikā. Līdz šim viss tulkotais kods dzīvoja tikai operatīvajā atmiņā, tāpēc katra jauna procesa palaišana sākās no nulles. Tas rada raustīšanos pirmajās spēles minūtēs, kamēr JIT kompilators panāk kadru plūsmu. Uz lēnākiem ARM čipiem tas velkas desmitiem sekunžu. Kadru skaits nokrīt katrā jaunā līmenī vai izgriezumā, kur parādās vēl neredzēts kods.
Jaunā kešatmiņa raksta tulkoto kodu FOZ formāta datubāzē. To pašu formātu Valve izmanto Fossilize bibliotēkā, ar kuru Steam glabā Vulkan ēnotāju kešatmiņu. Formāts izturīgs pret programmas avāriju, tāpēc pēkšņi nomiris process nesabojā jau uzkrāto.
Linux pusē datubāze nonāk $HOME/.cache/fex-emu/, bet zem Wine to atrod %APPDATA% mapē. Kešatmiņai laidienā atvēlēti aptuveni 18 komiti. Tā strādā gan FEX Linux interpretatoram, gan Wine slānim.
Funkcija ir eksperimentāla. Tai nav ne izmēra ierobežojuma, ne novecojušu ierakstu izmešanas loģikas.
Programmas, kas izmanto pašmodificējošu kodu, var uzpūst kešatmiņu bezgalīgi, jo tajā vēl nav iebūvēti izmēra ierobežojumi vai novecojušu ierakstu izmešana.
Praksē tas nozīmē, ka mapi ~/.cache/fex-emu/ ir vērts ik pa laikam pārbaudīt pašam. Izstrādātāji brīdina arī par iespējamām problēmām ar kešatmiņas atzīšanu par nederīgu, ja binārais fails mainās. Ja spēle pēc atjauninājuma sāk uzvesties dīvaini, kešatmiņas mapes izdzēšana ir pirmā lieta, ko pārbaudīt.
PMULHRSW kļūst divreiz ātrāks
Viena instrukciju saime šajā laidienā paātrinājās aptuveni divkārt. Runa ir par PMULHRSW, SSSE3 instrukciju, kas reizina 16 bitu veselos skaitļus un noapaļo rezultātu. To lieto audio miksēšanā, attēlu mērogošanā un video dekodēšanā, tāpēc tā parādās gan spēļu kodā, gan sintētiskajos testos. Optimizācija pacēla dažus Geekbench rezultātus, raksta Phoronix.
Otrs uzlabojums attiecas uz pašmodificējošā koda noteikšanu. FEX pilnais noteikšanas režīms tagad strādā ātrāk. Dažos gadījumos to izmanto Unity dzinēja spēles, kuras ģenerē kodu izpildes laikā un piespiež emulatoru pārbaudīt katru atmiņas ierakstu koda lapās. Papildus tam JIT vairs tik bieži nebloķē pats sevi, kad vairāki pavedieni tulko kodu vienlaikus. Daudzkodolu ARM čipos tas ietekmē tieši spēles startu, kad visi pavedieni reizē prasa jaunu kodu.
Laidiena piezīmēs minēti arī labojumi instrukciju uzvedībai un procesora karogiem, kā arī viena strupceļa novēršana. Iepriekšējie assert izsaukumi pārtaisīti par normālu kļūdu apstrādi. Neparedzēta situācija emulatorā tagad biežāk beidzas ar kļūdas paziņojumu. Agrāk tā apturēja visu procesu.
Wine pusē izmests rezerves ceļš
FEX vairs neietver rezerves kodu gadījumam, kad trūkst unixlib palīgbibliotēkas. Attiecīgajām funkcijām šī bibliotēka tagad ir obligāta. Līdz ar to salabota kļūda, kuras dēļ FEX izpildīja nejaušus Windows sistēmas izsaukumus, ja tas aizstāja XTAJIT vai Prism tulkotāju. Uz Windows on ARM mašīnām tieši tāda aizstāšana ir izplatīts scenārijs, jo Microsoft savs tulkotājs daudzās spēlēs ir lēnāks.
Laidiens pievieno Wine slānim vairākas trūkstošas detaļas:
NtRaiseExceptionapstrādi- INT 3 pārtraukuma atbalstu
- Windows CRT
printfunputsaizstājējus - labojumu sistēmas izsaukumu regresijai no iepriekšējiem būvējumiem
Aparatūra, uz kuras tas jāpalaiž
Valve Steam Frame VR austiņas darbina Qualcomm Snapdragon 8 Gen 3, tātad ARM64 čips. Steam bibliotēkas x86 spēles uz tāda dzelža nokļūst caur tulkošanas slāni. FEX ir viens no diviem nopietniem kandidātiem līdzās Box64. Box64 pieiet uzdevumam citādi. Tas x86 bibliotēku izsaukumus, kur vien iespējams, aizstāj ar vietējām ARM64 bibliotēkām, kamēr FEX tulko visu instrukciju plūsmu. Kurš izrādās ātrāks, atkarīgs no konkrētās spēles. Jūlija laidienā FEX-2607 komanda pievienoja Snapdragon X2 Elite atbalstu un agresīvākas x87 optimizācijas.
Prasības nav mainījušās. Vajadzīga ARMv8.0 vai jaunāka aparatūra un atsevišķs x86-64 RootFS ar viesa bibliotēkām. FEX joprojām nav virtuālā mašīna. Tas tulko instrukcijas lietotāja režīmā un izmanto uzņēmējsistēmas kodola sistēmas izsaukumus, tāpēc x86 programma redz to pašu failu sistēmu un tos pašus procesus, ko pārējā ARM64 sistēma.
Kopā ar laidienu projekts nomainīja logotipu. Zobrats tagad ir varavīksnes krāsās.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.