Graphics Execution Manager

From Wikipedia, the free encyclopedia
Jump to: navigation, search
Rendering calculations are outsourced over OpenGL to the GPU to be done in real-time. DRI-components like GEM regulate access and do book-keeping. It all seems superfluous when only a fullscreen 3D game is running, but hardware access is a fundamental kernel task.

The Graphics Execution Manager (GEM) is a computer software system developed by Intel to do memory management for device drivers for graphics chipsets. GEM is part of the Direct Rendering Manager.

GEM manages graphics memory (which means dealing with non-uniform memory access (NUMA) on modern graphics chipsets) and controls the execution context for graphics-related code. They allow multiple applications to share graphics device resources without the need to store and restore the entire graphics card state between changes. GEM ensures conflict-free sharing of data between applications by managing the memory synchronization. It uses many existing kernel subsystems for its operations and hence has a very modest code size.

GEM is included in the Linux kernel from version 2.6.28 for use by drivers for Intel graphics hardware.[1] Graphics device drivers for AMD's Radeon and VIA S3 chipsets now use a "GEM-ified TTM manager", which provides the same interface as GEM but uses Translation Table Maps (TTM) internally.[2][3] GEM is also designed to be compatible with "*BSD" kernels.

GEM's API is documented in the original announcement of GEM.[4]


GEM was developed by Intel, starting in May 2008, as a minimalist, easy-to-use alternative to the Translation Table Maps memory manager developed by Tungsten Graphics.[1][5]

However, GEM caused problems for non-Intel developers and collided with current X.Org Server development (notably DRI2 and new EXA acceleration architecture), leading some developers to use a "GEM-ified TTM manager".[2]

DRI2 introduced a technique called Global GEM Handlers, this has some serious security implications and is going to be replaced in DRI3 with a passing of DMA_BUF file descriptors that point to GEM objects instead.[6]

Software architecture[edit]

The role of KMS (Kernel mode-setting), Linux example
The Linux graphic stack
Illustrates the Linux graphics stack current as of 2013-08-24
Scheme: Humane-machine_interaction
evdev is to the INPUT what the GEM is to the OUTPUT. Many applications require the entire loop (INPUT-PROCESSING-OUPUT to have minimal latency
The place of certain Linux kernel modules
evdev is the Linux kernel module that receives data from various Input devices such as Keyboard, Mouse, Touch-Pad, etc. The data is passed to the Display server (e.g. the X.Org Server or some Wayland compositor only to be passed further to the wayland respectively X client. Some applications require a minimal latency

See also[edit]


External links[edit]