Kvm

KVM Virgl 加速僅適用於某些客人?

  • March 30, 2021

我正在為我的 KVM 來賓使用以下圖形設置:

...
<graphics type="spice">
 <listen type="none"/>
 <image compression="off"/>
 <gl enable="yes" rendernode="/dev/dri/by-path/pci-0000:69:00.0-render"/>
</graphics>
...
<video>
 <model type="virtio" heads="1" primary="yes">
   <acceleration accel3d="yes"/>
 </model>
 <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
</video>
...

這對於 Fedora (32/33) 和 Ubuntu (20.04) 來說工作得很好,但到目前為止我無法讓它在任何其他發行版上工作。即使在 Fedora 上,它也只有enable="yes"在安裝後打開它 ( ) 才有效(在 live cd 上無效)。但在那之後,它開箱即用。

當在 manjaro 上嘗試同樣的操作時,即使是grub菜單也會凍結並且無法使用。我也試過systemd-boot了。但是,如果您設法啟動它,螢幕將保持黑色(它似乎執行得很好,因為儘管黑屏但滑鼠集成仍在工作)。

更新: 畢竟這似乎不是核心問題。我錯過了這個,因為我啟用了自動登錄,但 lightdm 顯示得很好。實際上是DE(XFCE)給了我一個黑屏。Wayland 和 Xorg 上的 Gnome 執行良好。GRUB 菜單仍然無法使用。這似乎只是與 GRUB 的 virgl 兼容性問題?和 XFCE。我可能會在沒有 EFI 的情況下再試一次,但原來的問題基本解決了。

現在我想知道:fedora/ubuntu 有什麼,例如:缺少 manjaro?它是我缺少的核心選項還是某些驅動程序包?

我嘗試virglrenderer在我的 manjaro 客人上安裝,但沒有幫助(我不確定它是否也適用於客人)。

更新:

在黑屏的 manjaro 客戶機上使用 ssh 時,我得到:

dmesg | grep drm
[    0.836414] [drm] pci: virtio-vga detected at 0000:00:01.0
[    0.836420] fb0: switching to virtiodrmfb from EFI VGA
[    0.836526] [drm] virgl 3d acceleration enabled
[    0.836527] [drm] EDID support available.
[    0.837182] [drm] number of scanouts: 1
[    0.837186] [drm] number of cap sets: 2
[    0.845823] [drm] cap set 0: id 1, max-version 1, max-size 308
[    0.845964] [drm] cap set 1: id 2, max-version 2, max-size 688
[    0.846341] [drm] Initialized virtio_gpu 0.1.0 0 for virtio0 on minor 0
[    0.848777] virtio_gpu virtio0: fb0: virtio_gpudrmfb frame buffer device
[    2.095162] systemd[1]: Condition check resulted in Load Kernel Module drm being skipped.

和工作的 Fedora 客人:

dmesg | grep drm
[    2.164964] [drm] pci: virtio-vga detected at 0000:00:01.0
[    2.177043] [drm] features: +virgl +edid
[    2.177652] [drm] number of scanouts: 1
[    2.177658] [drm] number of cap sets: 2
[    2.193509] [drm] cap set 0: id 1, max-version 1, max-size 308
[    2.193596] [drm] cap set 1: id 2, max-version 2, max-size 688
[    2.193840] [drm] Initialized virtio_gpu 0.1.0 0 for virtio0 on minor 0
[    2.217427] virtio_gpu virtio0: [drm] fb0: virtio_gpudrmfb frame buffer device
[    3.552834] systemd[1]: Condition check resulted in Load Kernel Module drm being skipped.

在主機上(工作的 vm 具有相同的輸出,但可以工作):

qemu-system-x86_64 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2/ovmf/OVMF_CODE.fd \
-drive if=pflash,format=raw,readonly,file=/path/to/qemu/nvram/manjaro_VARS.fd \
-drive file=/path/to/manjaro.qcow2 \
-m 8192 -enable-kvm -M q35 -cpu host -smp 16,sockets=1,cores=16,threads=1 \
-vga virtio -display gtk,gl=on \
-usb -device usb-tablet \
-net user,hostfwd=tcp::10022-:22 -net nic

gl_version 46 - core profile enabled
vrend_renderer_fill_caps: Entering with stale GL error: 1280
GLSL feature level 430

問題是 Xfwm 的內置合成器和 virgl 不能很好地結合在一起。

解決方法:使用 virgl=off(在影片設備上)或 gl=off(在顯示器上)啟動 VM,在 VM 中執行 xfwm4-tweaks-settings,選擇“合成器”選項卡,並取消選中“啟用顯示合成” ”。然後關閉 VM 並重新啟用 virgl。

picom 與 Xfwm 一起工作,似乎沒有同樣的問題,所以如果你想要一個合成器,請在 VM 中安裝/使用 picom 而不是使用 Xfwm 的內置合成器:https://wiki.archlinux.org/index。 php/Picom

引用自:https://unix.stackexchange.com/questions/622624