I want to reduce the refresh rate of my secondary monitor to something really small, such that my GPU doesn't has to do as much work. But there is no option to change the refresh rate for my second monitor in the default "Displays" settings. It seems to be fixed at 60 Hz.
How can I throttle the refresh rate of my second monitor to only, let's say 10 frames per second?... to free up some resources on my GPU.
Here is my display setup:
I also couldn't find an option in the NVIDIA X Server Settings:
The output of xrandr
is
Screen 0: minimum 8 x 8, current 3440 x 2520, maximum 16384 x 16384
DVI-I-0 connected 1920x1080+854+1440 (normal left inverted right x axis y axis) 477mm x 268mm
1920x1080 60.00*+
1680x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00
1024x768 75.03 60.00
800x600 75.00 60.32
640x480 75.00 59.94
DVI-I-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 3440x1440+0+0 (normal left inverted right x axis y axis) 819mm x 346mm
3440x1440 59.97 + 99.98*
3840x2160 59.94 50.00 29.97 25.00 23.98
2560x1080 100.00 59.94
1920x1080 100.00 60.00 59.94 50.00 29.97 25.00 23.98 60.00 50.04
1680x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1280x800 59.81
1280x720 60.00 59.94 50.00
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 59.94
640x480 75.00 59.94 59.93
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
DVI-D-0 disconnected (normal left inverted right x axis y axis)
As stated here you can use
cvt
andxrandr
to change the refresh rate of your monitor.But in your case the arguments of thecvt
have to be3840x2160 24
to limit the refresh rate of your second monitor while preserving its resolution.BUT :
Monitor refresh rate has nothing to do with the GPU utilization.In fact the framebuffer is being read by the monitor for example 60 times per second for a 60Hz monitor , whether your GPU is rendering to it 240fps or whether it's completely idle.As far as I know the method used by the monitor to read the framebuffer is called Direct Memory Access which even doesn't require CPU cycles to do the I/O operations.
If you want to lower the load of your GPU, you can :
Limit the resolution of the second monitor via the aforementioned method , but it's a little ridiculous since you cannot use the full potential of the monitor
Move the windows that demands higher renderings (e.g games and video players , but not a solid window of a file-manager or even just a solid wallpaper for example) to the monitor with the lower resolution.
Disable some extensions and features that might use the GPU
See which processes are putting a high pressure on your GPU via
nvidia-smi
ornvidia-settings
(i.e the program the screenshots you posted belong to) and limit the CPU usage of them via cputool as follows (you have to install thecputool
package first) :Limiting the CPU usage also limits the OpenGL calls that a process issues in the unit of time , so it can limit the GPU usage too.I don't know any tool (even
nvidia-smi
) which can limit the GPU usage directly(if somebody knows , I'm glad to hear).No program ever begins its execution in the GPU.All programs begin with the CPU and then issue calls to the driver of the GPU via OpenGL , CUDA or OpenCL to name a few.So I think it's reasonable to limit the CPU usage.
And note that the
maximum_cpu_usage
in the above command for a 16 thread CPU is from0
all the way up to1600
. That's the maximum amount of CPU that a process on that system can use (if it has 16 threads of execution).Limiting for example the
KWin
window manager to10
in my system reduced the GPU usage from almost 32% to around 15% when moving a terminal window very fast across the whole screen.But it can cause some glitches when you move the window.TODO : If somebody knows how to limit the frame rate of the Gnome-shell or a similar DE , I'm glad to hear.
Hope it helps.