Játékoknál is őrületes Wine sebességnövekedést hozhat egy új kernel funkció

kami911 képe

Ugyan még csak véleményezés alatt az egész terv, de máris jól látható hatalmas sebességnövekedést hozhat a Wine alatt futtatott játékoknál egy új megoldás, amelyet a Linux kernelben szeretnének bevezetni a fejlesztők. Beszéljenek először a számok:

Játék Eredeti ntsync Javulás
Anger Foot 69 99 43%
Call of Juarez 99.8 224.1 125%
Dirt 3 110.6 860.7 678%
Forza Horizon 5 108 160 48%
Lara Croft: Temple of Osiris 141 326 131%
Metro 2033 164.4 199.2 21%
Resident Evil 2 26 77 196%
The Crew 26 51 96%
Tiny Tina's Wonderlands 130 360 177%
Total War Saga: Troy 109 146 34%

A Wine projekt a Windows API-t emulálja a felhasználói térben. Ezen API egy része, nevezetesen az NT szinkronizációs primitívek, történelmileg RPC-n keresztül lettek lekezelve egy dedikált „kernel” folyamaton keresztül. Azonban az újabb alkalmazások intenzívebben használják ezeket az API-kat, és az RPC overheadje korlátozó tényezővé vált.

Az NT szinkronizációs API-k túl bonyolultak ahhoz, hogy a meglévő primitívek tetejére helyezzék anélkül, hogy a jó működést feláldoznák. Bizonyos műveletek, mint például az NtPulseEvent() vagy az NtWaitForMultipleObjects() „mindenre várakozás” módozata, közvetlen ellenőrzést igényel a várakozási sorral kapcsolatban, és egy olyan várakozási sort megvalósítani, ami elég robosztus a Wine számára a felhasználói térben, nem lehetséges. Ezért a javasolt, hogy a vezérlő illesztőprogram közvetlenül a Linux kernelben kerüljön megvalósításra a problémás interfészek jobb teljesítményű megoldásával.

Ez a vezérlő illesztőprogram került bemutatásra a Linux Plumbers Conference 2023 konferencián. Azoknak, akik mélyebben érdeklődnek a a Wine-ban használatos szinkronizáció iránt és a történettel kapcsolatban, illetve a probléma korábbi megoldási kísérletei kapcsán, a prezentáció felvételét itt tekinthetik meg:

Linux Plumbers Conference 2023 prezentáció

Ezzel a Linux kernel számára egy új karaktereszköz-illesztőprogram került bevezetésre, a /dev/ntsync, amelyet a Windows NT szinkronizációs primitívek implementálására használnak.

A teljesítmény növekedése nagy mértékben változik az alkalmazástól és a felhasználó hardverétől függően. Néhány játék esetében az NT szinkronizáció nem okoz lassulást, és semmilyen változást nem lehet észlelni, de más játékok esetében a képfrissítési sebesség akár 50-150% javulását is megfigyelhették. A fenti táblázat különböző játékok képfrissítési sebességét mutatja be különböző hardvereken, Dmitry Skvortsov, FuzzyQuills, OnMars és a szerző által mért adatok alapján.

A CodeWeavers cégnél dolgozó Elizabeth Figura, aki közzétette a „megjegyzések kérését” (RFC) különböző Linux kernel levelezési listákra, elmagyarázta a szinkronizációs vezérlő illesztőprogram motivációit a Windows NT kernel működésének szempontjából. Ez a javítás 32 patchből áll, valamint 17 patchet tartalmaz az aktuális Wine implementációhoz. A patchek szándékosan a Windows függvények megfelelőinek megfelelő viselkedését kívánják leképezni. Mivel nem elvárás, hogy a fejlesztők ismerősek legyenek a Windows syscalls-sal, különösen a részletes működést isemrvén, a sorozatban szereplő dokumentációs patch-ekben részletesen leírja a fejlesztő az elvárt viselkedést, és használható a sorozat többi részének specifikációjaként.

Az egész sorozatot itt lehet elérni vagy megtekinteni:

A Wine által használt patcheket itt található:

Ez nem teljesen új koncepció, mivel évek óta a Wine fejlesztők egy új Linux kernel szinkron API-t keresnek, ami jobb, mint az esync/fsync, hogy kezelje a Windows NT szinkronizációs objektum API igényeit.

Nagyon érdekes lesz látni, hová vezet ez az NT szinkronizációs vezérlő illesztőprogram és hogy mikor fogják végül elfogadni a fő Linux kernelbe annak érdekében, hogy javítsák a Windows játékok/alkalmazások Linuxon való futtatásának teljesítményét. Kíváncsi vagyok ez a megoldás mikor érkezhet meg a stabil kernelbe, és teszi jobbá mindnyájunk windows-os programfuttatási élményét Linux alatt.

Hozzászólások

kami911 képe

Remélem ez a változtatás

Értékelés: 

0
Még nincs értékelve

Remélem ez a változtatás mihamarabb belekerül a Linux kernelbe és a Wine-ba. Érdekes lesz látni, hogy ettől mennyivel gyorsabbak lesznek a játékok Wine alatt. Lehet, hogy gyorsabbak mint Windows alatt?