The NVIDIA vs. Open-Source Nouveau Linux Driver Benchmarks For Summer 2018
It has been some months since last delivering any benchmarks of Nouveau, the open-source, community-driven for NVIDIA GPUs. The reason for not having any Nouveau benchmarks recently has largely been due to lack of major progress, at least on the GeForce desktop GPU side, while NVIDIA has continued to contribute on the Tegra side. For those wondering how the current performance is of this driver that started out more than a decade ago via reverse-engineering, here are some benchmarks of the latest open-source Nouveau and NVIDIA Linux graphics drivers on Ubuntu.
Nouveau has continued with enabling support for new OpenGL extensions, various bug fixes, and minor optimizations within their NV50/NVC0 Gallium3D drivers. On the Nouveau DRM kernel side they have generally been pushing new material each cycle. On the kernel side, their biggest effort lately has been on initial Volta GV100 GPU support that is now staged for the Linux 4.18 kernel but is in very limited form and mostly good for getting a display lit up with kernel mode-setting at this point.
One of the largest undertakings this year for Nouveau has been work by multiple Red Hat developers on gaining support for the NIR intermediate representation. Getting this NIR IR support together for Nouveau is important for being able to support OpenCL compute as well as eventual Vulkan support. Red Hat's plans though for Nouveau aren't entirely clear, at least in the public, but at the end of last year they did hire well known Nouveau contributor Karol Herbst who has been working on this NIR support. Red Hat also continues employing other Nouveau contributors like Nouveau DRM maintainer Ben Skeggs.
Here's a summary as to some of the Nouveau pieces at this point for the summer of 2018:
While the NVIDIA proprietary driver was the first GPU driver on Linux supporting OpenGL 4.6, with the same hardware on the NVC0 Gallium3D driver will be limited to OpenGL 4.3. Nouveau supports most of (or even all) OpenGL 4.4/4.5, but not officially. With GL 4.4/4.5 for official support is now the OpenGL Conformance Test Suite to pass. Initially Nouveau developers didn't have access to that CTS, but then The Khronos Group open-sourced it and the X.Org Foundation has also joined the organization's adopter program. That should allow Nouveau to obtain official conformance status once passing the CTS, but we haven't seen much work on that front since. As it stands now for Mesa 18.2-devel Git, NVC0 is exposing OpenGL 4.3.
This OpenGL experience isn't quite bug free but in my testing for this article I was encountering hangs with DiRT Rally and Mad Max as two games in particular being problematic with NVC0 on current Mesa 18.2.
The biggest issue that plagues the Nouveau driver with modern NVIDIA hardware and really hurts its potential adoption is the lack of re-clocking support.
For GeForce GTX 600/700 "Kepler" graphics cards there is manual re-clocking support that has been stable for a while now in the kernel and requires writing "0f" (or the other desired performance state) to /sys/kernel/debug/dri/0/pstate (or similar path depending upon GPU index) to switch from the boot clock frequencies to the highest performance state for the GPU core and memory. At this stage, Nouveau doesn't have any dynamic/automatic re-clocking for their GPUs to switch frequencies based upon GPU utilization. The benchmarks in this article on Kepler hardware as well as Maxwell 1 show the re-clocked performance to their highest (0f) performance state, but unfortunately there isn't re-clocking for Maxwell (GTX 900 series) and newer.
The Maxwell GeForce GTX 900 and Pascal GeForce GTX 1000 series still do not have proper re-clocking support in the Nouveau driver due to the shift to signed firmware images. While NVIDIA released the necessary signed firmware images to Nouveau developers to support hardware acceleration on Maxwell/Pascal, right now it's still stuck to the boot clock frequencies that are very low compared to their advertised clock speeds. NVIDIA would need to release the PMU firmware and likely other documentation for the open-source driver to get to the stage of re-clocking offered on Kepler hardware. But there's been no indication of that happening so unless the Nouveau developers discover some black magic for getting re-clocking working and being able to ramp up the fan speeds too as part of that process, the situation isn't looking good at this moment in time.
With that said, the aging GeForce GTX 600/700 series remain the best supported discrete GPUs right now for the Nouveau driver. In fact, the best supported for a fully libre system as well. Unlike Maxwell/Pascal or discrete Radeon GPUs or even recent generations of Intel HD/UHD Graphics, the Kepler hardware requires no binary-only firmware images for initialization and thus work with a fully libre kernel.
At this moment in time there is no Nouveau Vulkan driver. But Nouveau developers have expressed hope for making a basic open-source NVIDIA Vulkan driver this year albeit it has yet to materialize. The first step is getting the aforementioned NIR intermediate representation support into shape as that is the basis for Vulkan and modern OpenCL (as well as OpenGL 4.6 support).
For showing off the current Nouveau performance, I ran some benchmarks using the Linux 4.17 kernel with Mesa 18.2-devel from the Oibaf PPA. The performance was then compared to their latest NVIDIA 396.24 proprietary driver. All tests were done on the same Ubuntu 18.04 system.
Benchmarks were done with a GeForce GTX 680, GTX 750 Ti, GTX 760, GTX 780 Ti, GTX 980 Ti, and GTX 1080 Ti. The Kepler/Maxwell1 cards were re-clocked to their highest performance state while the Maxwell2/Pascal cards unfortunately are limited to their boost clock frequencies due to the aforementioned road-blocks. A variety of OpenGL benchmarks were then run via the Phoronix Test Suite.