本文来自微信公众号:机器之心 (ID:almosthuman2014),作者:机器之心编辑部,题图来自:视觉中国


“英伟达是我们遇到的硬件厂商中最麻烦的一个。”这是 Linux 内核总设计师 Linus Torvalds 十年前说过的一句原话。



当时,Linus 正在芬兰赫尔辛基阿尔托大学举办的学生和开发者研讨大会上接受采访。


在会上,一位现场观众称其买过一款搭载了集成显卡以及 NVIDIA 独立显卡的笔记本电脑,但是在 Linux 下通过 NVIDIA  Optimus 技术进行独立显卡与集成显卡之间的切换却得不到驱动的支持(NVIDIA Optimus 是英伟达开发的双显卡切换技术,它可以实现笔记本电脑中独立显卡与主板内置显卡之间无缝、自动、实时的切换),并就此询问 Linus 的想法。就是在这种语境下,Linus 说出了上面那句话,然后转向摄像机镜头竖起了中指并爆了粗口。


作为开源操作系统 Linux 之父,Linus 一直是开源的忠实拥护者,他一直希望英伟达能够开源他们的驱动。如今,这一天真的来了。


就在今天,英伟达宣布,他们开源了自己的 GPU 内核驱动模块,此事在开发者社区引起轰动。



有人评价说,“这是近十年来开源操作系统硬件支持方面发生的最大事件之一。”



还有人戏称,这是一个“活久见”时刻。



这次开源使用双 GPL/MIT 许可,从 R515 驱动程序版本开始。开发者们可以在 GitHub 上的 NVIDIA Open GPU Kernel Modules repo 中找到这些内核模块的源代码。


英伟达表示,此次开源将大幅提升用户在 Linux 系统中使用英伟达 GPU 的体验,可使其更紧密地与操作系统集成,有利于开发人员的调试、集成和反馈。对于 Linux 发行版提供商,开源的内核模块增加了易用性,还改善了开箱即用的用户体验,以签署和分发 NVIDIA GPU 驱动程序。Canonical 和 SUSE 能够立即将这些开源的内核模块与 Ubuntu 和 SUSE Linux Enterprise Distributions 打包在一起。


开发人员可以跟踪代码路径,了解内核事件调度如何与他们的工作负载交互,以便更快地进行根源调试。此外,企业软件开发人员现在可以将该驱动无缝集成到为他们的项目定制的 Linux 内核中。这将进一步提高 NVIDIA GPU 驱动的质量和安全性,并得到 Linux 终端用户社区的反馈。


支持的功能


此次 GPU 内核模块发布的第一个版本是 R515,除了公布源代码之外,该版本还提供了驱动程序的完整构建和打包版本。对于 NVIDIA Turing、NVIDIA Ampere 架构系列中的数据中心 GPU 来说,这些代码可用于生产。这得益于过去一年英伟达分阶段推出的 GSP 驱动程序架构,旨在让英伟达的客户轻松过渡。研发团队专注于测试各种工作负载,以确保与专有内核模式驱动程序的功能和性能相同。


未来,HMM 等功能将成为 NVIDIA Hopper 架构上机密计算的基础组件。


英伟达这次的开源版本对 GeForce 和 Workstation GPU 的支持度很高。GeForce 和 Workstation 用户可以在 NVIDIA Turing、NVIDIA Ampere 架构 GPU 上使用此驱动程序来运行 Linux 桌面,并在 Vulkan 和 NVIDIA OptiX 中使用多显示器、G-SYNC 和 NVIDIA RTX 光线追踪等功能。用户可以选择使用文档中突出显示的内核模块参数 NVreg_EnableUnsupportedGpus 。更强大、功能更全的 GeForce 和工作站支持将在后续版本中发布,英伟达开源内核模块将最终取代闭源驱动程序。


拥有 Turing 和 Ampere GPU 的客户可以自主选择安装哪些模块。而使用 Turing 之前硬件的客户将继续运行闭源模块。


开源内核模式驱动程序使用相同的固件和相同的用户模式堆栈,例如 CUDA、OpenGL 和 Vulkan。但是,驱动程序堆栈的所有组件都必须与发行版中的版本相匹配。例如,用户不能使用以前或未来版本的用户模式堆栈发布源代码、构建或运行它。


为什么英伟达的开源驱动对 Linux 如此重要?


在英伟达宣布开源后不久,开源解决方案供应商 Red Hat 的桌面高级经理 Christian F.K. Schaller 发表了篇题为《Why is the open source driver release from NVidia so important for Linux?》的博客文章,深入解读了英伟达此次开源对 Linux 的影响,我们来看看他是怎么说的。


新驱动包含什么?


英伟达此次发布的是源代码树外内核驱动程序,该驱动程序经过测试可支持数据中心 GPU 上的 CUDA 用例。其中含有支持显示的代码,但尚未完成测试。此外,这只是内核部分,现代图形驱动程序的很大一部分能够在固件和用户空间组件中找到,但它们仍是闭源的。


不过,这次开源确实意味着 NVidia 已经发布了一个能够使用 Linux 内核中 GPL-only API 的内核驱动程序,尽管这个初始版本不使用旧驱动程序未使用的任何 API。


该驱动程序还仅支持 NVidia Turing 芯片 GPU 及之后的更新版本,这意味着它不能用于 2018 年之前的 GPU。因此,对于大多数 Linux 桌面用户来说,并不是立即可用。


对于英伟达二进制驱动程序意味着什么?


Turing 芯片之前的英伟达 GPU 将继续需要英伟达的二进制内核驱动程序。在开源内核模块经过全面测试和扩展以显示用例之前,即使用户使用的是 Turing 之后的 GPU,也可能需要继续使用该二进制驱动程序。同样,二进制驱动程序的很大一部分可以在固件和用户空间中找到。


对于 Nouveau 意味着什么?


Nouveau 是当前英伟达 GPU 的内核内图形驱动程序。它功能完备,但因不能 re-clock 而无法像二进制驱动程序那样为用户提供完整的性能。


Linux 内核不允许同一硬件有多个驱动程序,因此为了让新的英伟达内核驱动程序进入当前驱动程序,必须退出或至少限制一组不同的硬件,当前驱动程序就是 Nouveau。


就像二进制驱动程序一样,Nouveau 的很大一部分不在内核中,而是在 Mesa 的用户空间片段和 NVidia 当前发布的 Nouveau 特定固件中。因此,英伟达会保留 Nouveau 以支持 Turing 之前的硬件。


我们正在努力探索一种能让英伟达二进制驱动和 Mesa 共享内核驱动程序的方法,这可能需要几年的时间才能完全实现。我们目前预期推出一种全新的驱动程序,旨在同时满足英伟达用户空间和 Mesa 用户空间的需求。我们也希望在此过程中与英伟达的工程师合作。


综上所述,对于开源社区来说,这意味着我们将有一个内核驱动程序和固件,允许改变 GPU 时钟,以提供研究者期望从英伟达显卡获得的性能;意味着我们将拥有一个开源驱动程序,从开源第一天起我们就可以访问新一代英伟达硬件固件和内核更新;意味着我们可以开始使用 Linux 内核中的 GPL-only API。


对于 Fedora、RHEL 等 Linux 发行版意味着什么?


实际上,英伟达的开源 GPU 内核近期并不会对 Fedora、RHEL 等 Linux 发行版产生重大影响。但随着时间的推移,由于此次开源提供了一种从根本上简化英伟达硬件支持的途径。从长远来看,我们希望能够在英伟达硬件上获得与英特尔和 AMD 类似的体验,即开箱即用的功能。


接下来英伟达会有很多工作要做,他们需要使这个新的驱动程序在计算和图形显示应用中更加完整,我们需要做的是,共同努力为未来统一内核驱动程序制定一个计划,并围绕该计划制定一个适用于社区和英伟达的模型,例如添加 Mesa Vulkan 驱动程序之类的东西。


参考链接:

https://blogs.gnome.org/uraeus/2022/05/11/why-is-the-open-source-driver-release-from-nvidia-so-important-for-linux/

https://developer.nvidia.com/blog/nvidia-releases-open-source-gpu-kernel-modules/


本文来自微信公众号:机器之心 (ID:almosthuman2014),作者:机器之心编辑部