Rust valodā no nulles rakstītais X11 serveris yserver 9. septembrī saņēma 1.5 laidienu, kas noņem kadru griestus spēlēm ar izslēgtu vsync. Counter-Strike 2 uz yserver rādīja 180 līdz 200 kadrus sekundē, kamēr tā pati mašīna zem Xorg deva aptuveni 400. Pēc labojuma kopēšanas izsaukumu skaits vienā mērījumu sesijā nokrita no 299 307 uz 31 945.
Projektu joske/yserver GitHub izveidoja 27. aprīlī, tas iznāk ar MIT licenci un šobrīd tam ir 559 zvaigznes. Serveris palaiž Cinnamon, MATE, Xfce, Compiz, Openbox, IceWM un Enlightenment. Starp 1.4.0 laidienu 29. jūlijā un tagadējo iekrita 70 komiti 163 failos: 73 425 pievienotas rindas pret 33 852 dzēstām.
kur pazuda kadri
Vainīgs bija paša projekta 27. jūlija vblank ritma vārsts. Tas aizturēja bufera atbrīvošanu, gan IdleNotify, gan release syncobj, līdz nākamajam MSC. Tāpēc swapchain ar trim vai četriem attēliem varēja pārstrādāt tikai trīs vai četrus buferus vienā 60 Hz vblank ciklā, kaut spēles reālais kadra laiks bija 2,7 milisekundes. Klients ar izslēgtu vsync tika iesprostots pie swapchain attēlu skaita, kas reizināts ar atsvaidzes frekvenci. Pie 60 Hz un četriem attēliem tas dod tieši tos 240 kadrus, kuru tuvumā mērījumi arī apstājās.
Problēma parādījās tikai uz NVIDIA. Mesa WSI ar izslēgtu vsync bez izņēmumiem uzstāda PresentOptionAsync un vārstu apiet, bet NVIDIA draiveris sūta sinhronizētus present pieprasījumus un paļaujas uz Xorg izmešanas mehānismu, kura yserver kodā vienkārši nebija.
Kadru griestus radīja 27. jūlija vblank ritma vārsts: tas aiztur bufera atbrīvošanu līdz nākamajam MSC, tāpēc swapchain ar trim vai četriem attēliem vienā 60 Hz vblank var pārstrādāt tikai trīs vai četrus buferus. Sākotnējais mērījums uzrādīja tieši trīs līdz četras kopijas vienā kompozīcijas intervālā, fāzē noslēgtas.
divi labojumi, abi norakstīti no Xorg
Izstrādātājs ar segvārdu ariel3259 pieprasījumā 117 pievienoja divas lietas. Pirmā ir atliktā izpilde: kopēšana vairs nenotiek pieprasījuma pienākšanas brīdī, bet tiek pabīdīta uz mērķa MSC. Nokavēts vai jau pienācis mērķis izpildās uzreiz, nākotnes mērķis gaida rindā.
Otrā ir viena mērķa izspiešana. Ja logam jau ir nesegts, neizpildīts present uz to pašu mērķi, vecākais tiek izmests: buferis atbrīvojas nekavējoties pēc XID, nostrādā IdleNotify un CompleteNotify{Skip} tiek nolikts sakārtotai piegādei. Abus paņēmienus Xorg izmanto jau sen, faili present_scmd.c un present_vblank.c ir norādīti pieprasījuma aprakstā. Blakus tam parādījās sešas jaunas Backend spējas un atsevišķs absolūtais vblank taimeris uz KMS ar savu user_data birku, jo notikumu dekodēšana to iepriekš apgrieza līdz 32 bitiem.
ko uzrādīja mērījumi
Visi testi notika uz vienas NVIDIA mašīnas ar atvērtajiem kodola moduļiem izšķirtspējā 1920×1080 pie 60 Hz.
- Counter-Strike 2: kopiju skaits uz vienu kompozīciju no biežākās vērtības četri nokrita uz vienu. Kopējais
copy_areamainījās no 299 307 uz 31 945, kamēr present pieprasījumu skaits kritās tikai no 378 872 uz 150 111. - Hollow Knight ar izslēgtu vsync un aptuveni 1000 present sekundē: 87,8 % izspiesti, izpildītās kopijas 120 līdz 121 sekundē jeb precīzi divkāršs flip ātrums.
- mpv ar 60 kadru klipu: 58 līdz 60 kadri gan logā, gan pilnekrānā, ar ieslēgtu un izslēgtu kompozīciju.
- ksplashqml uz Plasma 6.6.6: 28 no 35 intervāliem iekrita 16 līdz 19 milisekunžu grozā.
- DPMS izslēgtā ekrāna tests: 264 izpildes ar birku blackout, 1481 present pret 1481 pabeigšanu 13 sekundēs ar iesaldētu pulksteni.
Autors atsevišķi izceļ MATE logu pārvaldnieka marco rādījumu, kas visu sesiju noturējās tieši pie 60 kopijām sekundē. Tas ir pierādījums, ka atliktā izpilde nepaātrina tos klientus, kuri jau iet vsync ritmā. Sakārtotība noturējās arī apjomā: 480 997 piegādēs nav neviena atpakaļejoša sērijas numura.
reverse PRIME sešas nedēļas atvērtā pieprasījumā
Otrs lielais gabals 1.5 laidienā ir reverse PRIME atbalsts, ko iesūtīja AprilGrimoire. Tas ļauj zīmēt uz primārā GPU un attēlu izvadīt caur otru videokarti, kas ir parastā situācija klēpjdatoros ar hibrīdo grafiku. Pieprasījums 95 tika atvērts 13. jūlijā un iekrita zarā 24. augustā pēc 29 komentāriem. Tajā ir 40 komiti, 60 mainīti faili un 45 044 pievienotas rindas. Kods iegāja zarā pēc tam, kad autors to pārbaudīja uz reālas divu videokaršu mašīnas.
pārējais laidienā
Mesa OML MSC frekvences pieprasījumi tagad strādā Flatpak lietotnēm, xinput ievēro darbvirsmas paātrinājuma profilu un ir aizvērta klientam sasniedzama servera avārija. DRI3 1.4 syncobj objekti nāk caur DRM, parādījās servera puses logu apmales un tiešā kompozitora scanout, bet nekompozitētām darbvirsmām pievienots bojājuma apgabalam pieskaņots pārzīmējums pēc wlroots parauga. Salaboja FreeBSD VT pārslēgšanu. Ctrl+C vairs nenogalina serveri. Pakotnes tagad būvē arī aarch64 platformai.
Repozitorijā pavisam ir seši devēji, no kuriem joske ir uzrakstījis 1624 komitus. Ariel3259 pirmo reizi iesūtīja kodu tieši šajā ciklā un parakstījās zem sešiem no laidiena pieprasījumiem. Viena lieta 1.5 laidienā palika nepārbaudīta uz dzelžiem: explicit sync ceļš ar PixmapSynced. Funkcija supports_dri3_syncobj() izslēdz NVIDIA_PROPRIETARY, tāpēc uz testa mašīnas DRI3 apstājas pie 1.3 un serveris šo pieprasījumu vispār nereklamē.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.