1. Computers
  2. Display Drivers
  3. Graphics Cards
  4. Memory
  5. Motherboards
  6. Processors
  7. Software
  8. Storage
  9. Operating Systems


Facebook RSS Twitter Twitter Google Plus


Phoronix Test Suite

OpenBenchmarking.org

The Huge Nouveau Kernel Driver Rewrite Surfaces

Nouveau

Published on 06 August 2012 09:23 AM EDT
Written by Michael Larabel in Nouveau
1 Comment

Over the weekend there was the push by Red Hat's Ben Skeggs that effectively reworks/rewrites the Nouveau DRM kernel module for reverse-engineered open-source NVIDIA graphics under Linux.

Skeggs work rewrites a large portion of the Nouveau kernel driver code -- it measures in at about 50 commits and thousands of lines of code have been changed. We knew a big Nouveau DRM rewrite was happening following minimal changes for Nouveau with the Linux 3.6 kernel but on Saturday was when the code finally landed within the Nouveau project's kernel repository.

This Nouveau overhaul won't land in the mainline tree of Linus Torvalds until the Linux 3.7 kernel, but the developers are already asking interested parties to begin testing the code to look out for regressions. "I expect that for a while there will be a *lot* of stupid typos/thinkos that cause all sorts of breakage, so please test everything any anything you can and report *regressions* from the pre-rework code (vs 3.6-rc1 for example)."

The rewrite that happened so far is to basically allow for improved features to come in the future, but just sets the groundwork for now. "At this point don't expect any exciting cool functionality, the work so far is merely a restructure to allow moving forward on a number of fronts in the future."

Ben Skeggs mentioned the "BIG changes to kernel module" on the Nouveau mailing list. The Nouveau Linux kernel Git repository his hosted at FreeDesktop.org.

Among the big work in this Nouveau driver re-write is porting all engines to using the Nouveau driver's new module engine format (this alone is ~14,000 lines of new code), moving code and headers around, a completely new implementation of "instmem", memory management changes, and a lot of new infrastructure. Below is the main commit that added over 4,000 lines of new code to provide new core infrastructure for the Nouveau DRM driver.
This commit provides most of the infrastructure to support a major overhaul of Nouveau's internals coming in the following commits. This work aims to take all the things we've learned over the last several years, and turn that into a cleaner architecture that's more maintainable going forward.

RAMHT and MM bits of the new core have been left out for the moment, and will be pulled in as I go through the process of porting the code to become either subdev or engine modules.

There are several main goals I wanted to achieve through this work:

-- Reduce complexity

The goal here was to make each component of the driver as independent as possible, which will ease maintainability and readability, and provide a good base for resetting locked up GPU units in the future.

-- Better tracking of GPU units that are required at any given time

This is for future PM work, we'll be able to tell exactly what parts of the GPU we need powered at any given point (etc).

-- Expose all available NVIDIA GPUs to the client

In order to support things such as multi-GPU channels, we want to be able to expose all the NVIDIA GPUs to the client over a single file descriptor so it can send a single push buffer to multiple GPUs.

-- Untangle the core hardware support code from the DRM implementation

This happened initially as an unexpected side-effect of developing the initial core infrastructure in userspace, but it turned into a goal of the whole project. Initial benefits will be the availablility of a number of userspace tools and tests using the same code as the driver itself, but will also be important as I look into some virtualisation ideas.
While this just puts down lots of new low-level code as opposed to feature commits, new Phoronix benchmarks of the latest Nouveau code will happen in the coming days to look out for any regressions.

About The Author
Michael Larabel is the principal author of Phoronix.com and founded the web-site in 2004 with a focus on enriching the Linux hardware experience and being the largest web-site devoted to Linux hardware reviews, particularly for products relevant to Linux gamers and enthusiasts but also commonly reviewing servers/workstations and embedded Linux devices. Michael has written more than 10,000 articles covering the state of Linux hardware support, Linux performance, graphics hardware drivers, and other topics. Michael is also the lead developer of the Phoronix Test Suite, Phoromatic, and OpenBenchmarking.org automated testing software. He can be followed via and or contacted via .
Latest Linux Hardware Reviews
  1. NVIDIA GeForce GTX 970 Offers Great Linux Performance
  2. CompuLab Intense-PC2: An Excellent, Fanless, Mini PC Powered By Intel's i7 Haswell
  3. From The Atom 330 To Haswell ULT: Intel Linux Performance Benchmarks
  4. AMD Radeon R9 285 Tonga Performance On Linux
Latest Linux Articles
  1. AMD Moves Forward With Unified Linux Driver Strategy, New Kernel Driver
  2. MSI: Update Your BIOS From The Linux Desktop
  3. NVIDIA vs. AMD 2D Linux Drivers: Catalyst Is Getting Quite Good At 2D
  4. 15-Way GPU Comparison With Mesa 10.3 + Linux 3.17
Latest Linux News
  1. Ubuntu 16.04 Might Be The Distribution's Last 32-Bit Release
  2. Imagination Releases Full ISA Documentation For PowerVR Rogue GPUs
  3. Features GNOME Developers Want In The Linux Kernel
  4. GTK+ Gains Experimental Overlay Scrollbars
  5. Phoronix Test Suite 5.4 M3 Is Another Hearty Update
  6. GParted 0.20 Improves Btrfs Support
  7. EXT4 In Linux 3.18 Has Clean-ups, Bug Fixes
  8. Emacs 24.4 Has Built-In Web Browser, Improved Multi-Monitor Support
  9. NVIDIA's NVPTX Support For GCC Is Close To Being Merged
  10. KDE's KWin On Wayland Begins Using Libinput
Latest Forum Discussions
  1. Users/Developers Threatening Fork Of Debian GNU/Linux
  2. HOPE: The Ease Of Python With The Speed Of C++
  3. Proof that strlcpy is un-needed
  4. Bye bye BSD, Hello Linux: A Sys Admin's Story
  5. Updated and Optimized Ubuntu Free Graphics Drivers
  6. NVIDIA Presents Its Driver Plans To Support Mir/Wayland & KMS On Linux
  7. AMD Is Restructuring Again, Losing 7% Of Employees
  8. Open-Source AMD Fusion E-350 Support Takes A Dive