快轉到主要內容

在Linux筆電直通Nvidia GPU給QEMU/KVM虛擬機(Optimus MUXed)

· 民國115年丙午年
·
切換繁體/簡體
分類 資訊科技 虛擬機與容器技術
標籤 GPU Passthrough Nvidia
目錄

想要在我的搭載獨顯的MSI Modern 15 A10筆電搞GPU直通給虛擬機,才發現我遇到奸商了。心很累。

雖然我大部分時候使用Ubuntu的KDE桌面作業,不過偶爾還是需要用到Windows軟體,所以我就想裝個KVM虛擬機,並在需要3D加速的時候直通GPU進去。原來GPU直通並不像桌機那樣簡單,還得研究一下筆電構造。

1. 確認筆電連接獨顯的配置
#

  1. 很多有獨顯筆電的都是Intel內顯 + Nvidia獨顯的配置。少部份為AMD + Nvidia獨顯。

  2. Nvidia顯示卡在筆電上仰賴「Optimus」技術來切換顯示卡。根據Lan Tian Blog的介紹,搭載Nvidia的筆電,內部會有以下三種接法:

  • Nvidia Optimus MUXless架構,難以GPU直通
  • Nvidia Optimus MUXed架構,最適合GPU直通
  • Nvidia顯卡直連螢幕,難以GPU直通
  1. 確認筆電連接獨顯的方式,可以從lspci輸出的訊息來推斷:
lspci -nnk | grep -A 3 -i "VGA\|3D"
  1. 判讀方式:
  • VGA compatible controller:代表這是MUXed。
  • 3D controller:這是MUXless。

如果是MUXed的話,直通GPU的方式就跟一般桌機沒兩樣,參見Ubuntu Nvidia GPU直通教學

可,我這台MSI Modern 15 A10有Intel UHD620內顯 + Nvidia MX350獨顯,但是在lspci輸出的資訊顯示3D Controller,表示我的電腦屬於「Nvidia Optimus Muxless」架構,也就是Nvidia顯示晶片不是連在HDMI輸出孔上的,是經過內顯傳送的。這樣的話,即使用VFIO方式將Nvidia顯示卡直通進去,虛擬機也不能輸出畫面。與此同時,宿主機的HDMI孔依然會輸出內顯的訊號。

簡單來說,就是這種架構下直通Nvidia GPU屬於是沒屁用的。雖然Linux虛擬機是可以認到Nvidia GPU,但它並不能用於渲染。

大概是因為我筆電顯卡太低階了,不可能將獨顯弄成像PC一樣是獨立的PCI裝置吧。

於是我就只好改用GPU虛擬化的方式了。Intel舊型GPU都支援GVT-g的顯示卡虛擬化技術。透過mdev分配給虛擬機,然後安在虛擬機內裝驅動就可以了。但是這個Intel在虛擬機內沒有HDMI輸出怎麼辦呢?Virt Manager的監視器又容易lag。只得用Looking Glass技術,透過KVM Framebuffer的方式來輸出虛擬機畫面。Intel內顯的VRAM由RAM決定。

2. 替代方案
#

因此,要讓虛擬機使用3D加速,就得搞GPU虛擬化,例如Intel GVT-g或者SR-IOV的方法。

我這台是Intel i5-1020u,可以使用Intel GVT-g分割資源給虛擬機使用。

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。