QEMU/Guest 图形加速

出自 ArchWiki

有多种虚拟机图形显示方法可以产生极大的加速或接近裸机性能。

用于显示的 QXL 视频驱动程序和 SPICE 客户端

QXL/SPICE 是一种高性能显示方法。但是,它并非旨在提供接近裸机的性能。

PCI GPU 直通

通过 OVMF 的 PCI VGA/GPU 直通

PCI 直通 目前似乎是获得最佳性能的最流行方法。此论坛帖子(现已关闭,可能已过时)可能对解决问题有帮助。您可以使用 kvm 切换器来控制桌面。

单 GPU 直通

目前,PCI 直通 仅适用于多个显卡。但是,有一个变通方法用于传递单张显卡。此方法的缺点是您必须从主机分离显卡,并使用 ssh 从虚拟机控制主机。

当您启动虚拟机时,所有 GUI 应用程序都将被强制终止。但是,作为一种变通方法,您可以使用 Xpra 在启动虚拟机之前分离到另一个显示器,并在关闭虚拟机后将应用程序重新附加到显示器。

如果您有 NVIDIA GPU,您可能需要使用 nvflashAUR 转储 GPU 的 vBIOS,并使用 vBIOS Patcher 对其进行修补。

Looking Glass

有一种相当新的直通方法称为 Looking Glass。请参阅 本入门指南,其中提供了一些问题解决和用户支持。Looking Glass 使用 DXGI(MS DirectX 图形基础设施)通过共享内存将从虚拟机的直通显卡捕获的完整帧传递到主机系统,在主机系统中,裸机主机上运行的显示客户端读取(抓取)这些帧。

GPU 虚拟化

LIBVF.IO

LibVF.IO 是一个用于简化 GPU 虚拟化的虚拟化框架(Libvirt 的替代方案)。它支持英特尔(Intel GVT-g、SR-IOV)、NVIDIA(NVIDIA vGPU、SR-IOV)和 AMD (AMD SR-IOV)。您必须为每个虚拟机创建 YAML 配置。目前,英特尔和 NVIDIA GPU 已经过测试,对 AMD 的支持有限。您可以按照此 设置指南[死链 2024-12-15 ⓘ]。您还可以查看他们的 Wiki。对于 NVIDIA GPU,您需要解锁 vGPU,这可以通过安装 nvidia-merged-dkmsAUR[断开的链接:未找到软件包]自行构建 并将其放入 LIBVF.IO 的 Optional Folder 中来完成。

还有 LIME (LIME Is Mediated Emulation),用于在 Linux 中执行 Windows 程序。

此框架已经过游戏测试。默认情况下,LibVF.IO 使用 Looking Glass 作为虚拟显示器,但您可以通过 YAML 配置更改它。

提示: 如果您有 Ryzen CPU,则必须启用 ignore_msrs 以避免 Windows BSOD。始终仔细检查您的客户机驱动程序版本。对于 Nvidia GPU,请确保 nvidia-vgpud 和 nvidia-vgpu-mgr 服务正在运行!

NVIDIA vGPU

默认情况下,NVIDIA 为消费级系列禁用了 vGPU(如果您拥有企业级显卡,请继续)。但是,您可以为您的消费级显卡解锁 vGPU

您还需要一个 vGPU 许可证,尽管有一些 变通方法

按照本指南手动设置带有 NVIDIA vGPU 的 Windows 10 客户机。

SR-IOV

Single Root I/O Virtualization 正在由英特尔和 NVIDIA 新 GPU 系列开发中。有些 AMD GPU 支持此技术,例如 W7100

基于 Xe 架构 和更新版本的英特尔 GPU 也支持 SR-IOV。但是,主线 Linux 内核尚不支持此功能,您将必须从英特尔安装 自定义内核。还有一个 i915 DKMS 内核模块 i915-sriov-dkmsAUR 可以简化此过程。

  • 对于 Linux 客户机,您必须安装支持 i915 模块,可以使用 intel-lts 内核或 i915-sriov-dkmsAUR
  • 对于 Windows 客户机,您必须安装最新的驱动程序并将 hypervisor 的供应商 ID 设置为 GenuineIntel

英特尔特定的 iGVT-g 扩展

iGVT-g 仅限于过去的英特尔 CPU(从 Broadwell 开始到 Comet Lake 结束)上的集成英特尔显卡。这是不支持 SR-IOV 的旧 iGPU 的“软件变通方法”[1]。较新的英特尔 iGPU 可以改用 SR-IOV。有关更多信息,请参阅 Intel GVT-g

Virgil3d virtio-gpu 半虚拟化设备驱动程序

[2] virtio-gpu 是一种半虚拟化 3D 加速图形驱动程序,类似于非图形 virtio 驱动程序(请参阅 virtio 驱动程序信息virtio Windows 客户机驱动程序)。对于 Linux 客户机,virtio-gpu 已经相当成熟,自 Linux 内核版本 4.4 和 QEMU 版本 2.6 以来就已经可用。请参阅 此 Reddit Arch 帖子Gerd Hoffmann 的博客,了解如何将其与 libvirt 和 spice 一起使用

对于 Windows 客户机,目前正在主 GitHub 代码库的 pull request 上积极开发 功能齐全的 OpenGL 和 Direct3D10 驱动程序。还有 一份报告称 Red Hat 之前也曾致力于 OpenGL 驱动程序,包括 项目摘要,但之后不久就放弃了。其他驱动程序包括 DOD(Windows 内核)驱动程序ICD(Windows 用户空间)驱动程序。此外,请参阅 这篇 Phoronix 文章及其评论。

Venus 是用于 Vulkan 命令序列化的 Virtio-GPU 协议。自 QEMU 版本 9.2.0 和 Linux 内核版本 6.13 起可用。请参阅此 Github Gist,了解如何使用它。