快轉到主要內容

測試新開源Nvidia驅動NVK,補強Linux桌面的Vulkan這一塊

· 民國115年丙午年
·
切換正體/简体 ·
分類 Linux系統 Linux使用技巧
標籤 Nvidia Wayland
目錄

哇靠,不看不知道,開源Nvidia驅動NVK現在最舊支援到Kepler架構 (GeForce 600) 的顯卡了。也就是說十年前的Nvidia顯卡碰到現代的Wayland桌面仍能顯示畫面。

這起碼不會讓老電腦變成廢鐵吧,被迫停留在X11桌面。

在Ubuntu測試啓用NVK成功。

1. NVK簡介
#

NVK和Nova是RedHat員工在2022年發起的開源Nvidia驅動實作。可以部分替代Nvidia閉源驅動。Nova是kernel space驅動,NVK則是user space驅動。主要支援Vulkan。最早只支援Turing架構(GTX 1650世代)以後的新卡,現在則擴展到舊卡了。

Nvidia在Linux的驅動是閉源產品,包含kernel space和user space,跟Intel和AMD不一樣。因此對新技術的支援度全看Nvidia心情。譬如2022年以前Nvidia驅動560版本以前,Wayland桌面就常常破圖,只有X11比較穩定。在那之後才有顯著改善。

不過有些舊卡的Nvidia官方驅動是再也不能更新了,例如Pascal和Maxwell(GTX 1080世代)在2025年停止支援了。這會導致他們對Wayland新特性的支援度不佳。

透過NVK驅動可以拯救這些舊卡。

Linux的Nvidia驅動其實很久以前就有逆向工程的開源版本,叫做Nouveau。但是功能不完善,不能控制顯卡風扇轉速,沒有CUDA和NVENC。效能也不好,僅能支援OpenGL讓電腦勉強有畫面。

在2024年Nvidia雖然開源了nvidia-open kernel modules,但user space驅動仍是閉源。在NVK出來後有望補強Nouveau在Vulkan的位置。然後再搭配新的Nova取代nouveau的kernel space驅動。

NVK不是nvidia-open kernel modules,而是Vulkan部分的開源userspace驅動。Nova負責kernel space driver,NVK負責Vulkan部分,然後原本Nouveau的OpenGL的部分用Zink(Vulkan模擬OpenGL)去跑。

根據Phronix在2026年的測試,NVK的遊戲效能只有官方Nvidia驅動的3/4。

尚在改進中,比過去剛開始出來只有1/2效能有進步了啦。

但NVK依然沒有NVENC影片編碼加速與CUDA支援,也不能控制風扇轉速。NVK只負責補強nouveau在Vulkan這部分的驅動。

真希望RedHat能跟AMD合作貢獻ZLUDA,把CUDA逆向工程出來變成開源技術。

2. 在Ubuntu安裝NVK
#

測試硬體:Nvidia GTX1050 Ti、Nvidia MX350

  1. 根據官方文件,NVK是含在Mesa驅動裡面的,最舊支援Kepler架構 (GeForce 600),需要Mesa 25.1以上版本,在Ubuntu 26.04應該開箱即用。Use space的NVK驅動目前是可用狀態,但kernel space的Nova目前還不建議啓用。

  2. 如果有安裝Nvidia閉源驅動,解除安裝重開機

sudo apt purge *nvidia*
  1. 安裝Mesa
sudo apt install mesa-vulkan-drivers libvulkan1 libvulkan-dev vulkan-tools
  1. 需要注意nouveau有無在/etc/modprobe.d/nvidia.conf被blacklist。

  2. 需要安裝linux-frmware和firmware-nvidia-graphics才包含Nvidia顯卡的韌體:

sudo apt install linux-firmware firmware-nvidia-graphics
  1. 查看目前Nvidia顯卡使用的核心模組,應該是nouveau,並會列出候選的nova_core
lspci -nnk | grep -A4 -Ei 'vga|3d|display'
  1. 測試Vulkan,看Nvidia顯卡的驅動是否爲Mesa。
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nouveau_icd.json

vulkaninfo --summary
  1. 確認OpenGL是不是跑在Zink上。若無顯示OpenGL renderer string: zink Vulkan,加入MESA_LOADER_DRIVER_OVERRIDE=zink環境變數強制啓用zink。
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nouveau_icd.json

glxinfo -B
  1. 在雙顯卡的系統上,啓用Nvidia PRIME的步驟變成了設定環境變數DRI_PRIME=1 VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nouveau_icd.json "執行程式"。不過我的系統似乎會優先選取Nvidia。

  2. nvtop抓不到NVK使用率。NVK沒有NVENC和CUDA支援。

相關文章


感謝您的閱讀。我寫作是為了誠實表達想法,而不是追逐社群互動與流量。我很樂意傾聽你在仔細閱讀我文章之後的心得。若有內容勘誤 or 技術問題 or 回饋想法,歡迎透過本站「關於」頁面的Email與我聯絡。