GPU Passthrough on Linux laptop.
1. 確認筆電的配置#
很多筆電都是Intel內顯 + Nvidia獨顯的配置,少部份為AMD + Nvidia獨顯,更罕見的為搭載AMD獨顯的筆電。
像我的MSI Modern 15 A10,就是Intel i5 10210u (內顯UHD620) + Nvidia MX350獨顯的配置。
Nvidia顯示卡在筆電上仰賴「Optimus」技術來切換顯示卡。
根據 Lan Tian Blog的介紹,搭載Nvidia的筆電,內部會有以下三種接法:
Nvidia Optimus MUXless架構,難以GPU直通
Nvidia Optimus MUXed架構,最適合GPU直通
Nvidia顯卡直連螢幕,難以GPU直通
執行lspci -nnk
指令查看,確認我的筆電有二個顯示卡,且HDMI輸出端接在Nvidia顯示卡上,可知我的筆電是「Nvidia Optimus MUXed」架構。
以我的情況來說,要GPU直通給,就有二種作法。
2. 雙GPU直通#
Linux用Intel內顯開機,啟動虛擬機後直通Nvidia顯示卡,Nvidia顯示卡插上「HDMI欺騙器」,Linux端再用Looking Glass存取Windows桌面。
好處是這樣可以同時用兩個系統,跟桌機GPU直通步驟沒兩樣,過程參考這篇: Ubuntu Nvidia GPU直通
3. 單GPU直通#
透過Envy Control技術,切換主顯卡開機,虛擬機開機後將Nvidia顯示卡直通,切斷Linux與獨顯和內顯的連線,螢幕完全變成Windows的畫面,關機後再切回來Linux。
在撰寫Libvirt hook指令稿的時候,於取消載入Nvidia核心的指令前面,加入 EnvyControl切換獨顯的指令來調整顯示卡:
# 切換到內顯,關閉獨顯
sudo envycontrol -s integrated
# 切換到內顯,保持獨顯開啟
sudo envycontrol -s hybrid
# 切換到獨顯
sudo envycontrol -s nvidia