Nouveau's OpenGL Performance Approaches The NVIDIA Driver
As I began to share over the weekend, the community-created Nouveau driver that's open-source and is written by clean-room reverse-engineering the NVIDIA binary display driver, has reached a serious milestone. For low-end NVIDIA GPUs, the Nouveau driver based upon the Mesa Gallium3D architecture is now as fast, or even faster, than NVIDIA's official proprietary driver.
Crossing this milestone happens with the Linux 2.6.39 kernel, which has not even had its first release candidate yet with the Linux 2.6.38 kernel being released just one week ago. The early change that so greatly affects the Nouveau OpenGL performance is the merging of KMS/DRI2 page-flipping for the Nouveau DRM (Direct Rendering Manager) driver within the Git tree that will form the Linux 2.6.39 release. In last week's pull, DRI2/KMS page-flipping was enabled for the Nouveau DRM along with z-compression and various other changes that have built-up since the 2.6.38 kernel merge window was open back in January.
It was in the Linux 2.6.38 kernel where the Radeon page-flipping was introduced for ATI/AMD hardware, and that resulted in dramatic performance improvements for the open-source driver too. Page-flipping is a major win as it allows for faster performance by simply changing a pointer between the screen's front and back-buffers rather than copying the contents to/from the front/back-buffers. This page-flipping not only allows for faster performance, but it also ensures tear-free screen updating since nothing has to be copied to the front-buffer. The benefits are the same for the Nouveau driver, but with this open-source driver already performing quite good in relation to the proprietary NVIDIA driver, it happens to be that for some GPUs this is enough to push it to running at the same speed as the proprietary NVIDIA driver.
For these initial Nouveau tests using the latest Mesa 7.11-devel Gallium 0.4 Git code as of 2011-03-18 and also the Git code of the xf86-video-nouveau DDX and Linux kernel (from the linus-2.6.git tree) from the same date, an Intel Sandy Bridge system was used. It was the Intel Core i5 2500K CPU, Sapphire Pure Black P67 Hydra motherboard, 2GB of DDR3 system memory, and 250GB Seagate SATA HDD. The NVIDIA graphics cards tested in this article include the GeForce 8500GT 512MB, GeForce 9500GT 1024MB, GeForce 9800GT 512MB, and GeForce GT 220 1024MB. Why no other NVIDIA graphics cards for this testing? It is explained at the end of the article.
The binary driver used in testing was the NVIDIA 270.30 Beta. Besides the updated graphics stack and kernel, this was an Ubuntu 10.10 x86_64 installation with GNOME 2.32 and Compiz, X.Org Server 1.9.0, GCC 4.4.5, and an EXT4 file-system.
Tests included Nexuiz, OpenArena, World of Padman, Urban Terror, VDrift, and Lightsmark via Phoronix Test Suite 3.0 and OpenBenchmarking.org.
Worth noting with the Nouveau driver that, unlike the Radeon driver, there is no SwapbufferWait xorg.conf option with the xf86-video-nouveau DDX. There is a page-flipping xorg.conf option for the Nouveau driver, but with the 2.6.39 kernel and latest DDX, page-flipping is enabled by default.