Frissült az NTSYNC Linux meghajtó API-tervezési fejlesztésekkel

kami911 képe

Hosszabb szünet után ismét előtérbe került az NTSYNC Linux kernelmeghajtó fejlesztése, amely a Windows NT szinkronizációs primitívekkel való kompatibilitást hivatott javítani. Ez különösen a Wine és Proton (Steam Play) által futtatott Windows-játékok teljesítményét érinti pozitívan Linux alatt.

A Linux 6.10-ben debütáló NTSYNC driver a Windows NT szinkronizációs primitívek emulálására lett kifejlesztve, hogy a Wine és a Steam Play (Proton) alapú Windows-játékok futtatása Linux alatt sokkal hatékonyabb és gyorsabb legyen. A Wine egy szoftverréteg, amely lehetővé teszi, hogy Windows-alkalmazásokat futtassunk Linuxon, míg a Proton kifejezetten a Windows-játékok kompatibilitásának javítására lett optimalizálva Linuxon. Az új NTSYNC driver lehetőséget kínál arra, hogy a Windows-szoftverek szinkronizációs műveleteit natívan kezelje, így növelve a hatékonyságot és a teljesítményt. Ez különösen fontos a játékok számára, ahol a szinkronizáció kulcsszerepet játszik a sima futásban és a stabil teljesítményben.

A legújabb fejlesztések

Az NTSYNC meghajtó hat hónapnyi csend után ismét napirendre került a Linux kernel levelezőlistán. A legutóbbi, v7 verziójú patch két kulcsfontosságú API-tervezési fejlesztést tartalmaz:

  1. Terminológiai pontosítás
    Az NTSYNC_IOC_SEM_POST elnevezést NTSYNC_IOC_SEM_RELEASE-re módosították, hogy jobban illeszkedjen a Windows NT terminológiájához, ahelyett hogy POSIX-alapú lenne. Ez segít a kompatibilitás és az érthetőség javításában.

  2. Objektumkezelés egyszerűsítése
    Az objektumok létrehozásához kapcsolódó ioctl (input/output control) hívások mostantól közvetlenül fájlleírókat (FD) adnak vissza a visszatérési értékben, nem pedig az argumentumstruktúrákon keresztül. Ez egyszerűsíti az NTSYNC API-t, és könnyebbé teszi a használatát.

A fejlesztés jelenlegi szakaszában az NTSYNC patch-eket a Linux 6.13 aktuális kódjára alapozták újra, és az említett API-fejlesztésekkel kiegészítették. Ez a lépés lehetőséget ad arra, hogy a meghajtó a Wine és a Proton által használt Windows-alkalmazások teljesítményét jelentősen növelje Linux rendszereken.

A „hibás” státusz és a késlekedés

Bár az NTSYNC driver első verziója bekerült a Linux 6.10 Git tárolójába, az összes szükséges funkciót biztosító javításokat nem sikerült időben beépíteni. Ezért a driver jelenleg „hibás” jelzéssel van ellátva, ami azt jelenti, hogy nem fog automatikusan lefordulni a szokásos kernelépítések során. Ez nagy csalódást jelenthet a játékosok és fejlesztők számára, mivel az NTSYNC jelentős teljesítménynövekedést hozhatna a Windows-játékok Linux alatti futtatásában. Azonban a fejlesztők remélik, hogy a hiányzó foltok a Linux 6.11 verzióban vagy a közeljövőben beépítésre kerülnek.

A Wine projekt a Windows API-t emulálja a felhasználói térben. Az API egy része, különösen az NT szinkronizációs primitívek, történelmileg RPC-n keresztül került kezelésre egy dedikált „kernel” folyamaton keresztül. Azonban az újabb alkalmazások egyre inkább használják ezeket az API-kat, és az RPC overhead korlátozó tényezővé vált.

Az NT szinkronizációs API-k túl bonyolultak ahhoz, hogy egyszerűen ráépítsék a meglévő primitívekre 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 olyan várakozási sor megvalósítása, ami elég robosztus a Wine számára a felhasználói térben, nem lehetséges. Ezért 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 bemutatásra került a 2023-as Linux Plumbers Conference konferencián. Azoknak, akik mélyebben érdeklődnek 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.

Hogyan érhető el?

A v7 patch-ek már megtekinthetők a Linux kernel levelezőlistán, és várhatóan hamarosan teljes mértékben integrálódnak. Az NTSYNC meghajtó végleges változata a Linux kernel jövőbeli verzióiban lesz elérhető, amikor a "BROKEN" státuszt feloldják.

Várakozások és jövőbeli fejlesztések

Az NTSYNC driver bevezetése nagy lépés a Windows-játékok Linux alatti teljesítményének javítása felé. Amint a hiányzó javításokat és funkciókat beépítik, a játékosok komoly teljesítményjavulásra számíthatnak. Ez újabb lendületet adhat a Linux-alapú játékrendszerek és a Proton népszerűségének, lehetővé téve a Windows-platformon elérhető játékok szélesebb körű támogatását. Az NTSYNC-hez kapcsolódó fejlesztések beépítése kulcsfontosságú lesz a jövőbeni Linux-kiadások számára, és a Linux-közösség reménykedik, hogy a következő verziókban már teljes mértékben működőképes lesz. Az NTSYNC célja, hogy a Windows NT szinkronizációs mechanizmusait hatékonyabban emulálja Linux alatt, ami kulcsfontosságú a Windows-játékok sima futtatásához Wine vagy Proton környezetben. Az ilyen szinkronizációs primitívek pontos implementációja drámai teljesítményjavulást hozhat, különösen játékok esetében.

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.

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%