Windows uses a system timer to schedule threads and manage process time slices. By default, the timer resolution is 15.6ms — meaning the scheduler wakes up roughly 64 times per second to decide what to run next.
For gaming, this is too coarse.
Why timer resolution matters
At 15.6ms resolution, a thread that needs to wake up after sleeping 1ms might actually sleep for up to 15.6ms. This affects:
- Audio latency: audiodg.exe wakes up on a timer to process audio buffers. At 15.6ms you get audible latency.
- Input processing: the thread that reads your mouse input wakes up on the same timer.
- Frame pacing: game loops that try to cap or pace frames hit the timer ceiling.
Setting higher resolution
Applications can request higher timer resolution via timeBeginPeriod(). Most games do this automatically when running — Valorant, CS2, and others request 0.5ms or 1ms while the game is in focus.
The problem is what happens when the game isn't the only thing requesting it, or when Windows throttles the resolution.
GlobalTimerResolutionRequests (Windows 11 setting):
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel
GlobalTimerResolutionRequests = 1
This tells Windows to respect high-resolution timer requests globally, not just per-process. Without it, Windows 11 may ignore or reduce the requested resolution in certain power states.
Disable Dynamic Tick:
bcdedit /set disabledynamictick yes
Dynamic tick allows Windows to skip timer interrupts when the system is idle. This saves power but can cause inconsistent timing when a game suddenly needs the timer to fire.
Measurement
You can measure your current timer resolution with ClockRes (Sysinternals) or TimerResolution tools. You want to see the current resolution at 0.5ms when a game is running.
IzanagiOP handles both of these settings as part of the Pallet Pack — timer resolution and dynamic tick configuration. Discord: https://terweb.lt/
Top comments (0)