Wildly fluctuating refresh rate and flicker at low framerates

When I run an application at a low framerate, the refresh rate (as reported by the monitor OSD) fluctuates wildly. I’m testing with Ōkami HD (which is locked at 30 FPS), mpv (playing 24 or 25 FPS videos) and “strangle glxgears -fullscreen”. For Ōkami, the refresh rate constantly jumps between 48 and 80 Hz (never a multiple of 30). For mpv, the refresh rate fumps around all over the place, even to the monitors maximum refresh rate. I’m pretty sure it used to hold the refresh rate fairly steady at an integer multiple of the video’s refresh rate, but I don’t remember when I last checked. Interestingly though, If I pause mpv, the refresh rate holds steady at a constant 48 Hz.

For glxgears, I run at 57 FPS, the refresh rate holds fairly steady, but I decrease to 56 FPS or lower on one of my monitors (an Acer 27" Nitro VG271US), the refresh rate start wildly. On my other monitor (a Gigabyte G27Q), this starts happening at 54 Hz. I have only one of the monitors on at a time in order to be able to use VRR. The fact that this starts happening at low refresh rates leads me to think it’s an issue with the LFC.

It doesn’t seem like this fluctuation affects the frame delivery (based on what I can see with high speed video recording), but when running at these low framerates the monitors starts to flicker, which might be connected. It starts out subtly at the edges of the screen, but gradually grows worse and starts covering the whole screen. Same thing happens on both monitors.

Operating System: openSUSE Tumbleweed 20240307
KDE Plasma Version: 5.27.10
KDE Frameworks Version: 5.115.0
Qt Version: 5.15.12
Kernel Version: 6.7.7-1-default (64-bit)
Graphics Platform: X11
Processors: 16 × AMD Ryzen 7 5800X 8-Core Processor
Memory: 62.7 Gibyte of RAM
Graphics Processor: NVIDIA GeForce RTX 2080 Ti/PCIe/SSE2
Manufacturer: ASUS
Driver: 550.54.14

nvidia-bug-report.log.gz (1.0 MB)

My guess is, in the case of Ōkami, it duplicates the frame rate, from 30 to 60 FPS. But then instead of showing each resulting frame for 16.7 ms, it shows every other frame for 20.8 ms and every other frame for 12.5 ms. Every other frame being shown for a different duration then causes a static charge to build up, which causes the flickering, because frames with one voltage are shown for longer than frames with the opposite voltage. But that’s just a guess.

I don’t seem to get the flickering from mpv, in which the refresh rate fluctuates randomly rather than alternating between two values.