Waarom games stotteren op Windows 11 (en hoe je de echte oorzaak vindt)

Gestotter is een frame dat te laat aankwam, geen lage framerate — de oorzaken die een spoor nalaten, hoe je weet welke de jouwe is, en wat je aan elk ervan doet.

Je teller zegt 160. De game schokt toch — een fractie van een seconde waarin het beeld stilstaat, je vizier ergens belandt waar je het niet hebt gezet, en daarna is alles weer in orde. De teller bewoog niet, en daarom helpt niets wat je doet om hem te verhogen.

Dat gat is het hele onderwerp van deze pagina. Gestotter is een frame dat te laat aankwam, geen lage framerate. Een frameteller middelt over een seconde, dus één frame dat 90 ms duurde verdwijnt tussen de 159 korte frames ernaast. Het getal dat beschrijft wat je voelde is de frametijd, en gestotter is een frame dat veel trager is dan zijn buren.

Eerst de eerlijke zin. Twee van de tien oorzaken hieronder komen overeen met één vakje in w0a: de plannerwaarde in oorzaak 8 en het opnameprogramma op de achtergrond in oorzaak 9. Beide vakjes zetten alleen een instelling waar ze hoort, en op een machine waaraan niemand heeft gesleuteld, vindt het eerste niets om te veranderen. Of de stotter die je voelt een van deze twee was, kan alleen een opname van ervoor en erna je vertellen.

Bepaal eerst welk van drie problemen je hebt

Ze krijgen hetzelfde woord opgeplakt en hebben bijna niets gemeen.

Leg iets vast voordat je iets verandert

Gokken is wat hier weken van maakt. Een opname van de game die je werkelijk speelt, op de plek waar hij werkelijk stottert, maakt van "wat zou het kunnen zijn" de vraag "wat gebeurde er bij die uitschieter" — en het is het "voor" waartegen elke latere verandering wordt beoordeeld. De benchmark lezen legt uit hoe.

De oorzaken, één voor één

1. Een stuurprogramma dat een processorkern vasthoudt

Zolang een stuurprogramma in een interrupt of in een uitgestelde aanroep zit, draait die kern boven elke threadprioriteit die er is: hij tekent niets en leest geen invoer tot het stuurprogramma loslaat. Het is een oorzaak die je makkelijk over het hoofd ziet: hij duikt in geen enkele frametime-grafiek en in geen enkele taakbeheerder op.

Hoe je het ziet: meet het. Het kernelgedeelte van De latencytest lezen somt elk stuurprogramma op dat een kern heeft vastgehouden, op langste vasthoudtijd, met de bestandsnaam. Voorbij ongeveer 1 ms verdringt een stuurprogramma invoerrapporten; vanaf 4 ms kan de machine geen stabiele frametijd vasthouden, wat je verder ook verandert.

Wat je doet: werk dat ene stuurprogramma bij, bij de hardwarefabrikant — niet het hele systeem, het genoemde bestand. Netwerk-, opslag- en audiostuurprogramma's horen bij de stuurprogramma's die dit kunnen doen.

2. Shaders die worden gecompileerd

Nieuw effect, nieuw gebied, nieuw wapen, en de game moet een shader compileren voordat hij hem kan tekenen. Het compileren gebeurt op de CPU terwijl het frame wacht.

Hoe je het ziet: het is het ergst in de eerste minuten van een sessie of een map, het zakt weg terwijl je speelt, en het komt terug na een update van een driver of van de game. Zakt je gestotter niet weg, dan is dit het niet — Stotteren door shadercompilatie is de lange versie.

Wat je doet: speel er doorheen, en benchmark niet binnen dat venster; je zou de compiler meten.

3. De schijf waarvan de game streamt

Een game die assets binnenhaalt terwijl je beweegt, stottert wanneer de leesactie traag is, en het frame dat op die gegevens wacht is het late frame.

Hoe je het ziet: de haperingen vallen samen met het betreden van een nieuw gebied, en lange frame-intervallen vallen in hetzelfde venster als schijfactiviteit. Controleer de voor de hand liggende dingen: staat de game op een mechanische schijf, is de schijf bijna vol, staat de gamemap in een map die met de cloud synchroniseert en elke schrijfactie uploadt, staat het wisselbestand op een draaiende schijf. Een SSD voor een game die streamt is geen tweak, het is het antwoord.

4. Geheugendruk

Loopt het RAM vol, dan verplaatst Windows pagina's naar de schijf, en de pagina's die terugkomen voel je als haperingen. Het minder voor de hand liggende geval is de commit-limiet: raakt het totale geheugen dat Windows kan uitdelen op, dan snoeit de geheugenbeheerder pagina's weg bij programma's die nog draaien, en de game voelt dat snoeien als bevriezingen van minder dan een seconde. Allebei worden ze beter op het moment dat je een browser met veertig tabbladen sluit.

5. Er draait iets anders

Het werkproces van Windows Update, een onderhoudstaak, een geplande malwarescan, een video-export die je was vergeten. Dat werk stopt niet wanneer een game start; het komt in de wachtrij voor dezelfde kern als de renderthread, dus het duikt op als uitschieters in de frametijd en niet als een lager gemiddelde. Het afwachten is een legitieme oplossing.

Hoe je het ziet: een benchmarkopname bewaart haar langste frame-intervallen met de schijfactiviteit en hard faults die in hetzelfde tijdvenster vielen. Waren dat onderhouds- of antivirusprocessen van Windows, dan telt de kaart met lange intervallen die intervallen en noemt ze de processen. Dat is wat samenviel, geen bewijs dat dat werk de frame vertraagde: de antivirus leest alles wat welk programma dan ook opent.

6. Hitte en vermogenslimieten

Bereikt een chip zijn temperatuur- of vermogensplafond, dan wordt de klok herhaaldelijk omlaaggetrokken en weer opgeduwd, en golvende frametijden zijn hoe dat van binnenuit voelt. De firmware neemt die beslissing zelf, zonder het aan Windows te vragen. Het begint na een tijdje en niet meteen, en het loopt mee met hoe warm de kamer is.

7. Het beeldscherm

Een monitor die onder de verversingsfrequentie draait die hij aankan, legt een bodem onder je frametempo die de hardware niet nodig heeft. Controleer de werkelijke frequentie in plaats van hem aan te nemen; op verrassend veel machines staat hij verkeerd na een schone installatie of het verwisselen van een kabel.

8. Een plannerwaarde die een ouder programma heeft achtergelaten

Win32PrioritySeparation bepaalt hoe lang een thread de processor houdt en hoeveel meer tijd de toepassing op de voorgrond krijgt. Waarden met lange of vaste quantums, of met een voorgrondaandeel onder 3:1, veranderen hoe de processor wordt verdeeld tussen de game en al het andere; wat dat met de frametijd doet, is niet gemeten. De kaart Geheugen en systeemstandaarden op de pagina Fix zet de Windows-standaard terug.

9. Overlays en de opnamelaag

Overlays tekenen binnen het eigen frame van de game, en een opnameprogramma op de achtergrond codeert elk frame zodat de laatste paar minuten bewaard kunnen worden. Sluit ze één voor één en test, in plaats van allemaal tegelijk.

10. De partij, niet de machine

Een online game kan voor iedereen op de server tegelijk haperen. Is singleplayerinhoud op dezelfde machine schoon en laat de frametime-opname zien dat de game normaal presenteert, dan is dat een werkelijk bruikbaar antwoord: het ligt niet aan je pc.

De twee oorzaken waarvoor w0a een vakje heeft

Oorzaak 8: "De voorgrondprioriteit op de juiste waarde houden (Win32PrioritySeparation)" (pagina Optimalisaties)

Eén DWORD-waarde: Win32PrioritySeparation onder HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl.

De referentie van Microsoft hiervoor is een gearchiveerde pagina die voor Windows 2000 is geschreven; ze beschrijft zes bits die in drie paren worden gelezen, geschreven als AABBCC:

PaarBepaaltWaarden
AA (de twee hoogste bits)Hoe lang een thread per keer mag draaien01 langer, 10 korter, 00 of 11 de eigen standaard van de editie (korter op een werkstationeditie)
BB (de twee middelste)Of die lengte varieert01 variabel, 10 vast, 00 of 11 de standaard van de editie (variabel op een werkstationeditie)
CC (de twee laagste)Hoeveel meer tijd het programma op de voorgrond krijgt00 gelijk (en vast), 01 2:1, 10 of 11 3:1. Wordt alleen gebruikt als het middelste paar variabel betekent.

Oorzaak 9: "Xbox Game DVR uitschakelen" (pagina Optimalisaties)

WaardeHet vakje schrijftWindows-standaard (wat de reparatiekaart terugzet)
HKCU\System\GameConfigStore, GameDVR_Enabled01
HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR, AllowGameDVR0niet aanwezig
HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR, AppCaptureEnabled01
HKCU\Software\Microsoft\GameBar, ShowStartupPanel0niet aanwezig
HKCU\Software\Microsoft\GameBar, UseNexusForGameBarEnabled0, behalve op een Ryzen X3D met twee CCD'sniet aanwezig

Allemaal DWORD. Op een X3D-processor met twee CCD's laat het vakje de laatste waarde met rust: de opnameketen gaat toch uit, maar het deel van Game Bar waar het stuurprogramma van AMD naar luistert, blijft draaien. Dat is een voorzorg, geen bewezen oorzaak, en de melding van het vakje zegt welke weg het nam. Ryzen X3D, Game Bar en core parking legt uit waarom dat deel op die chips telt.

Controleer het zelf

Deze opdrachten lezen alleen:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /v Win32PrioritySeparation
reg query "HKCU\System\GameConfigStore" /v GameDVR_Enabled
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\GameDVR"
reg query "HKLM\SOFTWARE\Policies\Microsoft\Windows\GameDVR" /v AllowGameDVR
reg query "HKCU\Software\Microsoft\GameBar"

Zo lees je de antwoorden:

Wat de scan hiermee doet

Wat de stotterscan zoekt draait deze controles tegen wat Windows en je stuurprogramma's al hebben vastgelegd, en merkt elke bevinding aan als bewezen, waarschijnlijk, kandidaat of niet gecontroleerd. Twee dingen die het waard zijn om te weten: een scan die altijd tien problemen vindt verkoopt je de oplossingen, en een controle die niet kon draaien wordt geteld in plaats van stilzwijgend als schoon behandeld.

Verander daarna één ding en neem dezelfde scène opnieuw op. Vijf veranderingen en één meting vertellen je niets over welke ervan ertoe deed, en alles wat geen getal heeft bewogen hoort teruggedraaid te worden.

Dingen die niet de oorzaak zijn

Dit alles gaat eindeloos rond als oplossing tegen gestotter, en w0a weigert elk van deze waarden te schrijven, om vastgelegde redenen:

Op een machine die geen geheugen tekortkomt verandert een geheugenopschoner niets meetbaars.

Gerelateerd

Speel je CS2? Welke startopties nog iets doen en waar de frames in het videomenu werkelijk zitten: Lage FPS en gestotter in CS2: een gemeten checklist

w0a verandert geen enkele Windows-instelling tot je erom vraagt, en een tweak bewaart de oude waarde voordat hij een nieuwe schrijft. Herinner me

Heeft deze pagina geholpen?

Wat ontbrak, of wat werkte er niet? We lezen elk van deze berichten.

Heeft deze pagina het niet opgelost, schrijf ons dan — noem het artikel dat je hebt gelezen, dan verbeteren we het.