快轉到主要內容

Linux QEMU/KVM透過virglrenderer啟用虛擬機3D加速,免GPU直通

分類   資訊科技 虛擬機與容器技術
標籤   VirGL QEMU-KVM VirtIO
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

virglrenderer(VirGL)是Linux的半虛擬化技術,可以讓虛擬機獲得3D加速而不用直通GPU,也不用搞GPU虛擬化。

Collabora繪製的原理圖:

用途?這樣一來方便開發者在虛擬機測試桌面環境特效,加強遊戲算繪能力,或者給H.264影片解碼加速。

即使是在headless的Linux環境,virglrenderer照樣可以給虛擬機啟用3D加速。請參見 Andorid Termux Windows WSL的例子。

1. virglrenderer運作條件
#

目前virglrenderer版本1.0.0,QEMU版本8.2.2,Mesa版本24.0.5

宿主機系統:得是GNU/Linux系統。

宿主機顯示卡:最好使用Intel或AMD,搭配開源Mesa驅動。Nividia閉源驅動virglrenderer支援度不佳。

虛擬機軟體:必須是QEMU。QEMU有virtio-gpu的虛擬顯示卡,可以使用virglrenderer當作後端。

虛擬機系統:同樣得是Linux才能啟用virglrenderer,大部分GNU/Linux系統的Mesa應該都包含VirGL支援,Android-x86也有VirGL。FreeBSD和ChromeOS支援度未知。Windows和macOS不支援virglrenderer。

註:目前有一個 針對Windows虛擬機virglrenderer驅動的PR,但是處於早期階段。

論圖形API支援:virglrenderer主要支援的是OpenGL,Vulkan支援尚屬於實驗階段。需要在virgl_test_server 手動啟用Venus選項。

此外,因為virglrenderer是半虛擬化技術,可能無法發揮GPU全速。

2. 在宿主機安裝virglrenderer套件
#

大部分Linux發行版都有收virglrenderer套件。不過若要體驗最新功能你得參考 官方文件手動編譯新版。

  1. 以Ubuntu 24.04為例,先設定 QEMU/KVM

  2. 再安裝virglrenderer套件:

sudo apt install libvirglrenderer-dev libvirglrenderer1 virgl-server
  1. 隨後應該會隨Virt Manager自己啟動,不需要跑特別指令。

  2. 需要跑自訂指令參數的話,使用virgl_server指令啟動伺服器:

virgl_test_server --use-egl-surfaceless -venus &

3. 在虛擬機啟用virglrenderer
#

  1. 開啟Virt Manager,新增任意Linux虛擬機。這裡以openSUSE Leap 15.5為例

  2. 點選編輯硬體,在顯示卡部份選取virtio,並勾選3D加速

  3. 然後在SPICE協定部份,監聽類型勾選無,再勾選啟用OpenGL

  4. 開機之後,虛擬機系統應會自動偵測到virglrenderer並啟用3D加速

  5. 在虛擬機執行dmesg | grep drm指令查看virgl是否有載入

  6. 使用glxinfo | grep OpenGL指令可得知,這裡使用了virgl,而非純CPU算繪的llvmpipe

  7. 虛擬機內部的軟體應該會自動使用virglrenderer算繪。不過有些桌面環境即使啟用virgl可能還是會lag。

  8. 你可以手動指定virgl驅動來啟動程式

GALLIUM_DRIVER=virgl firefox
  1. 當虛擬機程式在使用3D算繪的時候,宿主機可以觀察到佔用(此圖為intel_gpu_top所顯示)

參考資料
#

相關文章

Android-x86 QEMU虛擬機安裝教學,在Linux上執行手機APP,支援GPU加速的VM
分類   資訊科技 虛擬機與容器技術
標籤   Android-X86 Linux QEMU-KVM VirGL Scrcpy
WSL跑Linux的X server圖形環境 + virglrenderer硬體加速(不使用WSLg)
分類   資訊科技 虛擬機與容器技術
標籤   Windows Subsystem for Linux VirGL
如何用圖形化程式調整QEMU/KVM虛擬機的硬碟大小,開啟編輯qcow2檔
分類   資訊科技 虛擬機與容器技術
標籤   QEMU-KVM Libvirt

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請貼Imgur或Postimages。