SlideShare a Scribd company logo
1 of 30
Download to read offline
The Linux graphics stack, Optimus and the 
Nouveau driver 
Cooperative rendering across GPUs on Linux 
Martin Peres 
Nouveau developer 
PhD student at LaBRI 
X.Org Foundation board member 
September 26, 2014
Introduction to the Linux graphics stack Optimus Prime Nouveau Q&A 
Summary 
1 Introduction to the Linux graphics stack 
General overview 
Kernel space 
User space 
2 Optimus 
3 Prime 
4 Nouveau 
5 Q&A 
1 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau Q&A 
General overview of the Linux Graphics stack 
The graphics stack before 2005 
The X-Server provided everything: 
Modesetting (CRTC & plane management); 
2D/3D acceleration; 
Video rendering acceleration; 
Input management. 
The X-Server talked to the GPU directly, as root. 
The current graphics stack 
The X-Server got split into more than 200 components: 
Privileged operations moved to the kernel; 
2D drivers got put into dierent shared objects; 
3D acceleration got put in mesa; 
The list is too long (and boring) ;) 
2 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
by Shmuel Csaba Otto Traian; CC-BY-SA 4.0 intl; created 2013-08-24; last updated 2014-03-25 
3D-game engine 
Wayland compositor 
Mesa: APIs+DRI/Gallium3D driver 
libGL-mesa-swx11 (libGL) 
libGL-mesa-glx 
libOpenVG-mesa 
libGLES-mesa 
libEGL-mesa 
libEGL-mesa-drivers (Wayland) 
libGBM 
libGL-mesa-DRI (Modules) 
Applications 
Toolkits 
X-server (X.Org) 
X.Org Server display driver 
xserver-xorg-video-nouveau 
xserver-xorg-video-nvidia 
xserver-xorg-video-radeon 
libDRM-intel 
libDRM-radeon 
libDRM-nouveau 
libDRM-freedreno 
libwayland-client 
Wayland 1.5 
hardware specific 
Userspace interface to 
hardware specific 
direct rendering manager 
DRM Linux kernel 
CPU  registers  L1  L2  L3  L4  main memory 
GPU  registers  L1  L2 ( graphic memory) 
libDRM 
DDX-driver 
libX / libXCB 
Proprietary OpenGL 4.2 driver 
libGL-nvidia-glx 
libGL-fglrx-glx 
libGL 
Rendering APIs: 
OpenGL 
OpenGL|ES 
OpenVG 
X 11R7.8 
blob 
Display 
server 
framebuffer 
DIX driver 
hardware-specific 
KMS 
Kernel Mode Setting 
Wayland 
obsoletes 
2D drivers in 
the display server 
API: 
EGL 
API: 
EGL 
Window manager 
KWin 
Mutter 
Weston 
Enlightment 
KWin 
Compiz 
OpenBox 
Metacity 
Mutter 
Figure: General overview of the Linux graphics stack 
3 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
The kernel space 
Direct Rendering Manager (DRM) : The common code 
This common code provides: 
Kernel ModeSetting (KMS): CRTC  plane management; 
Video memory management via GEM (with a TTM backend?); 
Nodes with dierent capabilities (master or render nodes). 
DRM open source drivers 
i810/i915: Intel; 
nouveau: NVIDIA; 
radeon: AMD/ATI; 
vmwgfx: VMware; 
many SoC GPUs (armada, exynos, msm, omap, tegra, ...). 
4 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Architecture of the X-Server 
Client 
Pango 
Server 
DDX 
Acceleration Architectures 
DIX 
Event_Queue Input Drivers 
Hardware devices Extensions 
Cairo 
Toolkit 
Xlib or xcb OpenGL 
Dispatch Mesa 
Mouse Keyboard Render Xinput 
RandR GLX Gallium 
Video Drivers 
Display Acceleration_Video Acceleration_2D 
Pixman 
FrameBuffer 
Figure: General overview of the X-Server's internal architecture 
5 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Architecture of Mesa 
Applications 
Mesa 
Gallium 
State trackers 
drivers (compilers) 
Mesa Classics (simplified) 
X-Server 
xorg 
Wine 
Nine 
Weston 
EGL 
Xonotic 
Qt 
libgl 
OpenGL 
Gallium 
softpipe r600g r300g nvc0 
nv50 nv30 
GPU 
llvmpipe 
LLVM 
CPU 
intel radeon nouveau_vieux swrast 
(through 
libdrm) 
Figure: General overview of Mesa's internal architecture 
6 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Summary 
1 Introduction to the Linux graphics stack 
2 Optimus 
Introduction 
Turning the dGPU on/o 
Driving the right outputs 
How to share buers across drivers? 
3 Prime 
4 Nouveau 
5 QA 
7 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Great performance, great battery-life 
Optimus 
Laptops can be equipped with two GPUs; 
The Intel IGP is great for battery-life; 
NVIDIA's discrete GPU (dGPU) is great for performance; 
Dynamic switch between the 2: get the best of both worlds! 
Challenges 
When/How the dGPU should be turned on/o? 
Who drives the outputs? 
How to copy buers from one driver to another? 
How should we do application migration? 
How should we handle the HDMI sound card? 
8 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Turning the dGPU on/o 
How 
Optimus laptops have ACPI functions to do that; 
Two ways of calling them: 
bbswitch: Old kernel module for manual management; 
vgaswitcheroo: Manual or automatic power management. 
When: The case of vgaswitcheroo 
Turn o the dGPU when it has been idle for 5 seconds; 
Idle?: 
no graphics context allocated; 
no output is being used; 
no sound interface used (not done); 
no call to the drm driver has been made; 
9 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Handling the outputs : Hardware multiplexer 
Figure: Switchable graphics 
10 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Handling the outputs : Software multiplexer 
Figure: The real Optimus architecture 
11 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Sharing buers across drivers 
Cross-driver BO sharing : Challenges 
The memory representation for buers is dierent from 
hardware to hardware: 
pitch: number of pixels per row; 
tiling: technique that increases the spatial locality. 
Synchronising rendering across drivers. 
Solutions 
VirtualGL: Remote rendering solution. Redirects drawing 
commands to a distant GPU, read back the rendered frame; 
Primus: Same solution as VirtualGL except in a more 
lightweight fashion! 
DMA-Buf: A Linux-only solution that allows sharing buers 
between dierent GPUs without copies. 
12 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Sharing buers across drivers : VirtualGL 
13 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Sharing buers across drivers : DMA-Buf 
Driver roles 
Exporter: Being able to export a buer; 
User: Being able to import a buer. 
General overview 
No standardised memory allocation: It's up to the exporter; 
An arbitrary buer can be wrapped into a DMA buer; 
An fd can be returned to the userspace to reference this buer; 
The fd can be passed to another process; 
The fd can be mmapped and accessed by the CPU; 
The fd can be imported by any driver supporting the user role. 
14 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
dma_buf usage flow 
Video 
decoder 
Graphics 
stack 
dma_buf 
User 
Kernel 
1 
CMA 
(optional) 
2 
3 
4 
5 
6 
1) allocation (CMA usage is optional). 
2) dma_buf_export(): request the creation of a dma_buf for previously allocated memory. 
3) dma_buf_fd(): provides a fd to return to userspace. 
4) fd passed to video decoder. 
5) dma_buf_get(fd): takes ref and returns 'struct dma_buf'. 
6) dma_buf_attach() + dma_buf_map_attachment(): to get info for dma 
a) dev-dma_parms should be expanded to tell if receiving device needs contiguous 
memory or any other special requirements 
b) allocation of backing pages could be deferred by exporting driver until it is known if 
importing driver requires contiguous memory.. to make things a bit easier on systems 
without IOMMU 
15 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
How should we do application migration? 
Short answer 
We don't! 
Why? 
The context is hardware-dependent; 
The context can be HUGE (hundreds of MB); 
The best way is to ask the application to re-upload its 
context: GL ARB robustness. 
16 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Optimus : How windows does it 
Figure: The global hardware/software infrastructure 
17 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Summary 
1 Introduction to the Linux graphics stack 
2 Optimus 
3 Prime 
Introduction 
How to 
Demos 
4 Nouveau 
5 QA 
18 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Prime 
Prime 
Prime is the name for all the ustream open source technologies 
that make hybrid graphics possible: 
DMA-Buf: sharing buers across drivers (Linux 3.3); 
vgaswitcheroo: switching graphics (Linux 3.12); 
Cross-device fence mechanism: make a driver wait on another 
driver to complete a task (Linux 3.17); 
DMA-Buf synchronisation: Wait for rendering completion of a 
DMA-Buf before compositing to avoid tearing (Linux 3.19?). 
List of requirements 
running nouveau/radeon drm; 
running the nouveau/radeon ddx; 
19 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Prime: Simpli
ed how-to for Nouveau 
vgaswitcheroo 
# cd /sys/kernel/debug/vgaswitcheroo/ 
# cat switch 
# echo (DIGDjDDIS)  switch 
(Re)start your desktop environment. 
XRandr 
$ xrandr listproviders 
$ xrandr setproviderooadsink nouveau Intel 
This sets the order: Nouveau == ooad, Intel == default 
20 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Prime: Simpli
ed how-to for Nouveau 
Usage 
DRI PRIME=1 glxgears # Use the NVIDIA GPU 
DRI PRIME=0 glxgears # Use the Intel GPU 
glxgears # Use the Intel GPU 
Longer How-to for Nouveau 
http://nouveau.freedesktop.org/wiki/Optimus 
21 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Prime: Demos 
Current setup 
This is an Optimus laptop (Sandy Bridge + NVIDIA NVD9); 
All the outputs are connected to the Intel IGP. 
List of demos 
Selecting the GPU and checking with glxinfo; 
Performance dierence in glxgears; 
Video decoding with VDPAU on the NVIDIA GPU. 
22 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Summary 
1 Introduction to the Linux graphics stack 
2 Optimus 
3 Prime 
4 Nouveau 
Introduction 
Current work 
Involvement from NVIDIA 
5 QA 
23 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Nouveau: Introduction 
Nouveau: An Open Source Linux driver for NVIDIA GPUs 
Merged in Linux 2.6.33  left staging on Linux 3.4; 
Mostly developed by Red Hat and students. 
Current features 
Modesetting support for almost all NVIDIA GPUs; 
2D, 3D and video-rendering accel on NV04-; 
Video decoding accel on NV40-NV117 (non-free). 
24 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Nouveau: Current developments 
Current work 
Maxwell support: 
Released in two times (March then September); 
Modesetting: DONE; 
2D/3D support: MOSTLY DONE; 
Video decoding: TODO 
Open source
rmware: WIP 
Manual reclocking support: 
nv40-a3: crude support, disabled by default; 
nva3-ac: good chances of working; 
Fermi: crude support, disabled by default; 
Kepler: WIP, good chances of partial support; 
Maxwell: TODO 
Adding new OpenGL extensions: 
Everything is done up to Fermi; 
OpenGL 4 for the other GPUs. 
25 / 29
Introduction to the Linux graphics stack Optimus Prime Nouveau QA 
Involvement from NVIDIA 
NV 
1998(?): NVIDIA releases nv, a Linux OSS 2D driver; 
1998: Obfuscation commit, release only pre-processed source. 
Little hope of NVIDIA ever working again on an OSS driver 
It's so hard to write a graphics driver that open-sourcing it would 
not help [...] In addition, customers aren't asking for opensource 
drivers. 
Andrew Fear, NVIDIA software product manager, April 2006 
26 / 29

More Related Content

What's hot

Project meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewYu-Hsin Hung
 
LAS16-109: LAS16-109: The status quo and the future of 96Boards
LAS16-109: LAS16-109: The status quo and the future of 96BoardsLAS16-109: LAS16-109: The status quo and the future of 96Boards
LAS16-109: LAS16-109: The status quo and the future of 96BoardsLinaro
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconAnne Nicolas
 
ELC-NA 2020: War story - Using mainline linux for an Android TV bsp
ELC-NA 2020: War story - Using mainline linux for an Android TV bspELC-NA 2020: War story - Using mainline linux for an Android TV bsp
ELC-NA 2020: War story - Using mainline linux for an Android TV bspNeil Armstrong
 
LAS16-400K2: TianoCore – Open Source UEFI Community Update
LAS16-400K2: TianoCore – Open Source UEFI Community UpdateLAS16-400K2: TianoCore – Open Source UEFI Community Update
LAS16-400K2: TianoCore – Open Source UEFI Community UpdateLinaro
 
LAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from HellLAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from HellLinaro
 
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware WebinarAn Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware WebinarAMD Developer Central
 
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardKernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardAnne Nicolas
 
Kernel Recipes 2013 - Overview display in the Linux kernel
Kernel Recipes 2013 - Overview display in the Linux kernelKernel Recipes 2013 - Overview display in the Linux kernel
Kernel Recipes 2013 - Overview display in the Linux kernelAnne Nicolas
 
ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...
ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...
ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...Neil Armstrong
 
LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201Linaro
 
The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depthChris Simmonds
 
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans VerkuilKernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans VerkuilAnne Nicolas
 
Linux Conference Australia 2018 : Device Tree, past, present, future
Linux Conference Australia 2018 : Device Tree, past, present, futureLinux Conference Australia 2018 : Device Tree, past, present, future
Linux Conference Australia 2018 : Device Tree, past, present, futureNeil Armstrong
 
BKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and UpstreamingBKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and UpstreamingLinaro
 
ELC-E 2019 Device tree, past, present, future
ELC-E 2019 Device tree, past, present, futureELC-E 2019 Device tree, past, present, future
ELC-E 2019 Device tree, past, present, futureNeil Armstrong
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaAnne Nicolas
 
LAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLinaro
 

What's hot (20)

Project meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture OverviewProject meeting: Android Graphics Architecture Overview
Project meeting: Android Graphics Architecture Overview
 
LAS16-109: LAS16-109: The status quo and the future of 96Boards
LAS16-109: LAS16-109: The status quo and the future of 96BoardsLAS16-109: LAS16-109: The status quo and the future of 96Boards
LAS16-109: LAS16-109: The status quo and the future of 96Boards
 
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre SiliconEmbedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
Embedded Recipes 2019 - Linux on Open Source Hardware and Libre Silicon
 
ELC-NA 2020: War story - Using mainline linux for an Android TV bsp
ELC-NA 2020: War story - Using mainline linux for an Android TV bspELC-NA 2020: War story - Using mainline linux for an Android TV bsp
ELC-NA 2020: War story - Using mainline linux for an Android TV bsp
 
LAS16-400K2: TianoCore – Open Source UEFI Community Update
LAS16-400K2: TianoCore – Open Source UEFI Community UpdateLAS16-400K2: TianoCore – Open Source UEFI Community Update
LAS16-400K2: TianoCore – Open Source UEFI Community Update
 
LAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from HellLAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
LAS16-500: The Rise and Fall of Assembler and the VGIC from Hell
 
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware WebinarAn Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
An Introduction to OpenCL™ Programming with AMD GPUs - AMD & Acceleware Webinar
 
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime RipardKernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
Kernel Recipes 2017 - An introduction to the Linux DRM subsystem - Maxime Ripard
 
Kernel Recipes 2013 - Overview display in the Linux kernel
Kernel Recipes 2013 - Overview display in the Linux kernelKernel Recipes 2013 - Overview display in the Linux kernel
Kernel Recipes 2013 - Overview display in the Linux kernel
 
ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...
ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...
ELC-E 2016 Neil Armstrong - No, it's never too late to upstream your legacy l...
 
LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201LAS16-TR03: Upstreaming 201
LAS16-TR03: Upstreaming 201
 
The Android graphics path, in depth
The Android graphics path, in depthThe Android graphics path, in depth
The Android graphics path, in depth
 
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans VerkuilKernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
Kernel Recipes 2017 - HDMI CEC: Status Report - Hans Verkuil
 
Linux Conference Australia 2018 : Device Tree, past, present, future
Linux Conference Australia 2018 : Device Tree, past, present, futureLinux Conference Australia 2018 : Device Tree, past, present, future
Linux Conference Australia 2018 : Device Tree, past, present, future
 
BKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and UpstreamingBKK16-505 Kernel and Bootloader Consolidation and Upstreaming
BKK16-505 Kernel and Bootloader Consolidation and Upstreaming
 
Media SDK Webinar 2014
Media SDK Webinar 2014Media SDK Webinar 2014
Media SDK Webinar 2014
 
ELC-E 2019 Device tree, past, present, future
ELC-E 2019 Device tree, past, present, futureELC-E 2019 Device tree, past, present, future
ELC-E 2019 Device tree, past, present, future
 
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimediaEmbedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
Embedded Recipes 2019 - Pipewire a new foundation for embedded multimedia
 
DirectGMA on AMD’S FirePro™ GPUS
DirectGMA on AMD’S  FirePro™ GPUSDirectGMA on AMD’S  FirePro™ GPUS
DirectGMA on AMD’S FirePro™ GPUS
 
LAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMGLAS16-209: Finished and Upcoming Projects in LMG
LAS16-209: Finished and Upcoming Projects in LMG
 

Similar to Kernel Recipes 2014 - The Linux graphics stack and Nouveau driver

Memory Management in TIZEN - Samsung SW Platform Team
Memory Management in TIZEN - Samsung SW Platform TeamMemory Management in TIZEN - Samsung SW Platform Team
Memory Management in TIZEN - Samsung SW Platform TeamRyo Jin
 
Embedded Recipes 2018 - SoC+FPGA update in 2018 - Marek Vasut
Embedded Recipes 2018 - SoC+FPGA update in 2018 - Marek VasutEmbedded Recipes 2018 - SoC+FPGA update in 2018 - Marek Vasut
Embedded Recipes 2018 - SoC+FPGA update in 2018 - Marek VasutAnne Nicolas
 
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...Akihiro Hayashi
 
Introduction To The Beagleboard
Introduction To The BeagleboardIntroduction To The Beagleboard
Introduction To The BeagleboardNeHal VeRma
 
GPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStack
GPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStackGPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStack
GPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStackBrian Schott
 
The abcs of gpu
The abcs of gpuThe abcs of gpu
The abcs of gpuLiang Yan
 
Parallel Futures of a Game Engine (v2.0)
Parallel Futures of a Game Engine (v2.0)Parallel Futures of a Game Engine (v2.0)
Parallel Futures of a Game Engine (v2.0)Johan Andersson
 
Kernel Recipes 2016 - Upstream Kernel Graphics is (Finally) Winning
Kernel Recipes 2016 - Upstream Kernel Graphics is (Finally) WinningKernel Recipes 2016 - Upstream Kernel Graphics is (Finally) Winning
Kernel Recipes 2016 - Upstream Kernel Graphics is (Finally) WinningAnne Nicolas
 
Amd accelerated computing -ufrj
Amd   accelerated computing -ufrjAmd   accelerated computing -ufrj
Amd accelerated computing -ufrjRoberto Brandao
 
clCaffe*: Unleashing the Power of Intel Graphics for Deep Learning Acceleration
clCaffe*: Unleashing the Power of Intel Graphics for Deep Learning AccelerationclCaffe*: Unleashing the Power of Intel Graphics for Deep Learning Acceleration
clCaffe*: Unleashing the Power of Intel Graphics for Deep Learning AccelerationIntel® Software
 
Utilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmapUtilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmapGeorge Markomanolis
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialAnne Nicolas
 
Virtual Distro Dispatcher - A light-weight Desktop-as-a-Service solution
Virtual Distro Dispatcher - A light-weight Desktop-as-a-Service solutionVirtual Distro Dispatcher - A light-weight Desktop-as-a-Service solution
Virtual Distro Dispatcher - A light-weight Desktop-as-a-Service solutionFlavio Bertini
 
Stream Processing
Stream ProcessingStream Processing
Stream Processingarnamoy10
 

Similar to Kernel Recipes 2014 - The Linux graphics stack and Nouveau driver (20)

Memory Management in TIZEN - Samsung SW Platform Team
Memory Management in TIZEN - Samsung SW Platform TeamMemory Management in TIZEN - Samsung SW Platform Team
Memory Management in TIZEN - Samsung SW Platform Team
 
Embedded Recipes 2018 - SoC+FPGA update in 2018 - Marek Vasut
Embedded Recipes 2018 - SoC+FPGA update in 2018 - Marek VasutEmbedded Recipes 2018 - SoC+FPGA update in 2018 - Marek Vasut
Embedded Recipes 2018 - SoC+FPGA update in 2018 - Marek Vasut
 
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
Exploring Compiler Optimization Opportunities for the OpenMP 4.x Accelerator...
 
Introduction To The Beagleboard
Introduction To The BeagleboardIntroduction To The Beagleboard
Introduction To The Beagleboard
 
GPU Acceleration for Containers on Intel Processor Graphics
GPU Acceleration for Containers on Intel Processor GraphicsGPU Acceleration for Containers on Intel Processor Graphics
GPU Acceleration for Containers on Intel Processor Graphics
 
GPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStack
GPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStackGPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStack
GPU Accelerated Virtual Desktop Infrastructure (VDI) on OpenStack
 
The abcs of gpu
The abcs of gpuThe abcs of gpu
The abcs of gpu
 
Parallel Futures of a Game Engine (v2.0)
Parallel Futures of a Game Engine (v2.0)Parallel Futures of a Game Engine (v2.0)
Parallel Futures of a Game Engine (v2.0)
 
Kernel Recipes 2016 - Upstream Kernel Graphics is (Finally) Winning
Kernel Recipes 2016 - Upstream Kernel Graphics is (Finally) WinningKernel Recipes 2016 - Upstream Kernel Graphics is (Finally) Winning
Kernel Recipes 2016 - Upstream Kernel Graphics is (Finally) Winning
 
DRIVE PX 2
DRIVE PX 2DRIVE PX 2
DRIVE PX 2
 
Amd accelerated computing -ufrj
Amd   accelerated computing -ufrjAmd   accelerated computing -ufrj
Amd accelerated computing -ufrj
 
Cuda intro
Cuda introCuda intro
Cuda intro
 
GPU Programming with Java
GPU Programming with JavaGPU Programming with Java
GPU Programming with Java
 
AM37x EVM
AM37x EVM AM37x EVM
AM37x EVM
 
clCaffe*: Unleashing the Power of Intel Graphics for Deep Learning Acceleration
clCaffe*: Unleashing the Power of Intel Graphics for Deep Learning AccelerationclCaffe*: Unleashing the Power of Intel Graphics for Deep Learning Acceleration
clCaffe*: Unleashing the Power of Intel Graphics for Deep Learning Acceleration
 
Utilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmapUtilizing AMD GPUs: Tuning, programming models, and roadmap
Utilizing AMD GPUs: Tuning, programming models, and roadmap
 
Embedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less specialEmbedded Recipes 2019 - Making embedded graphics less special
Embedded Recipes 2019 - Making embedded graphics less special
 
Fedora15 lovelock-pres
Fedora15 lovelock-presFedora15 lovelock-pres
Fedora15 lovelock-pres
 
Virtual Distro Dispatcher - A light-weight Desktop-as-a-Service solution
Virtual Distro Dispatcher - A light-weight Desktop-as-a-Service solutionVirtual Distro Dispatcher - A light-weight Desktop-as-a-Service solution
Virtual Distro Dispatcher - A light-weight Desktop-as-a-Service solution
 
Stream Processing
Stream ProcessingStream Processing
Stream Processing
 

More from Anne Nicolas

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstAnne Nicolas
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIAnne Nicolas
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelAnne Nicolas
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyAnne Nicolas
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureAnne Nicolas
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Anne Nicolas
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataAnne Nicolas
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Anne Nicolas
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxAnne Nicolas
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureAnne Nicolas
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayAnne Nicolas
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerAnne Nicolas
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationAnne Nicolas
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingAnne Nicolas
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedAnne Nicolas
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPAnne Nicolas
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Anne Nicolas
 
Kernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyKernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyAnne Nicolas
 
Kernel Recipes 2019 - CVEs are dead, long live the CVE!
Kernel Recipes 2019 - CVEs are dead, long live the CVE!Kernel Recipes 2019 - CVEs are dead, long live the CVE!
Kernel Recipes 2019 - CVEs are dead, long live the CVE!Anne Nicolas
 
Kernel Recipes 2019 - XDP closer integration with network stack
Kernel Recipes 2019 -  XDP closer integration with network stackKernel Recipes 2019 -  XDP closer integration with network stack
Kernel Recipes 2019 - XDP closer integration with network stackAnne Nicolas
 

More from Anne Nicolas (20)

Kernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream firstKernel Recipes 2019 - Driving the industry toward upstream first
Kernel Recipes 2019 - Driving the industry toward upstream first
 
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMIKernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
Kernel Recipes 2019 - No NMI? No Problem! – Implementing Arm64 Pseudo-NMI
 
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernelKernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
Kernel Recipes 2019 - Hunting and fixing bugs all over the Linux kernel
 
Kernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are moneyKernel Recipes 2019 - Metrics are money
Kernel Recipes 2019 - Metrics are money
 
Kernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and futureKernel Recipes 2019 - Kernel documentation: past, present, and future
Kernel Recipes 2019 - Kernel documentation: past, present, and future
 
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
Embedded Recipes 2019 - Knowing your ARM from your ARSE: wading through the t...
 
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary dataKernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
Kernel Recipes 2019 - GNU poke, an extensible editor for structured binary data
 
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
Kernel Recipes 2019 - Analyzing changes to the binary interface exposed by th...
 
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and BareboxEmbedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
Embedded Recipes 2019 - Remote update adventures with RAUC, Yocto and Barebox
 
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) pictureEmbedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
Embedded Recipes 2019 - From maintaining I2C to the big (embedded) picture
 
Embedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops wayEmbedded Recipes 2019 - Testing firmware the devops way
Embedded Recipes 2019 - Testing firmware the devops way
 
Embedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmakerEmbedded Recipes 2019 - Herd your socs become a matchmaker
Embedded Recipes 2019 - Herd your socs become a matchmaker
 
Embedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integrationEmbedded Recipes 2019 - LLVM / Clang integration
Embedded Recipes 2019 - LLVM / Clang integration
 
Embedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debuggingEmbedded Recipes 2019 - Introduction to JTAG debugging
Embedded Recipes 2019 - Introduction to JTAG debugging
 
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all startedKernel Recipes 2019 - ftrace: Where modifying a running kernel all started
Kernel Recipes 2019 - ftrace: Where modifying a running kernel all started
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
 
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
Kernel Recipes 2019 - Marvels of Memory Auto-configuration (SPD)
 
Kernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easyKernel Recipes 2019 - Formal modeling made easy
Kernel Recipes 2019 - Formal modeling made easy
 
Kernel Recipes 2019 - CVEs are dead, long live the CVE!
Kernel Recipes 2019 - CVEs are dead, long live the CVE!Kernel Recipes 2019 - CVEs are dead, long live the CVE!
Kernel Recipes 2019 - CVEs are dead, long live the CVE!
 
Kernel Recipes 2019 - XDP closer integration with network stack
Kernel Recipes 2019 -  XDP closer integration with network stackKernel Recipes 2019 -  XDP closer integration with network stack
Kernel Recipes 2019 - XDP closer integration with network stack
 

Recently uploaded

A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 

Recently uploaded (20)

A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 

Kernel Recipes 2014 - The Linux graphics stack and Nouveau driver

  • 1. The Linux graphics stack, Optimus and the Nouveau driver Cooperative rendering across GPUs on Linux Martin Peres Nouveau developer PhD student at LaBRI X.Org Foundation board member September 26, 2014
  • 2. Introduction to the Linux graphics stack Optimus Prime Nouveau Q&A Summary 1 Introduction to the Linux graphics stack General overview Kernel space User space 2 Optimus 3 Prime 4 Nouveau 5 Q&A 1 / 29
  • 3. Introduction to the Linux graphics stack Optimus Prime Nouveau Q&A General overview of the Linux Graphics stack The graphics stack before 2005 The X-Server provided everything: Modesetting (CRTC & plane management); 2D/3D acceleration; Video rendering acceleration; Input management. The X-Server talked to the GPU directly, as root. The current graphics stack The X-Server got split into more than 200 components: Privileged operations moved to the kernel; 2D drivers got put into dierent shared objects; 3D acceleration got put in mesa; The list is too long (and boring) ;) 2 / 29
  • 4. Introduction to the Linux graphics stack Optimus Prime Nouveau QA by Shmuel Csaba Otto Traian; CC-BY-SA 4.0 intl; created 2013-08-24; last updated 2014-03-25 3D-game engine Wayland compositor Mesa: APIs+DRI/Gallium3D driver libGL-mesa-swx11 (libGL) libGL-mesa-glx libOpenVG-mesa libGLES-mesa libEGL-mesa libEGL-mesa-drivers (Wayland) libGBM libGL-mesa-DRI (Modules) Applications Toolkits X-server (X.Org) X.Org Server display driver xserver-xorg-video-nouveau xserver-xorg-video-nvidia xserver-xorg-video-radeon libDRM-intel libDRM-radeon libDRM-nouveau libDRM-freedreno libwayland-client Wayland 1.5 hardware specific Userspace interface to hardware specific direct rendering manager DRM Linux kernel CPU registers L1 L2 L3 L4 main memory GPU registers L1 L2 ( graphic memory) libDRM DDX-driver libX / libXCB Proprietary OpenGL 4.2 driver libGL-nvidia-glx libGL-fglrx-glx libGL Rendering APIs: OpenGL OpenGL|ES OpenVG X 11R7.8 blob Display server framebuffer DIX driver hardware-specific KMS Kernel Mode Setting Wayland obsoletes 2D drivers in the display server API: EGL API: EGL Window manager KWin Mutter Weston Enlightment KWin Compiz OpenBox Metacity Mutter Figure: General overview of the Linux graphics stack 3 / 29
  • 5. Introduction to the Linux graphics stack Optimus Prime Nouveau QA The kernel space Direct Rendering Manager (DRM) : The common code This common code provides: Kernel ModeSetting (KMS): CRTC plane management; Video memory management via GEM (with a TTM backend?); Nodes with dierent capabilities (master or render nodes). DRM open source drivers i810/i915: Intel; nouveau: NVIDIA; radeon: AMD/ATI; vmwgfx: VMware; many SoC GPUs (armada, exynos, msm, omap, tegra, ...). 4 / 29
  • 6. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Architecture of the X-Server Client Pango Server DDX Acceleration Architectures DIX Event_Queue Input Drivers Hardware devices Extensions Cairo Toolkit Xlib or xcb OpenGL Dispatch Mesa Mouse Keyboard Render Xinput RandR GLX Gallium Video Drivers Display Acceleration_Video Acceleration_2D Pixman FrameBuffer Figure: General overview of the X-Server's internal architecture 5 / 29
  • 7. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Architecture of Mesa Applications Mesa Gallium State trackers drivers (compilers) Mesa Classics (simplified) X-Server xorg Wine Nine Weston EGL Xonotic Qt libgl OpenGL Gallium softpipe r600g r300g nvc0 nv50 nv30 GPU llvmpipe LLVM CPU intel radeon nouveau_vieux swrast (through libdrm) Figure: General overview of Mesa's internal architecture 6 / 29
  • 8. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Summary 1 Introduction to the Linux graphics stack 2 Optimus Introduction Turning the dGPU on/o Driving the right outputs How to share buers across drivers? 3 Prime 4 Nouveau 5 QA 7 / 29
  • 9. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Great performance, great battery-life Optimus Laptops can be equipped with two GPUs; The Intel IGP is great for battery-life; NVIDIA's discrete GPU (dGPU) is great for performance; Dynamic switch between the 2: get the best of both worlds! Challenges When/How the dGPU should be turned on/o? Who drives the outputs? How to copy buers from one driver to another? How should we do application migration? How should we handle the HDMI sound card? 8 / 29
  • 10. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Turning the dGPU on/o How Optimus laptops have ACPI functions to do that; Two ways of calling them: bbswitch: Old kernel module for manual management; vgaswitcheroo: Manual or automatic power management. When: The case of vgaswitcheroo Turn o the dGPU when it has been idle for 5 seconds; Idle?: no graphics context allocated; no output is being used; no sound interface used (not done); no call to the drm driver has been made; 9 / 29
  • 11. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Handling the outputs : Hardware multiplexer Figure: Switchable graphics 10 / 29
  • 12. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Handling the outputs : Software multiplexer Figure: The real Optimus architecture 11 / 29
  • 13. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Sharing buers across drivers Cross-driver BO sharing : Challenges The memory representation for buers is dierent from hardware to hardware: pitch: number of pixels per row; tiling: technique that increases the spatial locality. Synchronising rendering across drivers. Solutions VirtualGL: Remote rendering solution. Redirects drawing commands to a distant GPU, read back the rendered frame; Primus: Same solution as VirtualGL except in a more lightweight fashion! DMA-Buf: A Linux-only solution that allows sharing buers between dierent GPUs without copies. 12 / 29
  • 14. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Sharing buers across drivers : VirtualGL 13 / 29
  • 15. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Sharing buers across drivers : DMA-Buf Driver roles Exporter: Being able to export a buer; User: Being able to import a buer. General overview No standardised memory allocation: It's up to the exporter; An arbitrary buer can be wrapped into a DMA buer; An fd can be returned to the userspace to reference this buer; The fd can be passed to another process; The fd can be mmapped and accessed by the CPU; The fd can be imported by any driver supporting the user role. 14 / 29
  • 16. Introduction to the Linux graphics stack Optimus Prime Nouveau QA dma_buf usage flow Video decoder Graphics stack dma_buf User Kernel 1 CMA (optional) 2 3 4 5 6 1) allocation (CMA usage is optional). 2) dma_buf_export(): request the creation of a dma_buf for previously allocated memory. 3) dma_buf_fd(): provides a fd to return to userspace. 4) fd passed to video decoder. 5) dma_buf_get(fd): takes ref and returns 'struct dma_buf'. 6) dma_buf_attach() + dma_buf_map_attachment(): to get info for dma a) dev-dma_parms should be expanded to tell if receiving device needs contiguous memory or any other special requirements b) allocation of backing pages could be deferred by exporting driver until it is known if importing driver requires contiguous memory.. to make things a bit easier on systems without IOMMU 15 / 29
  • 17. Introduction to the Linux graphics stack Optimus Prime Nouveau QA How should we do application migration? Short answer We don't! Why? The context is hardware-dependent; The context can be HUGE (hundreds of MB); The best way is to ask the application to re-upload its context: GL ARB robustness. 16 / 29
  • 18. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Optimus : How windows does it Figure: The global hardware/software infrastructure 17 / 29
  • 19. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Summary 1 Introduction to the Linux graphics stack 2 Optimus 3 Prime Introduction How to Demos 4 Nouveau 5 QA 18 / 29
  • 20. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Prime Prime Prime is the name for all the ustream open source technologies that make hybrid graphics possible: DMA-Buf: sharing buers across drivers (Linux 3.3); vgaswitcheroo: switching graphics (Linux 3.12); Cross-device fence mechanism: make a driver wait on another driver to complete a task (Linux 3.17); DMA-Buf synchronisation: Wait for rendering completion of a DMA-Buf before compositing to avoid tearing (Linux 3.19?). List of requirements running nouveau/radeon drm; running the nouveau/radeon ddx; 19 / 29
  • 21. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Prime: Simpli
  • 22. ed how-to for Nouveau vgaswitcheroo # cd /sys/kernel/debug/vgaswitcheroo/ # cat switch # echo (DIGDjDDIS) switch (Re)start your desktop environment. XRandr $ xrandr listproviders $ xrandr setproviderooadsink nouveau Intel This sets the order: Nouveau == ooad, Intel == default 20 / 29
  • 23. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Prime: Simpli
  • 24. ed how-to for Nouveau Usage DRI PRIME=1 glxgears # Use the NVIDIA GPU DRI PRIME=0 glxgears # Use the Intel GPU glxgears # Use the Intel GPU Longer How-to for Nouveau http://nouveau.freedesktop.org/wiki/Optimus 21 / 29
  • 25. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Prime: Demos Current setup This is an Optimus laptop (Sandy Bridge + NVIDIA NVD9); All the outputs are connected to the Intel IGP. List of demos Selecting the GPU and checking with glxinfo; Performance dierence in glxgears; Video decoding with VDPAU on the NVIDIA GPU. 22 / 29
  • 26. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Summary 1 Introduction to the Linux graphics stack 2 Optimus 3 Prime 4 Nouveau Introduction Current work Involvement from NVIDIA 5 QA 23 / 29
  • 27. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Nouveau: Introduction Nouveau: An Open Source Linux driver for NVIDIA GPUs Merged in Linux 2.6.33 left staging on Linux 3.4; Mostly developed by Red Hat and students. Current features Modesetting support for almost all NVIDIA GPUs; 2D, 3D and video-rendering accel on NV04-; Video decoding accel on NV40-NV117 (non-free). 24 / 29
  • 28. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Nouveau: Current developments Current work Maxwell support: Released in two times (March then September); Modesetting: DONE; 2D/3D support: MOSTLY DONE; Video decoding: TODO Open source
  • 29. rmware: WIP Manual reclocking support: nv40-a3: crude support, disabled by default; nva3-ac: good chances of working; Fermi: crude support, disabled by default; Kepler: WIP, good chances of partial support; Maxwell: TODO Adding new OpenGL extensions: Everything is done up to Fermi; OpenGL 4 for the other GPUs. 25 / 29
  • 30. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Involvement from NVIDIA NV 1998(?): NVIDIA releases nv, a Linux OSS 2D driver; 1998: Obfuscation commit, release only pre-processed source. Little hope of NVIDIA ever working again on an OSS driver It's so hard to write a graphics driver that open-sourcing it would not help [...] In addition, customers aren't asking for opensource drivers. Andrew Fear, NVIDIA software product manager, April 2006 26 / 29
  • 31. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Short history of Nouveau Nouveau 2005: Stephane Marchesin improves nv and works on 3D 2008: Open Arena runs on nv40 2009: KMS driver based on TTM for memory management 2010: Merged in Linux 2.6.33 2010: Nv is deprecated by NVIDIA, use VESA. A new hope from NVIDIA September 2013: NVIDIA releases some vbios documentation; January 2014: NVIDIA starts adding support for their Tegra K1 in Nouveau, as requested by its clients; Full support for the Tegra K1 expected by the end of 2014. 27 / 29
  • 32. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Summary 1 Introduction to the Linux graphics stack 2 Optimus 3 Prime 4 Nouveau 5 QA 28 / 29
  • 33. Introduction to the Linux graphics stack Optimus Prime Nouveau QA Questions? Thank you for listening! Questions? Martin Peres: martin.peres@free.fr 29 / 29