I have had a similar experience on my machine (Intel iGPU + NVIDIA GPU).
I haven’t tested it in a few months now, but I’m sad to see that the issues still remain Even though I believe that they have been alleviated up to a point in which it is in a usable state. However, the underlying issue still remains. It is one of the reasons why I have been using Windows instead of Linux which is “bearable” thanks to WSL.
From my past experience the only fixes were:
- Switch the laptop to only use the dedicated NVIDIA GPU if you laptop allows it (mine does). In this case everything worked fine since both the internal screen and the external screen were directly running from the dedicated GPU. Of course that this eliminates any of the power saving advantages that the hybrid mode may have.
- I was able to use the nvidia-smi command to ramp up the NVIDIA GPU clock speeds. If I ramp them up to the maximum the performance issues disappear. Of course that, once again, this will probably have an impact on power consumption.
These are just workarounds. What we really need is a proper fix. I believe that (part of) the problem is that the iGPU does all the rendering and composting by default. Therefore, the iGPU must also renders what is shown on the external screen but it must be copied from the iGPU frame buffer to the dGPU framebuffer. If the NVIDIA GPU is not properly managed, its clock speeds are just too slow and it is unable to receive all that data in a timely manner.
I just assume that on Windows the processed is more optimized and/or the NVIDIA drivers are able to clock the GPU accordingly automatically (and I assume that it doesn’t bump the clocks all the way to the max unless needed).