直接渲染管理器

直接渲染管理器(英語:Direct Rendering Manager,通常缩写为DRM ) 是Linux 内核的一个子系统,负责与现代显卡GPU接口。 DRM 向用户空间公开了API ,程序可以使用该 API 向 GPU 发送命令和数据并执行配置显示器模式设置等操作。 DRM 最初是作为X Server直接渲染基础设施[1]内核空间组件开发的,但从那时起,它已被其他图形堆栈替代方案(例如Wayland)以及独立应用程序和库(例如SDL2Kodi)使用。

用户空间程序可以使用DRM API来命令GPU进行硬件加速的3D渲染和视频解码,以及GPGPU计算

概述

[编辑]

Linux 内核已经有一个名为fbdev的API ,用于管理图形适配器帧缓冲区[2] ,但它无法满足现代 GPU 的 3D 加速需求。此类设备通常需要在专用的显存中设置和管理命令队列,并将命令分派到 GPU,并且还需要管理该内存中的缓冲区和可用空间。 [3]最初,用户空间程序(例如X Server)直接管理这些资源,但它们通常假定它们是唯一访问这些资源的程序。当两个或多个程序试图同时控制同一硬件并以自己的方式配置其资源时,大多数情况下都会导致灾难性的后果。 [3]

没有 DRM 的情况下访问显卡
没有 DRM 的情况
有 DRM 的情况下访问显卡
有 DRM 的情况
DRM允许多个程序同时访问3D显卡,避免冲突

DRM 旨在允许多个程序协作使用视频硬件资源。 [4] DRM 获得对 GPU 的独占访问权限,并负责初始化和维护命令队列、内存和任何其他硬件资源。希望使用 GPU 的程序向 DRM 发送请求,DRM 充当仲裁者并避免冲突。

多年来,DRM 的范围不断扩大,涵盖了以前由用户空间程序处理的更多功能,例如帧缓冲区管理和模式设置、内存共享对象和内存同步。 [5] [6]其中一些扩展被赋予了特定的名称,例如图形执行管理器(GEM)或内核模式设置(KMS),并且当它们提供的功能被特别提及时,术语将占主导地位。但它们实际上是整个内核 DRM 子系统的一部分。

在计算机中包含双 GPU(一个独立 GPU 和一个集成 GPU )的趋势导致了GPU 切换等新问题,这些问题也需要在 DRM 层解决。为了匹配Nvidia Optimus技术,DRM提供了GPU卸载能力,称为PRIME。 [7]

另见

[编辑]

参考

[编辑]
  1. ^ Linux kernel/drivers/gpu/drm/README.drm. kernel.org. [2014-02-26]. (原始内容存档于2014-02-26). 
  2. ^ Uytterhoeven, Geert. The Frame Buffer Device. Kernel.org. [28 January 2015]. (原始内容存档于2022-12-10). 
  3. ^ 3.0 3.1 White, Thomas. How DRI and DRM Work. [22 July 2014]. (原始内容存档于2023-05-25). 
  4. ^ Faith, Rickard E. The Direct Rendering Manager: Kernel Support for the Direct Rendering Infrastructure. 11 May 1999 [12 May 2016]. (原始内容存档于2016-05-24). 
  5. ^ Corbet, Jonathan. Memory management for graphics processors. LWN.net. 6 November 2007 [23 July 2014]. (原始内容存档于2023-04-12). 
  6. ^ Packard, Keith; Anholt, Eric. GEM - the Graphics Execution Manager. dri-devel mailing list. 13 May 2008 [23 July 2014]. (原始内容存档于2023-04-09). 
  7. ^ Airlie, Dave. GPU offloading - PRIME - proof of concept. 12 March 2010 [10 February 2015]. (原始内容存档于10 February 2015). 



外部链接

[编辑]