Nouveau GeForce 400/500 Fermi On Linux 3.1

Written by Michael Larabel in Display Drivers on 5 August 2011. Page 1 of 3. 11 Comments

Besides boosting the Intel Sandy Bridge performance, the Linux 3.1 kernel is also great for open-source graphics in that it has improved support for NVIDIA GeForce 400/500 "Fermi" graphics cards via the reverse-engineered Nouveau driver. The Linux kernel has already supported kernel mode-setting for these GPUs and then more recently there was 2D/X-Video acceleration as well as 3D acceleration when paired with the Nouveau Gallium3D "NVC0" driver. The accelerated support though has required manually extracting the graphics processor's microcode after the GPU was initialized by the proprietary driver. With the Linux 3.1 kernel, Nouveau can generate its own "FUC" microcode to circumvent this problem. In other words, there is now "out of the box" open-source support for NVIDIA GeForce 400/500 graphics cards.

Earlier this year I delivered initial Nouveau Fermi benchmarks on an older kernel and Mesa snapshot after manually generating the necessary microcode files needed for initialization. At first when the FUC microcode replacement/generator was pushed publicly, I tried that code as well, but at the time it was broken. Fortunately, the Linux 3.1 Nouveau DRM code is more mature.

While there is Fermi support in the open-source Nouveau driver -- including Gallium3D with OpenGL 2.1+ acceleration -- there has still a lot left to be desired. As it concerns NVC0/Femri, there is no Gallium3D-based video decoding yet, no suspend-and-resume support, no HDMI audio support, and other missing features, but perhaps most important is that power management / re-clocking support is still not completed. As such, depending upon the graphics card and video BIOS, the GPU when being controlled by the Nouveau driver might not be operating at its optimal frequencies. Additionally, the graphics card's fan may be operating at full-speed the entire time regardless of noise, which can lead to unwanted noise.

When testing out the NVIDIA GeForce GTX 460 graphics card, it functioned fine when using the latest Git master of the Linux 3.1 kernel, Mesa 7.12-devel, and xf86-video-nouveau. Mode-setting was working right as was GPU acceleration without having to worry about the FUC microcode. It also appeared that the GPU under Nouveau was operating at its correct 675MHz core / 1800MHz memory frequencies. Also tested was a NVIDIA GeForce GT 520, but here the mode-setting was not even working right atop the latest kernel. Due to the GT 520 problems, only the GeForce GTX 460 could be benchmarked in this article.

The GeForce GTX 460 was tested on the Intel Core i5 2500K setup with the Sapphire Pure Black P67 Hydra motherboard with 4GB of RAM and a 64GB OCZ Agility SSD. Ubuntu 11.04 was running with the Linux 3.1 kernel Git as of 26 July, GNOME 2.32.1, X.Org Server 1.10.1, xf86-video-nouveau Git as of 26 July, and Mesa 7.12-devel Git as of 26 July (git-b189d16), GCC 4.5.2, LLVM 2.8, and an EXT4 file-system. The Nouveau driver performance was compared to the NVIDIA 280.04 proprietary display driver.

Various workloads were run via the Phoronix Test Suite, including looking at the GPU temperature and system power consumption between the open and closed-source NVIDIA Linux drivers.

Related Articles