Page 1 of 1

Pulling my hair out - massive stutter w/ constant frametime

Posted: 04 Jul 2019, 16:26
by saruh
Computer specs: https://valid.x86.fr/grppsy

Settings:
100Hz refresh rate
Vertical sync: Fast
RTSS framerate limit: 99.910
ULMB

Hello, I am trying to get the smoothest experience, however no matter what I keep running into massive stuttering. In Apex Legends, I will leave a room and go outside and the game will feel as if its dropped to 20 or 30fps for sometimes upto 5 seconds. This seems like it would be related to IO latency, however the game is running on its own dedicated SSD, and the duration of stutters seems way too long. This stuttering even happens when going from outside to inside, or when turning the camera 90 degrees. This issue has been a problem for a while, as I've been playing at 240hz and have observed in video recordings extremely strange FPS fluctuations.

Heres the thing that really confuses me though, throughout the stuttering the frametime is flat and stable. There is literally no fluctuations at all in either frametime graphs or FPS monitors. Even in videos at 240hz, watching the FPS counter when a massive "fps drop" occurs shows nothing in the counter! I've monited the frametime using both RTSS and MSI Afterburners graphs. I even set a low polling rate (100ms).

Only thing at this point that I can think of, is that the renderer might be sending the same frame multiple times? Would this be tied to an IO issue? Very frustrating.

I'd really really appreciate any input on what to do :cry:

Re: Pulling my hair out - massive stutter w/ constant framet

Posted: 05 Jul 2019, 11:11
by Chief Blur Buster
Does this happen randomly:
- Long periods of sustained smoothness followed by a severe burst of microstutters.
- Cyclic situation of smooth-stuttery-smooth-stuttery-smooth-stuttery in an oscillation?

This is normal and has an easy scientific explanation.

(A) Frametime doesn't always translate to photontime, as the VSYNC adds a one-refresh-cycle error margin, depending on the time interval between frame presentation & the monitor's scheduled fixed refresh cycle.

(B) The closer the RTSS limit is to the refresh rate, there is a beat-frequency effect as the 99.910fps beat-frequencies against 100Hz. This will create the smooth-stutter-smooth-stutter effect.

With larger differentials, you get:
shortsmooth-tinystutter-shortsmooth-tinystutter-shortsmooth-tinystutter

With tighter differentials, you get longer time between stutter cycles but the stutters are much worse.
longsmooth-massivestutter-longsmooth-massivestutter-longsmooth-massivestutter

(It also creates an input-latency sawtoothing effect too, as the framerate cap beat-frequencies against refresh rate)
Image

The refresh rate (GPU clock) is never synchronized perfectly with the frame rate cap (CPU clock), the only way to fix that is variable refresh rate where the monitor can synchronize to the game, rather than have its own independent refresh cycle schedule. Unfortunately as you already know, most motion blur reduction don't support VRR. (Except for nicer ASUS TUF SERIES as well as the buggier G-SYNC+ULMB hack)

Note: The normally regular cyclic effect can become somewhat random especially as GPU rendertimes fluctuate, GPU power management, and other effects (as the rendertime:captime ratio can vary massively to maintain frametime).

The massive stutters that occurs for longer periods during tighter capping differentials in the Low-Lag VSYNC HOWTO, is basically the frame present-time microsecond-jittering back and fourth past the VSYNC time. As the tighter differential (fps vs Hz) more slowly beat-frequencies against each other, the microsecond-league jittering of presentation has more time to jitter back-and-fourth past VSYNC as it more slowly wraps around. So you get much more massive bursts of microstutters.

SOLUTION 1: Use a bigger capping differential between frame rate and refresh rate.

SOLUTION 2: Use another low-lag VSYNC method such as RTSS Scanline Sync, which can be superior for ULMB (but much harder).

RTSS Scanline Sync is named that way because it beam-racing tricks (raster-synchronized VSYNC OFF tearline at an exact pixel row scanline, including off into the VBI) in order maintains exact fps=Hz without stutters. You don't necessarily have to understand that, except that it creates a tearingless VSYNC OFF mode by allowing you to steer the tearline exactly between refresh cycles -- getting you a VSYNC ON look while having less lag than VSYNC ON. It is stutter-sensitive to framerate slowdowns but has none of the cyclic "smooth-stutter-smooth-stutter-smooth" effect of the alternate low-latency VSYNC ON instructions. So that's another advantage. You will still get stutters during frame rate slowdowns, but for far less than 5 seconds most likely

Re: Pulling my hair out - massive stutter w/ constant framet

Posted: 07 Jul 2019, 23:45
by saruh
thank you very much, i'll investigate these options and see if the situation improves.

Re: Pulling my hair out - massive stutter w/ constant framet

Posted: 13 Jul 2019, 03:08
by saruh
Switching to scanline sync with fast sync off seems to have fixed everything. Thank you so much, you provide an incredible resource. Please start a Patreon.