The Open-Source NVIDIA "Nouveau" Linux Driver Performance At The End Of 2018
As it's been a while since last looking at the NVIDIA vs. Nouveau Linux OpenGL driver performance, here's a look at the current performance difference as the end of the year quickly approaches. This benchmarking roundabout features multiple generations of GeForce GPUs while testing with the NVIDIA 415 proprietary driver against the Nouveau stack on Linux 4.19 and Mesa 19.0-devel.
Sadly there isn't much positive news to report as 2018 draws to a close for the open-source NVIDIA scene... The main highlight of the year is the ongoing work by Red Hat (Karol Herbst and others) on bringing up SPIR-V/compute support to the Nouveau driver and somewhat related work by Jerome Glisse around Heterogeneous Memory Management and the new Heterogeneous Memory System with Nouveau driver support. The Nouveau SPIR-V compute support isn't yet mainlined but hopefully will be in 2019.
For gamers there wasn't much to get excited about on the Nouveau front this year. Some of the achievements were HDMI 2.0 support being added to the Nouveau kernel driver, NVIDIA posting signed Volta firmware and initial GV100 support in the kernel, Nouveau developers starting to reverse-engineer Turing but no mainline support yet, preparations for OpenGL 4.5 in NVC0 Gallium3D but not enabling it by default yet, some Tegra Mesa bits landed, and various fixes.
Nouveau developers hoped to have a basic Vulkan driver working this year, but that didn't pan out. There's work in the direction of Nouveau Vulkan with some boilerplate code and some of the heavy lifting done by the SPIR-V code, but nothing that's usable at this time. It's unfortunate as the open-source NVIDIA driver stack will become less relevant/possible for Linux gaming as more new game ports become Vulkan-only, Vulkan affording better Wine/SteamPlay experience thanks to DXVK, etc.
The main blocker for making the open-source NVIDIA driver viable for Linux desktop users and gamers though is re-clocking support for newer generations of hardware... With the GeForce GTX 900 Maxwell series and newer, there isn't yet any re-clocking support so graphics cards are stuck to operating at their boot frequencies, which generally is quite low compared to their rated base/boost clock frequencies. Until NVIDIA releases the signed PMU firmware or the Nouveau developers achieve a workaround, any GPUs newer than the GTX 600/700 Kepler or GTX 750 Maxwell series is a no-go if you want decent performance. It's not known if/when a solution will be in place for better supporting these newer generations of NVIDIA GPUs.
Thus for now the best Nouveau open-source driver support remains with the GTX 600/700 Kepler series since at least there the graphics card can be manually re-clocked by writing a value to DebugFS... Sitll no automatic/dynamic re-clocking, but at least users can force their Kepler (and GTX 750 Maxwell1) parts to the rated frequencies.
For showing where the performance is at, I tested the GeForce GTX 680, GTX 750 Ti, GTX 780 Ti, GTX 980, and GTX 1080 graphics cards with the Nouveau driver (Linux 4.19 + Mesa 19.0) and again when using the official NVIDIA 415.18 proprietary driver. The GTX 680, GTX 750 Ti, and GTX 780 Ti were tested at their re-clocked 0f performance states. Besides the performance, the driver difference is having Vulkan 1.1 + OpenGL 4.6 with the binary blob while the open-source driver exposes OpenGL 4.3 for now.