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.

Latest Linux Hardware Reviews
  1. Mini-Box M350: A Simple, Affordable Mini-ITX Case
  2. Overclocking The AMD AM1 Athlon & Sempron APUs
  3. AMD Athlon 5350 / 5150 & Sempron 3850 / 2650
  4. Upgraded Kernel & Mesa Yield A Big Boost For Athlon R3 Graphics
Latest Linux Articles
  1. Ubuntu 12.04.4 vs. 13.10 vs. 14.04 LTS Desktop Benchmarks
  2. AMD OpenCL Performance With AM1 Kabini APUs
  3. A Quick Look At GCC 4.9 vs. LLVM Clang 3.5
  4. Are AMD Athlon/Sempron APUs Fast Enough For Steam On Linux?
Latest Linux News
  1. Ubuntu 14.04 LTS "Trusty Tahr" Officially Released
  2. Ubuntu 12.04 LTS vs. 14.04 LTS Server Benchmarks
  3. QEMU 2.0 Released With ARM, x86 Enhancements
  4. Running The Unity 8 Preview Session On Ubuntu 14.04 LTS
  5. R600 Gallium3D Disables LLVM Back-End By Default
  6. Fedora 21 Gets GNOME 3.12, PHP 5.6, Mono 3.4
  7. Fedora Workstation Is Making Me Quite Excited
  8. Maynard: A Lightweight Wayland Desktop
  9. Chromium Browser Going Through Growing Pains In Ubuntu 14.04
  10. KDE 4.13 Is Being Released Today With New Features
  11. Trying Out Radeon R9 290 Graphics On Open-Source
  12. Intel Broadwell GT3 Graphics Have Dual BSD Rings
Latest Forum Discussions
  1. Updated and Optimized Ubuntu Free Graphics Drivers
  2. The GNOME Foundation Is Running Short On Money
  3. After Jack Keane, RuseSoft will briing Ankh 3 to Linux through Desura
  4. Suspected PHP Proxy Issue
  5. Linux Kernel Developers Fed Up With Ridiculous Bugs In Systemd
  6. Change installation destination from home directory
  7. Bye bye BSD, Hello Linux: A Sys Admin's Story
  8. New tool for undervolt/overclock AMD K8L and K10 processors