Why does "Ultra Low Latency" mode fix stuttering in some games? (Ryse Son of Rome for example)

Discussion in 'Videocards - NVIDIA GeForce Drivers Section' started by BlindBison, May 30, 2020.

  1. BlindBison

    BlindBison Ancient Guru

    Messages:
    2,420
    Likes Received:
    1,146
    GPU:
    RTX 3070
    Hi there guys,

    I was recently playing through Ryse Son of Rome since it's on a 4 buck Steam sale at the moment and noticed some really bizarre and unexpected behavior when tinkering with RTSS, the flip queue, and the various in-game fps limiting options.

    For some context, I have a 3900X and 2080S at stock clocks on the latest build of windows and with the latest stable Nvidia drivers.

    1) So, by default and the first thing I tried was Low-Lag modes OFF (the default) + the in-game option of NOT to cap fps internally. RTSS cap was placed at 141 since I have a 144 hz 1440p monitor with G-Sync.

    In this case, the game capped itself to 63 fps internally and I got random stuttering pretty frequently even when maintaining that fps cap.

    2) Low-Lag modes OFF (the default) + the in-game option to go ahead and cap fps (limits the game to 31 fps internally).

    Here, I still noticed frequent microstuttering.

    3) Low-Lag modes OFF + the in-game option to cap fps OFF (so it would be capping at 63) THEN I applied a Rivatuner cap of 30-50 fps.

    In each case the game still microstuttered.

    4) Low-Lag mode set to Ultra with the in-game option to limit fps turned OFF (so, normally this would limit the game to 63 fps based on my tests).

    This is where stuff gets weird -- now, the game was suddenly totally uncapped -- it reached the cap of 138 imposed by Nvidia on 144 hz G-Sync monitors when Low-Lag mode is set to Ultra in fact.

    Now, the game did stutter, but ONLY when a genuinely FPS drop occurred (which was still quite frequent with uncapped FPS since you run into CPU bottlenecks I presume).

    5) Low-Lag mode set to Ultra with an RTSS cap of 30 or 60 -- now the previous microstuttering was completely resolved.

    My big question here is "Why?"? I had thought stuttering often came from CPU bottlenecks where the flip queue/default prerender settings were intended to HELP the CPU out and keep your game more GPU limited.

    I'd also read in a reddit thread in the earlier days of the Ultra low lag mode that certain games stuttered worse with it (though much of that was anecdotal/on reddit which often does get things wrong in my experience).

    Anyway, am I missing something? This is not at all what I expected to happen, but it seems reproducible. Anyway, just wondered if anyone else out there could explain why prerendering frames could be causing stuttering or if I'm misinterpreting what's happening here. Thanks for your time,

    EDIT: This also happens for me locally in Crysis 3 -- framepacing goes nuts when I leave prerender at default but everything smooths out significantly as soon as I switch ULLM to Ultra/enabled. Really bizarre.
     
    Last edited: Jul 3, 2020
    Kamil950 likes this.
  2. BlindBison

    BlindBison Ancient Guru

    Messages:
    2,420
    Likes Received:
    1,146
    GPU:
    RTX 3070
  3. janos666

    janos666 Ancient Guru

    Messages:
    1,653
    Likes Received:
    407
    GPU:
    MSI RTX3080 10Gb
    This is completely hypothetical on my part but I noticed something loosely similar even before the introduction of LLM in drivers or before I saw any G-Sync displays (<= year 2014) and I think this kind of micro-stutter is more like micro-lag and indeed has something to do with queuing/buffering.
    Fortbite3 games offer a renderaheadqueue parameter and Bioware games (which I played for countless hours back then) based on this engine are prone to stuttering, especially DAI, so I played around with many settings and continued to use DAI as a benchmark even after I lost interest in ever re-playing the game (after changing some hardware, installing big OS or driver updates with new features which supposedly have some effects on game stability, etc). I often found that reducing the queue length by any means give a slightly lower perceived lag, a little "jitter" but also less "micro-lag" even with any and all all kinds of *Sync disabled. And the micro-lag part is more prominent with regular V-Sync (without G-Sync or fractional fps limiter, etc).


    I always used to have this feeling when playing CSS back in the old days with fix-60Hz LCD display and V-Sync. It's the kind of feeling that everything stopped for a minute, like a Max Pain style "bullet time" in real life, except I couldn't just aim at the enemy's head but had to wait and see everything happening in the dark and then get the results a seconds later when I have a bullet in my head (all that between literally two f'k frames... I am not joking: one frame the enemy appeared, next frame I am dead, no motion in-between ... or at least it felt like that...).

    Something same applied to calmly walking around in DAI whenever I made a sudden mouse movement. It was like everything just froze in time for the long fraction of a second and then the next frame "teleported" to reflect a fairly big portion of camera movement (but literally nothing happened in-between, everything was frozen in time for long longer than what I would normally consider ~16ms).

    Reducing the queue/buffer bloat seems to help with this. The mouse movement reflects more jitter on screen but there are less perceived "pauses and teleportation". But these could be mind tricks (sort of illusions) and placebo.
     
    Last edited: May 30, 2020
  4. Astyanax

    Astyanax Ancient Guru

    Messages:
    17,044
    Likes Received:
    7,380
    GPU:
    GTX 1080ti
    Some stutter is due to the sharpness of a drop in framerate, with ull on, the peak framerate decreases.
     

  5. PrMinisterGR

    PrMinisterGR Ancient Guru

    Messages:
    8,132
    Likes Received:
    974
    GPU:
    Inno3D RTX 3090
    I have similar observations with a GTX 1070 and the Witcher 3.
    The game is very prone to microstutter, so my initial instinct was to lock it at 30 with a quad vsync (I'm playing at 1440p120). I realized that my GPU should be able to do more, so I removed any frame rate limiter in and out of the game, and disabled Vsync everywhere. After that, I enabled Low Latency mode to "On" (I haven't tried Ultra yet, I'm not sure what it does).

    Lo and behold, the game FLIES and there is zero microstutter, and no visible tearing, which is the weirdest for me. The game does run at 1440p120, and it does change resolution of the desktop from 2160p properly, so there is no fake full screen or anything like that. It's a bit of a mystery.

    I did similar changes to Elite Dangerous, and it also performs much better.

    Same deal with GTA V.
     
    Smough and BlindBison like this.
  6. -Tj-

    -Tj- Ancient Guru

    Messages:
    18,108
    Likes Received:
    2,611
    GPU:
    3080TI iChill Black
    I remember the game having some sort of timing issue. When I used intel timer (max windows possible 0.5ms) it suddenly started to run ok with full gpu utilisation.

    This started with windows 8.1+


    Try that timer and remove ultra latency if it's still ok
     
  7. PrMinisterGR

    PrMinisterGR Ancient Guru

    Messages:
    8,132
    Likes Received:
    974
    GPU:
    Inno3D RTX 3090
    I'm using the Set Timer Resolution service running, and have any device that works properly with it, set up with MSI-X interrupts. The observations are what they are with these parameters already being the same for all different settings. It was Low Latency mode with uncapped frames that made the games perform better.
     
  8. AsiJu

    AsiJu Ancient Guru

    Messages:
    8,960
    Likes Received:
    3,474
    GPU:
    KFA2 4070Ti EXG.v2
    Turning Low Latency to On or Ultra limits the flip queue size / pre-rendered frames to 1 (=back buffer is kept empty). This often helps alleviate stuttering, as discussed earlier in another thread.

    I don't know particularly why, but I'm guessing it can workaround framepacing issues especially when used in conjunction with a fps cap.
    More often than not you get better results with flip queue = 1 and ingame caps and vsync off (instead via RTSS or NV CPL).
     
  9. janos666

    janos666 Ancient Guru

    Messages:
    1,653
    Likes Received:
    407
    GPU:
    MSI RTX3080 10Gb
    Games which were designed to do so can continue to set the display mode (resolution, frequency, even bit-depth, etc) in "optimized fullscreen" (aka directflip redirected fullscreen exclusive) mode. That mode doesn't take away any functionality. Even some borderless-windowed 'fullscreen' mode games (with no directflip support) can do it by requesting a different desktop resolution (though that rarely works, especially for the frequency part and higher bit-depth won't work for 'legacy' windowed apps).

    The Witcher 3 generally used to run butter-smooth for me (in terms of random micro-stutter/lag or jitter), at least relatively to most games. Although I played it in 2160p60 with FastSync (where I obviously expected some amount of stutter/jitter) or in 1080p60 (on a PDP before my first OLED) with "low-latency V-Sync" (which still has more buffering and smoothing than G-Sync which is not running constantly at a limiter).
     
    BlindBison likes this.
  10. PrMinisterGR

    PrMinisterGR Ancient Guru

    Messages:
    8,132
    Likes Received:
    974
    GPU:
    Inno3D RTX 3090
    For me it was always an issue with microstuttering with it, with the AMD GPU also. But there I just had to use double vsync with RadeonPro and it was OK.
     

  11. Mda400

    Mda400 Maha Guru

    Messages:
    1,090
    Likes Received:
    201
    GPU:
    4070Ti 3GHz/24GHz
    As others above had somewhat alluded to, It could just be that Ryse: Son of Rome's engine has poor frame-pacing\timing issues when pre-rendered frames are waiting to be drawn. This may not be the case for all applications.

    Since 'Ultra' low latency mode uses just-in-time synchronization when rendering in the backbuffer (to be sent to the frontbuffer), if ULLM's implementation works well for the game's engine there would be little to no possiblity of frames being drawn to the buffers out of sync.

    Combine that with RTSS' highly-accurate frame limiting methods like scanline sync, you can create a situation with little deviation in frametimes.
     
    AsiJu, PrMinisterGR and BlindBison like this.
  12. -Tj-

    -Tj- Ancient Guru

    Messages:
    18,108
    Likes Received:
    2,611
    GPU:
    3080TI iChill Black
  13. Phroster

    Phroster Master Guru

    Messages:
    305
    Likes Received:
    15
    GPU:
    Inno3D 4080 RTX
    I always thought Ultra low latency mode only works when Vsync is enabled.
     
  14. BlindBison

    BlindBison Ancient Guru

    Messages:
    2,420
    Likes Received:
    1,146
    GPU:
    RTX 3070
    So, I hear you and what you’re saying I believe is correct, but I was noticing a difference when capping FPS to sustainable values. With low lag mode OFF / default pretender settings the game microstuttered even when maintaining the FPS cap.

    once I enable low lag mode to ultra while reaching that FPS cap it doesn’t micro stutter anymore.

    Which seems weird.
     
  15. BlindBison

    BlindBison Ancient Guru

    Messages:
    2,420
    Likes Received:
    1,146
    GPU:
    RTX 3070
    Thanks for all the replies by the way everyone. What I think I’ll end up doing then is just leaving low lag mode OFF globally, but then if I get stuttering I’ll play around with the flip queue / various input limiting methods.

    Just really surprised me to get these results since mostly what I’ve read (like compiled in this google doc: https://docs.google.com/document/d/1ydvAKHF4NvybJIWmZEocoi0-gMYg4NhvYhWNLyohNAQ/edit) seems to “typically” recommend default prerender settings or even state that lowering the prerender queue can be a cause of stutter.

    EDIT: there’s also CaptaPraeliums write up on the battlefield v subreddit talking about prerendering which I had previously based much of my understanding of the setting on but now I’m sorta confused again: https://www.reddit.com/r/Battlefiel...urce=share&utm_medium=ios_app&utm_name=iossmf
     

  16. aufkrawall2

    aufkrawall2 Ancient Guru

    Messages:
    4,532
    Likes Received:
    1,889
    GPU:
    7800 XT Hellhound
    It's about CPU prerender, which is not related to vsync. Vsync has its own backbuffer queue.
    ULL ultra is a bit odd with gsync, as it enables vsync when dropping below the VRR range (if you have no LFC), while it does not enable vsync when going beyond the upper VRR range limit.

    There btw. seems to be a stupid bug when setting options for a game profile in the Nvidia control panel, it seems to sometimes not change back correctly when changing from global setting to per profile and then back to global. Can be "ultra" confusing... ;)
     
    PrMinisterGR and BlindBison like this.
  17. janos666

    janos666 Ancient Guru

    Messages:
    1,653
    Likes Received:
    407
    GPU:
    MSI RTX3080 10Gb
    Theoretically the pre-render queue should "starve" without the V-Sync back-pressure (or similar things but you don't get other similar things in practice, save for the V1/V2 limiters, may be). This is how "low latency V-Sync" works: https://forums.guru3d.com/threads/the-truth-about-pre-rendering-0.365860/page-12#post-5380262
    Is that really V-Sync in the lower range and not LFC? Ultra does have an upper auto-cap to keep the max fps below the upper end of the VRR range but it only work with V-Sync enabled (together with G-Sync) and only for the supported APIs (even though it seems to be an auto-configured V3 limiter which otherwise does work with all APIs).
    I think I know what you talk about. Sometimes I loose G-Sync after setting a game profile to fixed refresh mode and I restore it to global G-Sync.
     
    BlindBison likes this.
  18. BlindBison

    BlindBison Ancient Guru

    Messages:
    2,420
    Likes Received:
    1,146
    GPU:
    RTX 3070
    Just an update, I retested everything again today -- same zone, same testing method (setting cap or not capping with various methods with or without low lag mode on, etc) and saw the same results.

    Just some more info:

    1) The in-engine cap of 31 fps did not microstutter when panning the camera once I enabled Ultra low latency mode -- without ULLM ON the in-engine caps both had some microstutter.
    2) The in-engine cap of 63 stopped working once I enabled ULLM.
    3) RTSS cap did not stutter provided I was able to maintain the target fps when ULLM was enabled. I was able to see some occasional microstuttering when panning the camera when ULLM was OFF with the same FPS caps in place.

    Imgur link of testing area: https://imgur.com/a/q9ZCWnt
    I found here (starting level up on high ground panning camera tended to stutter a lot with the default settings, but this gets resolved when using ULLM even with uncapped fps in my tests).
     
  19. aufkrawall2

    aufkrawall2 Ancient Guru

    Messages:
    4,532
    Likes Received:
    1,889
    GPU:
    7800 XT Hellhound
    Only with displays that don't enable the driver to do LFC by having a VRR range of >= 2x, which it always does in this case.
    It's really vsync without LFC, you have to force it to off in the driver if you don't want this (e.g. because app has broken triple buffering).

    Yes, exactly that behavior.

    As of CPU prerenderlimit 1 and ULL ultra (= prerenderlimit <1): I really don't know why Nvidia hasn't set this to 1 for D3D11/9 by default like AMD did back in 2015. It's completely obvious that many games have frame time consistency issues with their default prerender value.
     
    AsiJu likes this.
  20. janos666

    janos666 Ancient Guru

    Messages:
    1,653
    Likes Received:
    407
    GPU:
    MSI RTX3080 10Gb
    Does this also happen with GSync+VSync+Ultra? I tried limiting the FPS with RTSS to 33 for a 40-120 range and I didn't see stutter, the measured fps was 33 (not 30) and the latency didn't feel like it went through the roof.
     

Share This Page