如何在 ubuntu 的 virt-manager 中使用 OpenGL/3D 加速?

如何在 ubuntu 的 virt-manager 中使用 OpenGL/3D 加速?

我目前在 Ubuntu 20.04 上作为主机和客户机,遵循http://ryan.himmelwright.net/post/virtio-3d-vms/并在视频上激活了 3D 加速,在显示器上激活了 OpenGL,但在 VM 启动时我得到了

SPICE GL 支持目前仅限于本地,与 -spice port/tls-port 不兼容

我怎样才能让它工作?

更新:

我禁用了“监听类型”为“无”

像这样在此处输入图片描述

但我得到了一个非常错误的图像:

在此处输入图片描述

答案1

如果您的主板 + 处理器支持 VT-d,OpenGL + 3D 渲染可以与 iommu 完美配合。首先查看您的硬件是否支持 VT-d。如果支持,请执行以下操作:

/etc/default/grub以 root 身份(使用)编辑该文件sudo,在以 开头的行中添加以下内容GRUB_CMDLINE_LINUX_DEFAULT

对于 Intel,.intel_iommu=on iommu=pt对于 AMD,.amd_iommu=on例如:

sudo nano /etc/default/grub

将 iommu 启动标志添加到 /etc/default/grub 文件

保存并关闭后,grep CMDLINE_LINUX_DEFAULT /etc/default/grub在终端中输入。如果一切正确,您将看到使用新代码编辑的行。例如:

$ grep CMDLINE_LINUX_DEFAULT /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt"

然后,运行sudo update-grub以应用更改并重新启动。

update-grub是 Debian 衍生发行版中该命令的快捷方式grub2-mkconfig -o /boot/grub/grub.cfg

对此的一些观察:

  1. 应该注意的是,这是一种“弱”直通(共享)模式,不会接管整个设备。“真正的”直通会完全将设备从主机的控制中移除。这需要vfio-pci=vendId:devId在 grub 或(以及重建 initramfs)中有一个存根/etc/modprobe.d。有关直通的更多信息,这是一个很好的起点:https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF
  2. 共享图形的方式甚至更加复杂,每个供应商都有自己的版本。例如,英特尔 iGD 的 Intel-GVT-g: https://wiki.archlinux.org/title/Intel_GVT-g

以下是我xml对相关设备的看法:

显示 Spice - 注意:使用直通时您无法启用远程服务器:

<graphics type="spice">
  <listen type="none"/>
  <image compression="off"/>
  <gl enable="yes"/>
</graphics>

使用 openGL 配置显示 Spice Server PCI 直通

视频 Virtio(从 QXL 更改):

<video>
  <model type="virtio" heads="1" primary="yes">
    <acceleration accel3d="yes"/>
  </model>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0"/>
</video>

从 QXL 更改为 virtio 以实现 3d 加速

无关,我在 Ubuntu 的 ZFS 安装程序配置中使用 zvol 块设备。这是仅在 Ubuntu 桌面版中可用的选项:

NTFS 块设备的 ZFS zvol

zvols 真的很酷,因为您可以在使用它们之间切换kvm-qemu[systemd-container][5]显然仅限于 Linux) - 加上快照并发送/接收它们。

但是由于 zvols 模拟了常规磁盘,它们表明如果您有空间安装专用磁盘,您也可以为您的虚拟机使用专用磁盘。

创建 zvol 后,使用fdisk/sgdisk/{g}partedetc 为其指定 gpt 分区结构,就像对任何其他磁盘进行分区一样。创建 gpt 分区后,我使用 Windows ISO 进行实际分区。

btrfs有类似的东西,应该能得到更好的支持systemd-nspawn,但我不知道你是否可以像块设备一样操作它们qemu

最后一条提示:我需要将一些文件从主机复制到虚拟机。您实际上无法从 Linux --> Windows 挂载文件夹,但我可以将 Windows 在主机上的 zvol 上创建的分区 (#3) 挂载为常规 NTFS 分区。

因此,当虚拟机关闭时,我安装了分区 3 /mnt,复制了我需要的文件夹和umount /mnt分区,然后重新启动虚拟机。

有时在这种情况下要弄清楚该怎么做有点棘手,所以我想把它放进去。我读过的指南中也建议设置 Samba 共享,如果你需要更频繁地使用,或者我也使用 OpenSSH-Server 和 PSRemoting 远程访问 Windows VM,所以有很多选择(Windows 现在甚至有 SSHFS,如果你看看巧克力味)。

答案2

我在基于软件的硬件加速上工作时也遇到了同样的问题,具体如下:http://ryan.himmelwright.net/post/virtio-3d-vms/。我稍微修改了一下,找到了一个简单的解决方案,对我有用。但我不能保证它也对你有用:

我假设您已将“型号”从“QXL”更改为“Virtio”,并在“视频设备”部分启用了“3D 加速”,以及您上面指定的设置。我还假设您在“OpenGL”下拉菜单中选择的渲染器是您的专用 GPU。

现在,只需关闭 virt-manager 实例并从终端重新启动它,方法是DRI_PRIME=1在它前面添加 ie run DRI_PRIME=1 virt-managerin terminal。现在启动您的 VM。最初,我看到一些屏幕故障,但在打开登录屏幕后,一切运行顺利。我通过它监控了我的 AMD DGPU 使用情况radeontop,它运行良好。

笔记:

  1. 当 VirtualBox 不使用我的 DGPU 时,即使启用了 3D 加速,同样的解决方案也适用于它。我还注意到,与 Virt-manager 相比,VirtualBox 中的 3D 加速更稳定。

  2. 即使成功启用 3D 加速,您也无法获得完整的 GPU 性能,并且可能会在各个地方遇到驱动程序问题。您可能希望通过 GPU 直通将 GPU 直接用于 VM 以克服这些问题。

编辑1:

在对虚拟机硬件加速进行更多调整后,我发现还需要完成一个步骤才能使用 DGPU 运行虚拟机。我们需要首先在“视频设备”部分的“QXL 型号”中将 VRAM 增加到至少 512MB,单击“应用”,将“型号”从“QXL”更改为“Virtio”,并启用“3D 加速”,然后使用 运行 virt-manager DRI_PRIME=1

当我尝试此操作时,Manjaro 运行良好,但 Windows 10 VM 的性能非常不稳定。

答案3

从最初的问题开始

SPICE GL 支持目前仅限于本地,与 -spice port/tls-port 不兼容

我怎样才能让它工作?

作者已经回答了

我禁用了“监听类型”为“无”

值得注意的是,剩余的问题很可能与显卡和主机上安装的驱动程序有关。人们特别报告了 nvidia 卡的问题:

相关内容