1. 简单百科
  2. nouveau

nouveau

这是一个旨在为英伟达的GPU建立高质量的,免费自由的开源驱动项目,nouveau"[nuvo]"与new谐音,是Linux KMS驱动的一部分,最新的版本在Linux内核中支持Nvidia的帕斯卡架构。

软件介绍

nouveau(英语:/nuːˈvoʊ/)是一个自由开放源代码的图形设备驱动程序,主要为Nvidia的视频卡和Tegra系列SoCs编写,由独立软件工程师开发,部分Nvidia员工也提供了帮助。该项目的目标是通过逆向工程英伟达的专有Linux驱动程序来创建开源驱动程序。它由X.Org基金会管理,由freedesktop.org托管,并作为Mesa 3D的一部分进行分发。该项目最初基于仅支持2D的免费开源“nv”驱动程序,后因该驱动程序被认为存在混淆而发展出nouveau。nouveau根据MIT许可证授权。

软件架构

nouveau是一种Gallium3D风格的设备驱动程序,建立在Direct Rendering Infrastructure(DRI)之上。它由两个内核组件DRM和KMS驱动程序以及用户空间组件libDRM和Mesa 3D组成。nouveau旨在支持所有英伟达微架构,包括Tesla、Fermi、Kepler、麦克斯威(上海)商贸有限公司,并在1.0.13版本中支持Pascal,在1.0.15版本中支持Volta,1.0.16版本增加了对Turing的支持。

重新时钟

由于缺乏Nvidia GPU的文档,nouveau在最初缺乏重新时钟的能力,导致性能损失。2014年6月,nouveau添加了初始的重新时钟支持。通过1.0.14版本,Pascal支持达到了Maxwell 2的水平。在1.0.15版本中,为GTX 970 4GB添加了一个补丁,并加速了Pascal到Maxwell 2级别。

工具

nouveau的开发人员使用清洁室逆向工程来获取编写nouveau所需的数据。该项目使用了几个自制程序进行逆向工程,例如MmioTrace、REnouveau和Valgrind MMT。

REnouveau

REnouveau是一个用于收集nouveau逆向工程工作数据的程序,它通过复制当前的图形卡MMIO寄存器空间,绘制一些图形并再次复制MMIO,并将差异输出到文本文件。它运行多个不同的测试,然后用户将计算机的tar.bz2存档并通过电子邮件提交,供开发人员分析。

支持的接口

只有内核可以直接访问硬件,包括显卡。最终用户软件透过多种为特定功能所编写的应用程序接口访问。Nouveau被以Gallium3D风格驱动程序的方式编写,这就意味着它与其他Gallium3D驱动程序共享大多数的代码。多数此种共享代码都在Mesa 3D中可看到,并由各Linux发行版进行散布。

渲染API

Mesa 3D及其包含的驱动程序支持多种渲染接口,包括OpenGL和Vulkan。nouveau通过实验性的NVK驱动程序支持一些Vulkan API。

Direct3D

Direct3D第9版的自由及开放源代码实做在Mesa 3D可看到。它可以被nouveau所使用。但任何使用Direct3D的软件都是为Windows所编写的,所以这个软件只能在Linux上与Wine一起使用。

OpenGL

数据和指令被发送到 GPU 进行处理。呈现的结果不会发送回主内存。相反,它们存储在帧缓冲区中。帧缓冲区的内容随后被发送到显示控制器。

渲染接口 OpenGL 由 Khronos Group 开发。此 API 的实现是 英伟达 驱动程序和 AMD 专有的“Catalyst”的一部分。另一个实现是由自由软件爱好者编写的,比如Brian Paul或英特尔,并在Mesa 3D中进行协调。作为 Gallium3D 类型的驱动程序,nouveau 只需要稍作调整即可使用此实现。

Vulkan

截至2023年12月,Nouveau 通过实验性 NVK 驱动程序提供了一些 Vulkan API 支持。

视频加速

Mesa 3D支持多重呈现界面,所有已设计好的用户空间程序,像是GStreamer等程序都可以访问相对应的SIP块。也可以使用为了这个目的设计的电子电路,虽然这样做会相对于使用PureVideo来说消耗更多的电量。nouveau 支持 PureVideo,并通过 VDPAU 和部分通过 XvMC 提供对 PureVideo 的访问。nouveau 不支持 英伟达 NVENC。

计算API

OpenCL

在梅萨,GalliumCompute 也是 Nvidia 的主要项目,但只有 AMD 部分接近 OpenCL 1.0、1.1 和 1.2 的测试版。

CUDA

nouveau 不支持 CUDA。

通过 Coriander 项目,可以在 OpenCL 1.2 中转换 CUDA 代码

GPU系统处理器

英伟达猎鹰

大约在 2006 年,Nvidia 将 FALCON(FAst Logic CONtroller)引入其 GPU。

诺如病毒RISCV

在 2016 年 7 月的第 4 届 RISC-V 研讨会上,英伟达 员工介绍了他们用基于 RISC-V 指令集的新专有定制设计取代 FALCON 的计划。

发展历史

2005年,Stéphane Marchesin在“nv”驱动器上推出了一系列补丁,并于2006年2月在FOSDEM活动上正式宣布。

2007年, Linux.conf.au,nouveau的第一次现场演示。2010年,nouveau在2.6.33版本的Linux内核中被接受为实验性驱动程序。2012年3月26日,nouveau驱动程序被标记为稳定版,并从Linux 3.4的暂存区升级。Nouveau 在 Linux 3.7 中进行了一次重大的内部架构改革。

nouveau 最初使用 Mesa 3D 的直接渲染基础设施 (DRI) 来渲染 3D 计算机图形,这允许直接从 3D 应用程序使用图形处理单元 (GPU) 加速 3D 绘图;但在 2008 年 2 月,DRI 支持工作停止并转向新的 Gallium3D。

2013 年 9 月23日, 英伟达 公开宣布,他们将发布一些关于其 GPU 的文档,旨在解决影响 NVIDIA GPU 开箱即用可用性的领域。

截至 2014 年 1 月 31 日,Nvidia 的 Alexandre Courbot 发布了一个广泛的补丁集,增加了对 GK20A (Tegra K1) 的初始支持。

截至 2016 年 7 月 9 日,Red Hat 员工 Ben Skeggs 提交了一个补丁,该补丁在 Linux 内核中添加了对 GeForce GTX 1070 和 GeForce GTX 1080 品牌显卡上基于 Pascal 的 GP104 芯片的支持。

2016年的情况和未来的工作于XDC2016年介绍。FOSDEM上显示了OpenCL中新工作的状态。

2019 年,英伟达 发布了一些关于其 Kepler、麦克斯威(上海)商贸有限公司、Pascal 和 Volta 芯片组的文档。

软件采用

nouveau驱动程序及其在Mesa中的3D对应物已被许多Linux发行版(包括Fedora 11、openSUSE 11.3、Ubuntu 10.04和Debian)用作Nvidia卡的默认开源驱动程序。compiz建议使用nouveau而不是Nvidia专有驱动程序。2014年6月,Codethink报告称在Linux内核3.15上运行基于Wayland的Weston合成器,利用EGL和“100%开源图形驱动程序堆栈”在Tegra K1上。2016年10月,netbsd在NetBSD 7中添加了对nouveau的实验性支持。

参考资料