通过 OVMF 的 PCI 直通/示例
鉴于 PCI 直通在硬件和软件配置方面都相当棘手,本页面展示了可用的、完整的 VFIO 设置。您可以随意查阅用户的脚本、BIOS/UEFI 配置、配置文件和特定硬件。如果您遇到问题,可能其他 VFIO 用户也曾遇到过,并在下面的示例中得到了解决。
用户设置
mstrthealias:Intel 7800X / X299,GTX 1070
硬件
- CPU:Intel(R) Core(TM) i7-7800X CPU
- 主板:ASRock X299 Taichi (Revision: A, BIOS/UEFI 版本:1.60A)
- GPU:Asus STRIX GTX 1070
- 内存:32GB DDR4
配置
- 内核:内核版本 4.14.8-1-skx (已修补 crystal_khz=24000)。
- 自定义补丁
- skylakex-crystal_khz-24000.patch (见下文)
- 使用来自 linux-ck 的补丁
- enable_additional_cpu_optimizations_for_gcc_v4.9+_kernel_v4.13+.patch
- 0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
- 0001-e1000e-Fix-e1000_check_for_copper_link_ich8lan-retur.patch
- 0002-dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch
- 配置
- PREEMPT, NO_HZ_IDLE, 300HZ, MSKYLAKE
- 自定义补丁
- GitHub:链接待定
- 基准测试:https://imgur.com/a/hIfQD
- 使用 libvirt/QEMU:libvirt 3.10.0 / QEMU 2.11.0
- 您遇到的问题,为使某些功能更好地工作而采取的特殊步骤等。
- Skylake-X 默认时钟在 4.14.8 中不正确 (https://bugzilla.kernel.org/show_bug.cgi?id=197299)
- 无法使用 adjtimex 解决时序问题
- 将内核源代码修补为 crystal_khz = 24000 解决了时序/性能问题
- 在 BIOS 中启用“Intel SpeedShift”,安装 cpupower',设置 governor='performance'
- 验证:以 root 身份运行
dmesg | grep HWP
- intel_pstate:HWP 已启用
- 验证:以 root 身份运行
- 在 BIOS 中启用 HT
- 启用“deadline”IO 调度器
- echo 'ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="deadline"' >> /etc/udev/rules.d/60-schedulers.rules
- 绕过 x2apic opt-out
- GRUB_CMDLINE_LINUX="... intremap=no_x2apic_optout ..."
- 为 Windows VM 隔离核心
- GRUB_CMDLINE_LINUX="... isolcpus=2-5,8-11 nohz_full=2-5,8-11 rcu_nocbs=2-5,8-11 ..."
- 对所有 VM 内存分配使用巨页 (2MB)
- memoryBacking: <hugepages/><nosharepages/><locked/><access mode='private'/><allocation mode='immediate'/>
- 从 GPU 提取 rom;用于 <rom file=../> 配置
- 对 GPU 和 GPU 音频使用 MSI(在 Windows 注册表中配置;FPS 似乎与使用基于行的中断相同)
- Skylake-X 默认时钟在 4.14.8 中不正确 (https://bugzilla.kernel.org/show_bug.cgi?id=197299)
- 硬件设置
- PCIE1:NVIDIA GeForce GT 710B(用于主机)
- 板载:ASRock XHCI 3.1 USB(用于主机)
- 板载:Intel I219 NIC(桥接)
- PCIE3:Asus Xonar STX(直通到 Win10)
- PCIE5:NVIDIA GeForce GTX 1070(直通到 Win10)
- M2_1:Samsung 960 EVO 500GB(直通到 Win10)
- 板载:Intel XHCI USB 3.0(直通到 Win10)
- 板载:Intel HDA(直通到 Win10)
- 板载:Intel I211 NIC(直通到 Win10)
- 板载:ASRock AHCI SATA A1/A2(直通到 Linux)
DragoonAethis:6700K,GA-Z170X-UD3,GTX 1070
硬件
- CPU:Intel Core i7-6700K(使用 iGPU 作为主机 GPU)
- 主板:Gigabyte GA-Z170X-UD3 (Revision 1.0, BIOS/UEFI 版本:F23d)
- GPU:MSI GeForce 1070 Gaming X (10Gbps)
- 内存:16GB DDR4 2400MHz
配置
- 内核:“Vanilla” Linux(无需 ACS 补丁)。
- 使用 libvirt:XML 域、辅助脚本、IOMMU 组等可在 我的 VFIO 仓库 中找到。
- Guest OS:Windows 8.1 Pro。
- 整个 HDD 作为原始设备传递给 VM(格式化为单个 NTFS 分区)。
- USB 键盘和鼠标传递给 guest VM,并通过 Synergy 与主机共享。
- 虚拟化音频:PulseAudio -> 本地 Unix 套接字。以前,我有一个稍微复杂的设置,其中主机上的 PA 配置为接受 TCP 连接,并且 QEMU 使用 PA 所需的环境变量指向运行在 127.0.0.1 上的 PA 服务器。这样就不需要更改 QEMU 用户(仓库中有详细信息),但引入了我稍后解决的其他小问题。
- 使用桥接网络(借助 NetworkManager 和 本教程 的帮助)。创建了
bridge0
,eth0
接口绑定到它。禁用 STP,在 VM 中配置 VirtIO NIC,并且该 VM 在网络中被视为任何其他计算机(并从路由器本身分配 IP 地址,可以与其他计算机自由通信)。 - 由于某些原因,在 UEFI 中启用 CSM 支持的情况下,在 内核命令行 上启用
intel_iommu=on
会导致启动时黑屏。启用它(需要启用 Windows 8/10 功能才能显示“CSM Support”,选择“Other OS”会隐藏它)。
Manbearpig3130 的原始虚拟游戏机
硬件
- CPU:Intel Core i7-6850K 3.6GHz
- 主板:Gigabyte x99-Ultra Gaming (Revision 1.0, BIOS/UEFI 版本:F4)
- 主机 GPU:AMD Radeon HD6950 1GB
- Guest GPU:AMD R9 390 8GB
- 内存:32GB G-Skill Ripjaws DDR4 运行在 3200MHz
配置
- 主机内核:内核版本 Linux 4.7.2-1。
- 使用 libvirt QEMU/KVM with OVMF:链接到域 XML/脚本/注释:https://github.com/manbearpig3130/MBP-VT-d-gaming-machine
- 主机操作系统:Arch Linux
- Guest OS:Windows 10 Pro
- 在 LVM 条带模式 (使用 mdadm) 中设置的 2 个 480GB SSD 格式化为 ext4,挂载在 Linux 中,其中包含 guest 的 qcow2 虚拟 VirtIO 磁盘文件。
- USB 主机控制器被直通,将大部分 USB 端口提供给 VM,为主机留下带有连接的 USB 集线器的 USB 3.1 控制器。
- 主板有两个 NIC,其中一个被传递到 VM 中(安装 Killer NIC 驱动程序后完美工作)。
- VM 通过静态巨页获得专用 16GB 内存。
- CPU 绑定显著提高了性能。
- Windows 直接启动到主显示器(43 英寸 Sony Bravia)上的 Steam Big Picture 模式。总的来说,这是一台很棒的游戏机,可以同时满足我对 GNU/Linux 的游戏需求和愿望。
怪癖:
- 有时我必须重新安装 Windows 中的 AMD 驱动程序才能使 HDMI 音频正常工作,或者回滚到 Windows HDMI 驱动程序。我通常使用 USB 耳机,无论如何它都能正常工作。
Manbearpig3130 的进化版虚拟游戏机
硬件
- CPU:Intel Core i7-6850K 3.6GHz
- 主板:Gigabyte x99-Ultra Gaming (Revision 1.0, BIOS/UEFI 版本:F4)
- 主机 GPU:AMD Radeon R9 390
- Guest GPU:Nvidia 2080ti
- 内存:32GB G-Skill Ripjaws DDR4 运行在 3200MHz
配置
- 主机内核:内核版本 Linux 5.3.12-arch1-1
- 使用 libvirt QEMU/KVM with OVMF:链接到域 XML/脚本/注释:https://github.com/manbearpig3130/MBP-VT-d-gaming-machine
- 主机操作系统:Arch Linux
- Guest OS:Windows 10 Pro
- 2TB Intel 660P NVMe SSD 作为存储直通。这需要固件更新 (sm2262 芯片组) 才能正确直通,但现在它可以工作了,如果我愿意,我也可以选择直接启动到 Windows
- USB 主机控制器被直通,将大部分 USB 端口提供给 VM,为主机留下带有连接的 USB 集线器的 USB 3.1 控制器。
- 主板有两个 NIC,其中一个被传递到 VM 中(安装 Killer NIC 驱动程序后完美工作)。
- VM 通过静态巨页获得专用 16GB 内存。
- CPU 绑定显著提高了性能。
- Windows 直接启动到主显示器上的 Steam Big Picture 模式。
- Intel 9260 Wi-Fi + 蓝牙 M.2 卡直通用于 Xbox Series X/S 控制器
- Valve Index VR 头显在 VM 中完美工作
怪癖:
- 我的一个 USB 控制器有问题,它似乎会卡顿或重置。我可以将设备插入其他 USB 总线来缓解这个问题,例如 2080ti 上的 USB 总线以及我的 USB 3.1 总线。这个问题只发生在 Windows 中。我最初认为这是因为在 VM 中,但自从我设置了 NVMe 直通并且现在可以直接启动到 Windows 后,我仍然遇到同样的问题。在 Linux 上根本不会发生
Bretos 的虚拟游戏设置
硬件
- CPU:Intel Core i7-7700k
- 主板:Z270 GAMING M3 (MS-7A62)
- GPU:ASUS GeForce GTX960
- 内存:Kingston HyperX 3x8GB DDR4 2.4GHz
- 存储:2 个 Corsair MP500 m.2 240G SSD 在 mdadm RAID0 中,1 个 WD Black 1TB 用于存储。100GB LVM 卷作为 HDD 的回写缓存
配置
- 内核:vanilla
- 主机操作系统:Arch Linux
- Guest OS:Windows 10 Pro
- 使用 libvirt/QEMU:GitHub 配置仓库:[1]
- 您遇到的问题:音频。不得不购买 USB 音频适配器并将其直通。
- 除了音频外没有其他问题。工作起来像一个魅力。
droserasprout 穷人的设置
硬件
- CPU:Intel Core i3-6100
- 主板:ASRock H110M2 D3 (BIOS 版本 0603)
- 主机 GPU:Intel HD 530
- Guest GPU:Sapphire Radeon R7 360
- 内存:Apacer 8Gb 75.C93DE.G040C, Kingston 4Gb 99U5401-011.A00LF
配置
- 内核:linux-lts 4.9.67-1 (vanilla)
- 主机操作系统:Arch Linux
- Guest OS:Windows 10 Pro 1709 (build 16299.98)
- 使用 libvirt/QEMU:请参阅我在 Github 上的配置和 IOMMU 组
- HDD 分区作为原始 virtio 设备传递给 VM。
- HD 音频也已传递。播放和录制都工作正常,没有延迟问题或故障。VM 关闭后,主机音频也工作正常。
- 当为 VM 隔离 CPU 核心时,Guest 的延迟略好。
- 添加 i2c-dev 模块以绕过切换 HDMI 时的“EDID 签名”错误。没有它,由于某种原因,我不得不在启动 VM 之前切换视频输出。
- 添加 intremap=no_x2apic_optout 内核选项以绕过主板固件错误地报告 x2APIC 方法不受支持的问题。似乎对 guest 的延迟有很大影响。
- 总体性能非常接近原生 OS 设置。
prauat:2xIntel(R) Xeon(R) CPU E5-2609 v4,2xGigabyte GeForce GTX 1060 6GB G1 Gaming,Intel S2600CWTR
硬件
- CPU:2xIntel(R) Xeon(R) CPU E5-2609 v4
- 主板:Intel S2600CWTR(Revision ???, BIOS/UEFI 版本:SE5C610.86B.01.01.0022.062820171903)
- GPU:2xGigabyte GeForce GTX 1060 6GB G1 Gaming [GeForce GTX 1060 6GB] (rev a1)
- 内存:Samsung M393A2G40EB1-CPB 2133 MHz 64GB (4x16GB)
配置
- 内核:Linux 4.14.15-1-ARCH #1 SMP PREEMPT
- 使用 libvirt/QEMU:https://github.com/prauat/passvm/blob/master/generic.xml
- 最重要
- 当使用 nvidia 驱动程序时,向 guest 隐藏虚拟化 <kvm><hidden state='on'/></kvm>
- 配置适用于 Arch Linux guest 操作系统,仍在进行中。
Dinkonin 的虚拟游戏/工作设置
硬件
- CPU:Intel(R) Core(TM) i7-7700K CPU @ 4.60GHz
- 主板:MSI Z270 GAMING PRO CARBON (MS-7A63) BIOS 版本:1.80
- GPU:1x Gigabyte GeForce GTX 1050 2GB (主机), 1x MSI GeForce 1080 AERO 8GB(guest)
- 内存:32GB DDR4
配置
- 内核:内核版本 linux 4.15.2-2-ARCH。
- 使用 libvirt/QEMU (来自 AUR 的补丁) with OVMF
- 安装了来自 AUR 的 qemu-patched,因为使用 pulseaduio 时声音有爆裂声/延迟(游戏时仍然会听到偶尔的爆裂声/咔哒声)。
- 使用 https://github.com/Matoking/NVIDIA-vBIOS-VFIO-Patcher 修补了视频 bios,因为错误
vfio-pci 0000:01:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff
- 单显示器设置,已实施完整的软件KVM(用于主机和虚拟机),此处描述: https://rokups.github.io/#!pages/full-software-kvm-switch.md
pauledd 的普通设置
硬件
- CPU: Intel Core i7 6700K
- 主板: 技嘉 GA-Z170N-WIFI 零售版 (Revision 1.0 , BIOS/UEFI 版本: F20)
- GPU: 8GB Palit GeForce GTX 1070 Dual Aktiv PCIe 3.0 x16 (零售版)
- 内存: 16GB G.Skill RipJaws V DDR4-3200 DIMM CL16 双通道套装
配置
- 内核: 4.15.2-gentoo
- 使用 libvirt/QEMU: libvirt-4.0.0, qemu-2.11.1, https://github.com/pauledd/GPU-Passthrough/blob/master/win10-2.xml , 使用 vfio 内核模块
- 必须在主机正常连接 GPU(并加载驱动程序)时转储 VBIOS(参见 https://stackoverflow.com/a/42441234),必须根据我的 CPU 手动设置 CPU 设置(host-passthrough,sockets 1,cores: 4,threads: 2 )否则一些游戏会经常崩溃,请参阅我的 xml 文件了解如何插入 vbios,仍然存在 pulseaudio 音频咔嗒声/延迟,但这对我来说还可以,无需进一步修补等等.. 开箱即用,没有任何问题。
- 3DMark Time Spy 图形分数结果:原生 Windows 10: 5564 , GPU 直通: 5541
hkk 的 Windows 游戏机 (6700K, 1070, 16GB)
硬件
- CPU: Intel Core i7-6700K 4.5GHz
- 主板: 华擎 Fatal1ty Gaming K6 Z170 (rev. 1.05)
- 主机 GPU: Intel GPU HD530,带 1GB 共享内存
- 虚拟机 GPU: 技嘉 GeForce GTX1070 G1 Gaming 8GB
- 内存: 16GB G.Skill RipjawsV @ 3333 MHz CL14-15-15-31-2T [DDR4]
配置
- 主机内核: 内核版本 Linux 4.15.7-1-vfio (包含 ACS 补丁)。
- 使用 libvirt QEMU/KVM with OVMF
- 主机操作系统:Arch Linux
- Guest OS:Windows 10 Pro
- 128GB 英特尔 600p SSD 分成 3 个分区:512MB 用于 EFI,30GB 用于 Btrfs 中的 /,其他空间用于直接安装在 SSD 上的 Windows 10。
- 另有两块 HDD 用于 Windows。 1TB 和 650GB
- 直通了特定设备,如 X360 和一些独立的 USB 端口。
- VM 机器上的一个 NIC 在 NAT 之后。
- VM 通过静态大页获得 8GB 专用内存。
- CPU 绑定显著提高了性能,机器获得了我的 4/8 CPU 的 4/4 核心
- Windows 在第二个屏幕上启动,使用简单的脚本通过 xrandr 关闭显示器。
- 使用 Synergy 在系统之间共享鼠标和键盘。
- 怪癖:
- Synergy 并不完美,在某些游戏中无法完全工作。
- 没有启动画面。 只有当 Windows 启动并准备就绪时,显示器才会打开。
sitilge 的背叛
完整信息: https://github.com/sitilge/virtualization
硬件
- CPU: Intel Core i5 6600K
- 主板: 华硕 Z170i
- GPU: 技嘉 Radeon RX460 OC 2GB
- 存储: 三星 850 EVO 500GB
- 内存: 海盗船 16GB DDR4
- 鼠标,键盘: 罗技 M90, Vortex Pok3r
主机配置
- 内核: linux-vfio
- 软件包: qemu-git, virtio-win, ovmf
虚拟机配置
- 操作系统: Windows 10 Pro
- CPU: host
- 主板: host
- GPU: passthrough
- 存储: 64GB
- 内存: 8GB
- 鼠标,键盘: passthrough
注释
- 您可以使用
stow -t / boot mkinitcpio
轻松地符号链接配置文件,然后使用mkinitcpio -p linux-vfio
。 -smp cores=4
- 否则虚拟机可能只利用一个核心。-soundhw ac97
- 我正在直通主板音频,因此使用 ac97。 在虚拟机中下载、解压并安装 Realtek AC97 驱动程序。- 对块设备和网络都使用 virtio 驱动程序。 例如,ping 值从 250 降至 50。
- 鼠标和键盘直通解决了仿真模式下存在的可怕的延迟问题。
- 确保您的固件 (UEFI) 支持并启用了虚拟化。 在我的情况下,该选项隐藏在子菜单中。
- 尽管这听起来很普通,但请检查您的电缆。
- 要有耐心 - 虚拟机花了 10 多分钟才识别出 GPU。
chestm007 的黑客行为
硬件
- CPU: Ryzen 7 1800x
- 主板: 华硕 ROG Crosshair VI (Revision 1, BIOS/UEFI 版本: 3502)
- GPU: 华硕 ROG RX480oc 8GB
- 内存: 32gb Ripjaws 2400mhz
配置
- 内核: 4.16.12-1-ARCH。
- 使用 libvirt/QEMU: libvirtd (libvirt) 4.3.0, QEMU 模拟器版本 2.12.0,
注释
- 使用 ic6 音频 - 对我来说效果很好。
- 有一个看起来可以工作的 looking-glass 设置,但是无法让 spice 直通键盘和鼠标,目前使用 synergy 和专用屏幕的混合方式作为替代方案
Eduxstad 的不忠
硬件
- CPU: Ryzen 2600X @ 3.7 GHZ
- 主板: 华硕 PRIME B350-PLUS(BIOS/UEFI 版本: 4011)
- GPU1 (虚拟机): MSI 390 8GB @ 默认频率
- GPU2 (主机): XFX 550 4GB @ 默认频率
- 内存: 2 x 8GB (16GB) @ 3000 HZ
- 虚拟机操作系统: Windows 8.1 Embedded Pro
配置
- 内核: 4.17.3-1-ARCH (vanilla)。
- 使用 libvirt/QEMU: libvirt/virt-manager (https://github.com/eduxstad/vfio-config).
- 在存储库中查找有关采取的额外步骤的完整文档
- 概述:使用 virt-manager 管理的 VM,使用 looking glass 作为主要 IO,并内置 spice 显示服务器作为备份。 将 vm 音频传回 pulseaudio。 对 RAM 使用大页。 安装了 SCSI 驱动程序以支持硬件驱动器。
Pi 的 vr-vm
硬件
- CPU: i7-8700k @ 4.8 GHz
- 主板: MSI Gaming Pro Carbon (BIOS/UEFI 版本: A.40/5.12)
- GPU: Palit RTX 2080 Ti
- 内存: 4x8GB G.Skill DDR4 @ 3000 MHz
配置
- 内核: 最新的主线内核 (如果有 rc 版本)
- 使用 ZFS, WireGuard 定制构建
- CONFIG_PREEMPT_VOLUNTARY=y 用于解决 QEMU 虚拟机启动时间过长的问题
- 启动脚本/附加信息: https://github.com/PiMaker/Win10-VFIO
- 遇到的问题
- PUBG 根本无法启动
- 解决方案:启用 HyperV 时钟 <timer name='hypervclock' present='yes'/> 并禁用 hpet <timer name='hpet' present='no'/>
- VR 在大约 20-30 分钟的游戏时间后开始严重卡顿(这个问题我花了大约 2 周的时间才最终弄清楚 :-)
- 解决方案
- 启用不变 tsc 直通 <feature policy='require' name='invtsc'/>(即使使用 host-passthrough 也需要!)
- 为 GPU 启用 MSI(使用 此处 的工具)
- 在 HyperV 配置中启用 vAPIC 和 synic
- 使用我的 GitHub 存储库中的 qemu_fifo.sh 脚本手动将所有 IRQ 移动到主机核心
- 解决方案
- PUBG 根本无法启动
- 概述:支持 SteamVR 的游戏和工作站平台,直通 NVIDIA GPU 和板载 USB 控制器(为主机留下额外的 ASMedia USB 端口)。 22 GB 大页内存,直通 12 个核心中的 10 个(带 SMT)。 音频通过 Scream (https://github.com/duncanthrax/scream) 工作 - 使用 IVSHMEM,延迟出奇地低且没有卡顿。
coghex 的游戏主机
硬件
- CPU: i7-8086k @ 5.0 GHZ (8086k 只是一个体质更好的 8700k)
- 主板: 技嘉 Z370 AORUS Gaming 7 rev1.0 (BIOS/UEFI 版本: F15a)
- GPU: 技嘉 GV-N108TAORUSX WB-11GD AORUS GeForce GTX 1080 Ti Waterforce WB Xtreme Edition 11G @ ~2Ghz
- 内存: 4 x 8GB (32GB) 海盗船 Dominator Platinum @ 3600 HZ (XMP)
配置
- 内核: linux-zen-5.5.8.zen1-1
- 模块: raid0 raid1 md_mod ext4 vfat ahci vfio_pci vfio vfio_iommu_type1 vfio_virqfd usbhid it87 (aur 版本未维护,并且对此主板上的 ITE8686E 芯片的支持有限,将 it87 源代码替换为 此处 找到的源代码以获得更全面的支持)
- Virsh: virsh-5.10.0
- Qemu: qemu-system-x86_64-4.2.0 machine='pc-i440fx-4.2'
- 性能服务: irqbalance-1.6.0, ananicy-git-2.1.0.r22, cpupower5.5-1
- 编辑 (2020): 自从几年前发布此设置以来,情况发生了很大变化,并且此硬件上不再需要自定义内核,一切都完美运行...
- 脚本、libvirt XML 和个人配置可以在这里找到: https://github.com/coghex/hoest
- 主机启动选项: intel_iommu=on iommu=pt rd.driver.pre=vfio-pci acpi_enforce_resources=lax
- systemd modprobe.d 选项: kvm ignore_msrs=1 (避免严重错误), kvm report_ignored_msrs=N (清理日志)
- libvirt 功能: acpi, apic, kvm hidden state='on', vmport state='off'
- 虚拟机 hyper-v 选项: hv-relaxed, hv-vapic, hv-spinlocks (retries='8191'), hv-vpindex, hv-runtime, hv-synic, hv-stimer, hv-stimer-direct, hv-reset, hv-vendor_id (value='1234567890ab'), hv-frequencies, hv-reenlightenment, hv-tlbflush, hv-ipi, (hv-evmcs 和 hv-no-nonarch-coresharing 似乎在 virsh 中尚不可用)
- 确保为 GPU 的 hdmi 音频控制器使用多功能字段,并将它们设置为相同的插槽,否则音频中断将挂起。 有人应该将此添加到指南中...
- 我以 100Hz 的时钟频率运行,以 1000 频率运行 zen 或 ck 内核的人应该知道,无论速度如何,MuQSS 调度器的工作方式都相同,而 1000 只会增加更多无用的中断。
- cpu 绑定最适合单虚拟机性能,默认的 host-passthrough 最适合多个正在运行的虚拟机。
- 在 windows 上,每次更新都会使用 MSI_util_v2 来重置 GPU 上的 MSI 中断。
硬件特定
- 功能齐全的直通设备: 此主板具有许多 PCI 插槽,所有这些设备多年来都运行完美,只需少量设置
- 技嘉的专有软件都无法工作,事实上,它会让 windows 蓝屏,并将其自身安装为启动程序,永远将您拒之门外。
- 如果还有其他人使用这款完全相同的主板,即使使用 ACS 补丁,也有两个内部 USB IOMMU 组。 其中一个将包含标记为“USB 3.1”的 usb,另一个将包含所有其他 USB。 这意味着,如果您想要的不只是键盘和鼠标,您将需要一个 usb 集线器插入 3.1 插槽并直通,或者一个 PCIE USB 总线。
- 两个以太网端口位于不同的 IOMMU 组中,这使得这款主板非常适合 vfio。
- 如果您想在单独的 IOMMU 组中同时使用两张显卡,则需要在此主板上安装 ACS 补丁。 这会将主 GPU 设置为 PCIEx8 而不是 x16。
Roobre 的 VFIO 设置
硬件
- CPU: Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz
- 主板: 技嘉 Z390 M GAMING
- GPU: EVGA GTX 1080Ti
- 内存: 32GB DDR4 2400 (2x Ballistix)
配置
- 内核: 最新的 -ARCH (在撰写本文时为 5.9.1-arch1-1)
- 使用 libvirt/QEMU: libvirt 1:6.5.0-3, qemu 5.1.0-2。 配置: https://gist.github.com/roobre/8f2d86a51a6b619a6622a64a58f9fc94[死链 2025-01-22 ⓘ]
- ZFS 卷作为原始设备传递,用于带有 virtio-scsi 的硬盘驱动器。
- VirtIO 一切! 从 https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/ 下载驱动程序
问题
- Pulseaudio 从未工作良好(爆音太多),所以我最终直通了一个 USB 3.1 PCI 控制器,并将一个 USB 声卡连接到它。 然后将该卡连接到我的主板输入之一,并使用 pulseaudio 的 `loopback` 模块进行回声。
- Synergy 工作得非常好。 在某些游戏(那些控制鼠标指针的游戏,例如第一人称游戏)中,您需要将鼠标光标锁定到 VM 窗口以避免问题(相机移动太快)。
- 不要忘记为 nvidia 驱动程序添加所需的代码片段才能运行 (PCI 直通 via OVMF#"Error 43: Driver failed to load" with mobile (Optimus/max-q) nvidia GPUs)
laenco 的 VFIO 设置
硬件
- CPU: Ryzen 9 3950X @ 4.15Ghz 全核通过 PBO
- 主板: 华硕 ROG STRIX X470-F GAMING (BIOS/UEFI 版本: 5406)
- GPU1 (虚拟机): Palit GeForce GTX 1080 8GB @ 默认频率
- GPU2 (主机): MSI RX 570 8GB @ 默认频率
- RAM: 4 x 16GB (64GB) @ 3333 MHz
配置
- Guest OS:Windows 10 Pro
- 内核: 5.4.13-arch1-1-gc (-ck 也不错). 无 ACS 补丁。
- 使用原版 QEMU 4.2.0
- AMD Ryzen 目前 (2020.01.20) 在 SMP 线程选项上存在 bug - 虚拟机启动时卡住。
- 遇到经典的 Nvidia 错误 43 - 已按经典方法修复。但也添加了一些 CPU 标志,这些标志在使用 kvm=on 时会自动设置,详见 https://github.com/qemu/qemu/blob/master/target/i386/cpu.c#L4008
- 由于纯 QEMU 没有选项来绑定 CPU 核心和自身线程 - 使用 python 脚本 "cpu_affinity" - 感谢 https://github.com/zegelin/qemu-affinity/,我的仓库中也有一个副本。需要 debug-threads=on
- 使用动态分配的 2Mb 巨页
- 几乎不使用 VirtIO
- 使用硬件 USB 切换器,如 Aten US224-AT 和 HDMI 切换器 "many-to-one",这允许我使用一个显示器、鼠标、键盘和一些 USB 设备,并通过按钮在主机和虚拟机之间切换它们。
- 包含当前主要系统配置和虚拟机脚本的仓库可以在这里找到 https://github.com/laenco/vfio-config
zane 的无法工作的机器
硬件
- MacBook Pro 11,x (2014 型号)
- CPU: Intel Core i7-4770HQ
- 主板: Apple
- GPU: Iris Pro 5200 (用于主机), GTX 1660 eGPU (通过 Thunderbolt 2 用于虚拟机)
- RAM: 16GB
配置
- 内核: linux-vfio 来自 aur 5.5.8
- qemu: 4.2.0
- libvirt: 5.10.0
- ovmf: 1:r26976.bd85bf54c2
- libvirt/QEMU: libvirt 设置; qemu 设置
描述
- qemu 脚本包含用于设置设备映射文件以进行原始磁盘访问的行。3D 性能约为原生性能的 40% 到 80%,具体取决于应用程序,并伴有周期性的延迟峰值/卡顿。
问题
- 使用 apple_set_os.efi 或
spoof_osx_version
以及 refind 以避免启动时黑屏。这可以防止 Apple 固件在启动 Linux/Windows 时关闭主机 iGPU。 - 为虚拟机进行 CPU 绑定是强制性的,因为它消除了大部分卡顿。之后,隔离主机 CPU 核心并绑定模拟器/IO 线程。 Pi 的脚本 用于绑定 IRQ 处理程序也很有帮助。巨页内存也有帮助。
- 内核参数:
intel_iommu=on iommu=pt pcie_acs_override=downstream pci=realloc vfio-pci.ids=10de:2184,10de:1aeb,10de:1aec,10de:1aed,8086:0d01,8086:156d,8086:156c isolcpus=0-5 nohz_full=0-5 rcu_nocbs=0-5 default_hugepagesz=1G hugepagesz=1G hugepages=12 mitigations=off pcie_aspm=off module_blacklist=nvidia audit=0 loglevel=3 quiet
。 以mitigations=off
开头的所有内容都是可选的。pci=realloc
是强制性的,否则您将在 dmesg 中收到NVRM: This PCI I/O region assigned to your NVIDIA device is invalid: NVRM: BAR1 is 0M @ 0x0 (PCI:0000:0a:00.0)
错误,并在虚拟机中收到 Nvidia 驱动程序的 Error 43。 - 将
vfio_pci vfio vfio_iommu_type1 vfio_virqfd
正常添加到您的mkinitcpio.conf
中。 同样将options kvm ignore_msrs=1
和options kvm report_ignored_msrs=N
添加到您的/etc/modprobe.d/kvm.conf
中。 - 对我来说,ACSO 补丁是强制性的,可以从 linux-vfio aur 获取。
- 为虚拟机 GPU 启用 MSI 似乎有所帮助。 使用
ioh3420
设备并在其之上直通 GPU 似乎没有帮助,反而使 PulseAudio 输出出现严重爆音。 将 PulseAudio 的mixing-engine=off
设置为 off 也会使其爆音严重,因此如果需要,请考虑使用 USB 声卡。(我个人使用虚拟机显示器上的声音输出)。 虽然我不确定此选项的作用,但在 PulseAudio audiodev 上设置in.buffer-length
可以减少爆音。
Muata 的 VFIO 设置
硬件
- CPU: i7 4790
- 主板: MSI B85M-G43 BIOS/UEFI 版本: V3.9 (03/30/2015)
- GPU: NVIDIA GeForce GTX 1060 6GB (MSI Gaming+)
- RAM: 16GB
配置
- 内核: linux-zen 5.5.11-1
- 使用 libvirt/QEMU: VFIO 设置;
- qemu: 4.2.0
- libvirt: 5.10.0
- 在撰写本文时没有问题。
> 我在网络方面遇到了一些问题,例如,我无法连接到 Activision 游戏服务器(CoD: MW,Overwatch),但我已将防火墙设置从公共更改为专用,现在一切都很好。
> 第一次,我在 .raw 镜像上安装了 windows,磁盘受到很大限制,我在我的 2 个 HDD 上设置了 raid0,然后我使用 LVM 创建了 3 个分区 - 120GB 用于 windows,700GB 用于数据(游戏),700gb 用于 Linux 数据,并将两个分区直通为 Virtio-BLK。 RAID&LVM
> 音频直通是通过常用的 PulseAudio 解决方案完成的,效果很好。
> 对于一些可能正在寻找如何直通 GPU 的人 - 因为当您第一次执行此操作时它并不明显,而且维基上也没有,所以当您传递正确的 vfio-pci.ids 组时,您需要在(最简单的方法)虚拟机管理器中添加硬件 - PCI 主机设备 - 您的显卡(对我来说是 0000:01:00:0 NVIDIA Corporation GP106 [GeForce GTX 1060 6GB])。
peterge 的 VFIO 设置
硬件
- CPU: AMD Ryzen 5 3700X
- 主板: MSI x370 Gaming Pro Carbon
- GPU: SAPPHIRE PULSE Radeon RX 5700 XT (主机), MSI RX 570 (虚拟机)
- RAM: 32GB
配置
- 内核: 5.11.11-arch1-1
- 使用 libvirt/QEMU: Xml 文件
- 目前没有问题。
> 使用 evdev 进行鼠标和键盘直通。
> 显示器连接到两个 GPU 以显示原生 144hz。
> 在 /etc/modprobe.d/kvm.conf
中需要此选项,与我的 Ryzen CPU 相关: options kvm ignore_msrs
> 使用 ICH6 设备将声音传递到主机时遇到问题,声音有噼啪声并且有点延迟。 然后切换到 scream-ivshmem,现在声音工作完美。 与 looking-glass 结合使用非常棒。
> 尝试构建一个解决方案,我可以在主机和虚拟机上使用我的主 GPU (GTX 1080),通过重新绑定驱动程序。 重新绑定驱动程序在 GTX 1080 上有效,但那时无法使用它来卸载主机 gpu 的游戏 Reddit 帖子 (让它与主机的 R9 380 一起工作,但每次都需要重启 xorg)。 然后购买了 RX 5700 XT,GPU 卸载就像一个魅力,但由于驱动程序支持的早期阶段,驱动程序重新绑定不受支持 Reddit 帖子。 所以我目前在我的设备中有 2 个 GPU。
CaptainSolidus 的 VFIO 设置
硬件
- CPU: Intel Xeon E3-1245 V2
- 主板: Gigabyte Z77A-G45 (BIOS/UEFI 版本: 2.12)
- 主机 GPU: AMD ATI Radeon HD 7950/8950 / R9 280 (启用 SI 支持的 AMDGPU)
- 虚拟机 GPU: NVIDIA GeForce GTX 1060 6GB
- RAM: 2x8GB DDR3 1600 (8 用于主机,8 用于虚拟机)
配置
- 内核: 5.7.4-1 (ACS-patched)
- 使用 libvirt/QEMU: libvirt 6.4.0/QEMU 5.0.0 VFIO 仓库
- 虚拟机操作系统: Windows 10 Pro 2004
- 主板将所有 PCIe 通道放在一个 IOMMU 组中,并且无法在 BIOS 中编辑,因此使用了 ACS 补丁。 似乎没有由此产生的问题。
- CPU 绑定效果最佳,直通 CPU 1,2,3,5,6,7,留下 0 & 4 用于主机。 使用 "host-model" 作为 CPU 类型并设置拓扑有助于解决基准测试期间的边缘情况崩溃
- Intel 集成显卡也运行良好,但我保留了 R9 280 用于任何 Linux 原生或较旧的程序。 两个 GPU 都可以与 Looking Glass 一起工作。
- 切换到 VirtIO 驱动程序用于 SCSI 和网络,以及 ICH9 用于音频。
- 键盘和鼠标通过 evdev 方法 直通
- 使用 PulseAudio 直通时音频出现爆音,所以我切换到通过桥接网络的 Scream,效果完美。 Scream 客户端随系统启动,因此我无需在启动时启用它。
- Looking Glass 也已设置好,并且在客户端上运行良好。 Looking Glass 客户端设置为随虚拟机启动,虚拟机设置为自动登录 (通过 netplwiz)
- 设置 睡眠预防 将有助于防止主机在虚拟机中游戏时进入睡眠状态
ash 的游戏机
硬件
- CPU: Intel i5-8600k
- 主板: Aorus Z390 Ultra, rev. 1
- GPU: 直通: AsRock Radeon Vega 56. 主机: Intel UHD 630
- RAM: 32GB G.SKILL Trident Z Neo, 16GB 用于 Windows
配置
- 使用 libvirt/QEMU: 通过 virt-manager 的 libvirt, QEMU 带有自定义补丁,可以在 这里 找到
- 我在让虚拟机启动时遇到了很多问题。 我首先必须完全禁用我的
amdgpu
内核驱动程序,主要是在/etc/modprobe.d/blacklist.conf
中。 然后我必须将我的 GPU id 从lscpi -nnk
添加到/etc/modprobe.d/vfio.conf
。 我还必须强制 Xorg 在名为/etc/X11/xorg.conf.d/10-intel.conf
的文件中使用我的 Intel GPU。 在将所有这些与主 PCI 直通页面中的信息结合起来之后,我才能够让一切启动。
- 我所有的配置文件都在 这里
- 我修补了一些上游 arch 软件包,主要用于 VM 检测规避。 这些软件包是 QEMU,OVMF (edk2) 和 linux-zen 内核。 这些补丁可以在 这个仓库 中找到。 它还包括 releases 部分下软件包的预构建版本。 快去看看吧!
Redecorating 在 MacBookPro 上的 vfio
硬件
- CPU: Intel i7-9750H
- 主板: MacBookPro16,1 (BIOS/UEFI 版本: 1554.80.3.0.0 (iBridge: 18.16.14347.0.0,0))
- 虚拟机 GPU: AMD ATI Radeon RX Pro 5300M + Intel gvt-t 虚拟 gpu
- 主机 GPU: Intel UHD Graphics 630
- RAM: 16GB, 8GB 用于虚拟机
配置
- 内核: 5.10.12 (linux-mbp, 适用于带有 t2 芯片的 mac)。
- 使用 libvirt/QEMU: Libvirt (qemu 后端)
- 按照 这里 描述的方式启用 iGPU。
- 必须从启动时使用 vfio-pci 隔离 dGPU 并使用 vendor-reset。 需要直通我的 usb-c 端口,因为它们在同一个 iommu 组中,但不包括 thunderbolt(如果直通,虚拟机 gpu 驱动程序将不会加载)。 只能安装 Apple "bootcamp 支持软件" 附带的虚拟机 gpu 驱动程序。
- Libvirt xml 和我对必须解决的怪癖的更详细的解释在此 gist 中。
- 尽管此笔记本电脑中有一个 gmux 芯片,但尚不清楚如何在不重启的情况下使内部显示器在 iGPU 和 dGPU 之间切换。
sashok724 的 VFIO 设置
硬件
- CPU: Ryzen 3950X
- 主板: ASUS X570 Hero WiFi
- GPU (主机): RX 5700 XT
- GPU (虚拟机): GTX 1080 Ti
- RAM: 16x4 GB (64GB) @ 3600MHz CL16
配置
- 内核: 默认
- 使用 QEMU: 6.0.0
- 一切都基本开箱即用。 我只需要在 UEFI 中启用 IOMMU。
- 包含我的配置的仓库: https://github.com/new-sashok724/windows.sh/
- 我正在使用 systemd 单元启动虚拟机
- 我还直通了虚拟机内部的单独 USB 控制器
- 在我的情况下,不需要 KVM 隐藏状态,因为 NVidia 最近允许在虚拟机中使用他们的 GPU
- 音频 (HDA) 也开箱即用,运行良好,没有任何卡顿
QGJ 的 VFIO 设置 (CPU: Ryzen 5 3600XT / GPU: AMD RX 570)
硬件
- CPU: AMD Ryzen 5 3600XT
- 主板: MSI X470 Gaming Plus Max; BIOS 版本: 7B79vHC
- GPU (主机): AMD Radeon R5 230
- GPU (虚拟机): MSI Radeon RX 570 Gaming X 4GB
- RAM: 32 GB DDR4 双通道模式 @ 3000 MHz
配置
- 发行版: Gentoo
- 内核: sys-kernel/gentoo-sources:5.15.5
- libvirt: 7.7.0
- QEMU: 6.0.0 (带有 ACPI 表补丁 - Red Dead Redemption 2 需要)
- 虚拟机: Windows 11 Pro, macOS Monterey
- 我的设置链接: https://github.com/q-g-j/gentoo-stuff[死链 2023-05-06 ⓘ]
注释
- 需要 vendor-reset 内核模块 (奇怪的是仅在使用 macOS 时需要)
- 在内核模块 kvm_amd 中启用 avic
- 修复了我的 Ryzen 的 L3 缓存
- 直通板载 USB 3 控制器
- 使用自定义的 libvirt hook 脚本,具有以下功能:
- 设置 CPU 调速器
- 启用/禁用一些内核优化
- 启用/禁用大页内存 (hugepages)
- 启用/禁用 WLAN 桥接
- 启动/停止 scream 音频,并使用自定义参数
- 在主机和虚拟机中交替使用一个或多个 PCI 设备 (virsh nodedev-detach / nodedev-reattach) - WLAN 桥接:使用 "parprouted" 将 WLAN 接口和网桥 “连接” 到同一个子网
- 已修补 QEMU 并修改了 XML,以避免在游戏 “Red Dead Redemption 2” 中崩溃
- macOS:使用我自己的 OpenCore 镜像,针对 Ryzen CPU (AMD 原生补丁) 进行了优化,并带有一些额外的 kexts
- 安装了一个最小化的 Arch Linux 作为我的第二个发行版 (与 Gentoo 双启动)。这个发行版以无头模式运行,并自动启动两个 Windows 10 实例 - 每个 GPU 上一个。多人游戏效果很好。只需要禁用 radeon 和 amdgpu 驱动即可。
Zexceil 的 VFIO 设置
硬件
- CPU:AMD Ryzen 5 1600 (非 AF)
- 主板:ASUS Crosshair VII Hero(Wi-Fi) (BIOS/UEFI 版本:4402, AGESA V2 PI 1.2.0.3 Patch A)
- 主机 GPU:Nvidia Quadro NVS 510 2GB
- 虚拟机 GPU:XFX RX 580 8GB GTS XXX
- 内存:4x8GB,32GB~2666Mhz
配置
- 发行版:Endeavour OS
- 内核:默认打包内核 (5.13.8-arch1-1 07/08/2021) 并已 vendor-reset 补丁
- libvirt: 7.6.0
- QEMU: 6.0.0
- 虚拟机:Windows 10 Pro
- 虚拟机 XML:https://pastebin.com/50ZhZA1c
- 使用 libvirt/QEMU
- 确保除 emulatorpin/iothread 之外的所有 CPU 都使用 performance 调速器,否则会体验到卡顿。其他 CPU 使用 powersave 以保持良好的散热。
- 必须运行模块 "kvm" 和 "kvm_amd" 并带有选项 "ignore msrs=1" 和 "nested=1",否则 CPU 直通将无法工作,Win10 中的 Hyper-V 也无法工作 (提供体面且无错误的性能)。
- 我不使用任何类似 spice/looking-glass 的东西,虚拟机 GPU 连接到辅助显示器输入。
- 为了获得不错的性能,我将 CPU 超频至 4GHz。
- Resize-BAR 工作正常。
- 在内核 5.14-rc4 (从源代码编译) 上测试过,工作正常。
- 确保安装 VirtIO 驱动程序以支持 KB/鼠标 (显而易见的事情,但我遇到了糟糕的 KB/鼠标性能,之后才意识到需要安装)。
UtkarshVerma 的 VFIO 设置
硬件
- CPU:AMD Ryzen 3550H
- 主板:TUF Gaming FX505DT_FX505DT 1.0 (BIOS/UEFI 版本:FX505DT.316)
- GPU:NVIDIA GeForce GTX 1650
- 内存: 8GB
配置
- 脚本:https://github.com/UtkarshVerma/qemu-vfio-win10
- 内核:Linux 5.14.1
- 使用 libvirt/QEMU:QEMU (纯 QEMU)
- 运行虚拟机非常简单,只需 `sudo ./launch.sh`。它以与发行版无关的方式处理以下所有提到的内容。
- 大页内存 (Hugepages)
- HyperV enlightenments (HyperV 优化)
- NVIDIA GPU 的动态 VFIO 直通,即虚拟机退出后,GPU 可供主机使用。
- 支持 NVIDIA 运行时 D3 电源管理
- 使用 persistent-evdev.py 的 evdev 直通
- Looking Glass:SPICE 输入和剪贴板共享;DMA 缓冲区支持;自动共享内存创建
- virtio 设备
- pulseaudio 音频设备直通
- 使用 qemu-affinity 的 CPU 绑定
- CPU 调速器配置
- 使用 jemalloc() 内存分配器运行 QEMU
Shimmy 的 VFIO 设置
硬件
- CPU:AMD Ryzen 5 1600 (原始版,非 AF) OC @ 3.6 GHz
- 主板:MSI B350 Gaming Plus (BIOS/UEFI 版本:7A34vMHS)
- 主机 GPU:XFX AMD Radeon RX 550 2 GB
- 虚拟机 GPU:ASUS AMD RX 6600 XT DUAL OC 8GB GDDR6
- 内存:32 GB,2x16GB @ 3200 MHz OC (在 BIOS 中设置,内存原生 3200) 双通道
- 存储:Crucial MX500 1 TB (完全专用于虚拟机)
配置
- 主机操作系统:Arch Linux 5.16.11
- 虚拟机操作系统:Windows 10 家庭版
- 使用 libvirt/QEMU:QEMU 6.2.0, libvirt 8.0.0
- XML 配置
- 曾经使用 Gigabyte GTX 1050 Ti 作为虚拟机 GPU
- 为了实现 CPU 直通,我必须运行 `kvm ignore_msrs` 选项。
- CPU 核心绑定 + systemd 分离,在虚拟机运行时生效
- 虚拟机直接连接到 4K @ 144Hz 显示器,以及通过 Steam Link 连接到电视运行
- Looking Glass 设置,但很少使用
- 运行桥接网络,以允许从电视访问 LAN
- 通过 virt-manager 或 Cockpit 管理,以远程启动虚拟机
- 我有一个单独的 “no evdev” 设置,以防我想在没有任何 evdev 设备的情况下运行虚拟机
- 在我的配置中需要 `softdep amdgpu pre: vfio-pci` modprobe,以防止 amdgpu 驱动程序首先接管虚拟机 GPU。由于某些原因,mkinitcpio 中的 MODULES 排序不起作用。
yv-fr VFIO 设置 (CPU: Ryzen 3900 / GPU: 1080 & 3090)
硬件
- CPU:AMD Ryzen 9 3900X 12 核 @ 24x 3.8GHz
- 主板:ASRock x570 Taichi / Bios 版本=P4.40
- 主机 GPU:NVIDIA GeForce GTX 1080 水冷
- 虚拟机 GPU:NVIDIA GeForce GTX 3090 水冷
- 内存:GSKILL GTRZ 16GB 4200 @3333
- 存储:虚拟机专用 SSD。
配置
- 发行版:Archcraft
- 内核:x86_64 Linux 5.16.11-arch1-1
- QEMU:(在运行任何东西之前,从这个 REDDIT 帖子获取 ACPI 表补丁版本。如果不是 Windows,则保留预先修补的 ACPI 信息 - Red Dead Redemption 2 需要)
- 虚拟机:Windows 11 Pro
- 我的设置链接:XML
- 虚拟机 GPU 在虚拟机退出后无法被主机使用。
- 在这台 X570 上,并非所有 USB 端口都在同一个 IOMMU 组中。
注释
- 通过使用 pastebin 链接中使用的 vcpu 修复了 L3 缓存。
- 使用 udev 键盘+鼠标直通
- 来自主机的声音,没有撕裂
- 以下链接对我在 wiki 上构建此虚拟化非常有帮助。感谢他们
https://www.tauceti.blog/posts/linux-amd-x570-nvidia-gpu-pci-passthrough-1-the-hardware/ https://www.heiko-sieger.info/windows-10-vfio-passthrough-configuration/
Drakensons VFIO 设置
硬件
- CPU:Ryzen 5700G
- 主板:MAG B550 TOMAHAWK
- GPU:Nvidia GTX1070
- 主机 GPU:CPU 的 iGPU - 提示:在选择主板时,请寻找具有足够板载视频输出的主板!
- 内存:32GB Crucial Ballistix DDR4-3200 (16G 分配给虚拟机)
- 存储:1x 512G Samsung 970 Evo Plus (NVMe), 1x 1TB WD blue SSD (SATA), 1x 2TB Samsung 970 Evo Plus (NVMe) - 每个都包含来自我主机的其他数据以及一个 .raw 镜像文件,映射到虚拟机,主机上使用 BTRFS,这些文件位于一个单独的子卷中,并禁用了 COW。
配置
- 内核:原生 Arch 内核,无补丁
- libvirt/QEMU:使用 libvirt
- 虚拟机:Windows 10 专业版 (为了可以使用 RDP 登录到虚拟机)
- 配置文件:Github
- 优化:
- 使用了 CPU 绑定,为虚拟机分配了 6 个核心 (12 个线程),使用核心 7 的两个线程作为 iothread,留下核心 8 及其线程供主机系统用于 Youtube 等。
- 使用 Looking Glass 访问虚拟机,我的旧版本只为虚拟机分配了 3 个核心,在那里我遇到了大量的掉帧,在这个系统上,它在 1920x1080@60 下运行绝对流畅
- 使用 Scream 将音频重定向到主机,与 Looking Glass 类似,在当前系统上完全没有问题。
- 我遇到了一些关于 vfio 驱动程序的问题,其中 nvidia 显卡初始化了 efi framebuffer,这导致了一些问题,例如虚拟机无法启动或主机启动期间没有图像输出。这些问题可以通过使用
video=efifb:off
内核参数来解决。 - 我正在为动态大页内存使用动态大页内存,因为感觉虚拟机以这种方式运行更流畅,为了初始化这些,我正在使用 qemu libvirt hook,如我的配置文件中所示。
- 键盘和鼠标通过 evdev 直通 - 在使用雷蛇外围设备时,这有一个优点,即颜色和宏键可以在 linux 下配置,无需在虚拟机上安装 synapse 驱动程序。
JudgeHolden 的设置
硬件
- CPU:Ryzen 5900x
- 主板:x570 Aorus Master
- GPU:Nvidia RTX 3070, Nvidia RTX 3080 Ti
- 内存:32 GB (16x2), DDR4-3200 CL 14-14-14-34
配置
- 内核:原生 Arch ACS-Patch
- 使用 libvirt/QEMU
- 我遇到的唯一明显的问题是,经过长时间的运行后,虚拟机(们) 似乎开始随机变得迟缓。我通过内核命令行实现 hugepagesz 解决了这个问题:`BOOT_IMAGE=/vmlinuz-linux root=UUID=4c86c780-3d89-4763-8f94-74f71dd009f1 rw loglevel=3 quiet kvm.ignore_msrs=1 video=efifb:off pcie_aspm=off pcie_acs_override=downstream,multifunction mitigations=off default_hugepagesz=1G hugepagesz=1G hugepages=16`
- 我不绑定或隔离任何核心。我运行一个 win10 企业版虚拟机实例,每个虚拟机利用一个 GPU。我的 3080 Ti 虚拟机使用主板的声卡,另一个虚拟机使用我的 3070 的声卡 (显示器 aux 输出)。我设置了一个网桥 (通过 nmtui),以便所有驱动器都可以在网络上共享 (以及从虚拟机和主机托管偶尔的游戏服务器)。我为两个虚拟机都使用了 USB 控制器直通。3080 Ti 插入了一台 4k 55 英寸电视,电视放置在沙发前 3-4 英尺处 (xbox 控制器、无线 kbm/触摸板、有线 kbm 和 usb 切换器都在附近),而 3070 插入了一台带有游戏鼠标和键盘的 240hz 显示器。在任何一个虚拟机上,唯一虚拟/virtio 设备是 virtio 网卡 (如果你不算 CPU 的话),以及 3080 Ti 虚拟机上的一个块设备 HDD。
3080 Ti XML: http://ix.io/4jyV[死链 2024-01-13 ⓘ] 3070 XML: http://ix.io/4jyW[死链 2024-01-13 ⓘ]
我曾经为两个虚拟机分配了 28 个 hugepagesz,但从那以后我更多地使用了主机桌面,所以我需要释放一些 RAM。到目前为止,自从只给 3080 Ti 虚拟机分配 hugepagesz 以来,3070 虚拟机上没有出现性能问题
Nedia 的设置
硬件
- CPU:i5 13600K
- 主板:MSI MPG Z790I EDGE WIFI
- GPU:MSI Radeon RX 6750 XT
- 内存:32GB 5200MHz DDR5
配置
- 内核:原生
- 使用 libvirt/QEMU:libvirt
- XML:https://git.sr.ht/~nedia/vm/tree/main/item/win11.xml
- 虚拟机:用于游戏的 Windows 11。
- 在 BIOS 中禁用 Resizable BAR。
- CPU 核心 0 未绑定,留给主机,核心 1-5 (线程 2-11) 绑定,以便我的虚拟机将使用我的 CPU 的所有性能核心。最初绑定了线程 2-13,这导致了问题 (卡顿)。
- 用于连接蓝牙设备 (耳机、控制器) 的专用蓝牙适配器。
- 用于游戏的 512GB SCSI 磁盘,以及用于游戏的 2 个 NVMe SSD (PCI 直通)。
Aym vfio 设置
在 X570 设置上使用,用于运行主机 (archlinux) 和两个额外的虚拟机,每个虚拟机都有自己的 GPU
硬件
- CPU:Ryzen 5950x
- 主板:Gigabyte Aorus X570 Master 1.2 最新 bios
- GPU:
- 主机:Nvidia RTX 3060Ti
- 虚拟机 1:Nvidia RTX 3070
- 虚拟机 2:Nvidia RTX 3070
- 内存:4x16Gb Gskill B-Die 3200 cl14
- USB:额外的 USB Pciex1 来自 Fresco Logic FL1100
- 显示器:3x IPS,144hz , 240 hz , 280 hz
配置
- 内核:Archlinux 内核 6.4 (使用内核 >6.0 时存在错误,因此 vfio 在加载模块时稍后完成 帖子)
- 使用 libvirt/QEMU KVM 8.1
- 同时使用主机和 2 个虚拟机 (Windows 或 archlinux)
- 脚本、libvirt XML 和个人配置可以在这里找到: config
- USB 通过自己的组直通,因此 2 个虚拟机拥有自己的 USB 控制器 (一个来自主板,一个来自 Fresco)
- GPU 通过带有 Pcie4.0 标准的延长线连接
- 2xNVME 通过它们自己的组直通到虚拟机,一个 NVME 用于主机
- 使用隔离的 NIC 用于与虚拟机内部通信
- 使用 Barrier 通过 TCP 通信,以便在虚拟机上获取鼠标和键盘
- CPU 绑定完成 VM1:cpuset="8-11,24-27">8 核 VM2:cpuset="12-15,28-31">8 核
- DKMS vendor-reset-dkms-git 消除重启虚拟机时的错误
- 通过 Pipewire-pulse 音频直通
- 通过 这个教程 添加了 CPU 亲和性
- NIC 已通过 MACTAP 直通
- 延迟非常稳定,尖峰仅由 Nvidia 内核驱动程序偶尔产生
- MSI 中断通过 MSI_util_v2 完成
- 缩放调速器由 Hooks 触发,如 MASK 亲和性 Hooks/qemu.conf
- 主机 GPU 位于 PCiex16 插槽 3 中,标记为从 Gigabyte bios 启动。芯片组带宽没有受到影响或被注意到。
- 大页内存分为 2x16Gb 内存,每个虚拟机一份
Alydev vfio 设置
硬件
- 笔记本电脑:Acer Nitro 5 AN515-57
- CPU:i5-11400H @ 2.70GHz
- GPU:GeForce RTX 3050 Mobile
- 内存:24gb 通用 SODIMM DDR4
配置
- 总结:OVMF 在 NVIDIA 笔记本电脑上,Arch 主机,Windows 10 虚拟机,pcie 直通,Looking Glass 用于笔记本电脑显示器,同步屏幕空闲变黑,蓝牙设备直通和 evdev 热插拔,GRUB 启动项用于在 Windows 拥有 GPU 和 Arch 保留 GPU 控制权之间切换
详细信息和配置可以在用户的 GitHub 仓库中找到。
- 内核:6.7.4-arch1-1
- 使用 libvirt 10.0.0,QEMU 8.2.0
- 使用 persistent-evdev 进行热插拔和蓝牙外围设备直通:aiberia/persistent-evdev
- 在 Windows 上使用 Looking Glass 用于笔记本电脑显示器
- 通过 SSH 的 DPMS 触发器来同步屏幕关闭
添加您自己的设置
添加一个新章节,包含您的昵称、CPU、主板和 GPU 型号,然后复制粘贴此模板到您的章节
Hardware: * '''CPU''': * '''Motherboard''': * '''GPU''': * '''RAM''': Configuration: * '''Kernel''': Kernel version (vanilla/CK/Zen/ACS-patched or not). * Using '''libvirt/QEMU''': * Issues you have encountered, special steps taken to make something work a bit better, etc. * Describe your setup loosely here, so that when other wiki users are looking for something, they can easily skim through available setups.
用您自己的数据替换相应的章节。请务必提供确切的主板型号、修订版本(如果可能 - 应在主板本身和包装盒上)以及您正在使用的 BIOS/UEFI 版本。描述您确切的软件设置并添加指向您的配置文件的链接。(GitHub、GitLab、BitBucket 等可以托管一个公共仓库,您可以偶尔更新,但将它们上传到 pastebins 也可以。不要在此处发布整个配置文件内容。)