終於等到了這一天:NVIDIA(英偉達)開源了他們的 Linux GPU 核心驅動程式。
「英偉達是我們遇到的硬體廠商中最麻煩的一個。」這是 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 中找到這些核心模組的源程式碼:https://github.com/NVIDIA/open-gpu-kernel-modules
英偉達表示,此次開源將大幅提升使用者在 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/