Intel GPU for display, Nvidia GPU for computing and offload rendering.
Nvidia PRIME是Nvidia顯示卡的一種技術,可以在獨立顯示卡與內顯之間切換。
比如Linux筆電用Intel內顯開機,桌面環境用內顯渲染。當遇到需要重度GPU渲染的遊戲程式時,才將渲染作業分配給Nvidia顯示卡,此種過程稱之為PRIME Render Offload
。
同樣的,Linux桌電也可以使用這個技術,紓解Nvidia驅動不穩定的問題。將筆電的這個技術,沿用到桌電上,採「內顯」用於畫面輸出,需要時再呼叫「獨顯」出來幹活的方案。
- 測試系統:Arch Linux 6.6.8
- Nvidia驅動版本:545.29.06
1. 不要用Nvidia顯示卡當主顯卡的理由#
我這裡要論述不要用Nvidia當主顯示卡的理由,即讓螢幕所有的渲染都由Nvidia顯示卡處理。
我的電腦有Intel內顯和Nvidia獨顯二張顯示卡,加上一個螢幕。在使用系統的時候,我會把主螢幕接到獨立顯示卡上,所以Nvidia顯示卡自然就成了負責渲染所有圖形的顯示卡。
但是Nvidia的閉源驅動在Linux系統相對Intel驅動來說不是很穩定,很容易更新就爆炸。再者KDE X11與Nvidia相性不佳,偶有畫面撕裂情況。
為了保持桌面穩定度,可以嘗試Intel內顯負責輸出螢幕,需要時再叫Nvidia渲染(PRIME Render Offload
)的作法。
所以電腦螢幕接法會變成這樣。
這樣的話,沒有Nvidia畫面撕裂問題,又能保持Nvidia的效能。預設用Intel內顯當主畫面輸出,3D運算就是用Intel,看影片解碼夠力了,還能無痛跑 Waydroid和Android-x86的 virglrenderer。等有需要重度3D計算再叫Nvidia顯示卡出來幹活即可。
2. 將桌電設定為Intel內顯優先開機#
- 現在我的螢幕線是插在Nvidia獨顯上。首先檢查目前使用的是nouveau還是Nvidia專有驅動,顯示nouveau就是前者了。
lsmod | egrep "nvidia|nouveau"
雖說若有安裝開源Nvidia驅動nouveau,應先將其解除安裝,但它是含在Mesa套件裡面的,而Intel驅動需要Mesa,所以頂多只能禁止其載入。在安裝Nvidia專有驅動後,nouveau應會自動被停用。
在Arch Linux 安裝Nvidia專有驅動和相關工具,重開機。
使用指令
lspci -k | grep -A 2 -i "VGA"
列出目前使用的GPU。如果螢幕的線是插在Nvidia的HDMI孔上,那麼應該只會看到Nvidia
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device 85d6
Kernel driver in use: nvidia
- 因為等下要改用Intel內顯啟動,安裝Intel的開源驅動,還有Vulkan。
sudo pacman -S mesa intel-media-driver vulkan-intel
檢查GRUB參數:
cat /etc/default/grub
,確認GRUB_CMDLINE_LINUX_DEFAULT
沒有設定nomodeset
和nvidia-drm.modeset=1
,否則用Intel顯卡開機會沒畫面。電腦關機。
進入電腦的BIOS,設定為內顯優先開機。我的主機板的該設定位置Advanced → System Agent (SA)Configuration,設定IGFX優先開機。
之後電腦重開機,將插在獨顯的HDMI線拔掉,改插到主機板的HDMI孔。
使用指令
lspci -k | grep -A 2 -i "VGA"
檢查目前使用的顯示卡,應會同時列出Intel和Nvidia的顯示卡
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)
Subsystem: ASUSTeK Computer Inc. Device 1830
Kernel driver in use: i915
--
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] (rev a1)
Subsystem: ASUSTeK Computer Inc. Device 85d6
Kernel driver in use: nvidia
- 再參考 Nvidia PRIME用法來執行需要重度GPU計算的程式。