首页 / 资讯中心 / 文章详情

RTX 5080 GPU直通实战:Kylin V11环境下的VFIO完整配置指南

RTX 5080 GPU直通实战:Kylin V11环境下的VFIO完整配置指南 ★ FEATURED ARTICLE
去年我把一块 RTX 5080 塞进银河麒麟高级服务器操作系统 V11 的虚拟机里时差点让宿主机和虚拟机抢同一张卡那是我在整个 GPU 直通VFIO项目里踩过的最蠢的坑。GPU 直通这件事听上去就是改一串内核参数的事实际从 BIOS 到 libvirt 的 XML 配置每个环节都藏着暗坑。我这台机器的最终形态很典型Intel i7 平台做宿主银河麒麟高级服务器操作系统 V11 跑底层RTX 5080 整卡直通给 KVM/QEMU libvirt 管理的虚拟机宿主机自己的显示输出全部交给一块 GT 710 亮机卡。这篇文章就把整条链路从头捋一遍为什么要用双显卡、BIOS 怎么设、IOMMU 分组怎么看、VFIO 怎么接管、libvirt 的 XML 怎么写再到黑屏和 Code 43 这类高频事故的排查顺序。写这篇不是给纯新手看概念而是给那些正在 Kylin 这类 Linux 发行版上做虚拟化并且手头正好有新款 NVIDIA 显卡要直通的朋友一份可以照着抄的实战记录。1. 先想明白亮机卡双显卡方案到底解决了什么问题1.1 单卡直通的死结宿主和虚拟机没法同时用一块 5080VFIO 直通的本质是把某个 PCI 设备从宿主机内核手里摘出来交给用户态的 QEMU 进程直接管理。这个动作一旦完成宿主机这边就彻底看不到这块卡了——不是少用一点显存而是整块卡从lspci里消失nvidia-smi也找不到它它变成虚拟机的私有财产。问题就出在这里如果宿主机只有这一张 RTX 5080你又想用它直通那么宿主机的显示输出从哪来很多人第一反应是先把卡给宿主用着虚拟机要启动时再切换实际操作中你会发现自己陷入一个零和博弈要么宿主有画面要么虚拟机拿到卡永远二选一。服务器可以全程 SSH 无头运行但一旦虚拟机黑屏、GPU 初始化失败你连本地排查的手段都没有。所以亮机卡这个看似土气的方案其实是虚拟化场景里的标准解法。它的唯一职责就是让宿主机保持一个可用的显示输出把 RTX 5080 彻底解放出来让这张贵的卡只服务于虚拟机。1.2 GT 710 这类亮机卡的选择标准亮机卡不是随便拿一张旧卡就行有几个硬指标我当时是翻过车的功耗和尺寸GT 710 最大功耗 25W 左右不需要外接供电插上就能亮。很多旧卡是双槽大散热器会导致 5080 旁边那个 PCIe x16 插槽被物理挡住选卡之前先量一下机箱和主板间距。输出接口GT 710 一般带 DVI 和 HDMI。我强烈建议用 DVI 口做宿主显示很多亮机卡的 HDMI 是老的 1.4 接口在部分显示器上开机阶段握手慢容易让人误以为黑了屏。DVI 虽然老但稳定亮机卡要的就是稳定地亮着。驱动支持GT 710 属于 GK208 核心Linux 内核自带的 nouveau 驱动开箱即用不需要你手动折腾闭源驱动。这一点非常关键因为宿主机上驱动越少和 VFIO 的冲突面就越小。插槽位置注意别把 GT 710 插到和 5080 共享 PCIe 通道的那个槽位上。有些主板的第二条 x16 物理槽会吃掉第一条槽的一半通道导致 5080 从 x16 掉到 x8。优先把亮机卡插到芯片组提供的 x4 或 x1 槽上CPU 直连的那组槽留给 5080。1.3 有没有不插亮机卡的路子如果你的 i7 不是 F 后缀核显其实是更好的选择。很多消费级主板在插了独显之后依然可以在 BIOS 里把 Primary Display 设为 iGPU让核显负责宿主输出。这样的话 GT 710 都可以省了。但服务器领域有个尴尬不少板子在检测到独立显卡后默认把核显输出禁用或者对应的显示接口根本被跳线绕过了。这种板子上一张 GT 710 反而是最快的解法。我的建议是先看主板说明书确认核显输出可用性不行再上亮机卡。另外还有一种无头模式——宿主完全不要本地显示全部靠 SSH 管理把显示器只接在 5080 上看虚拟机画面。这条路可行但调试时非常痛苦因为你无法同时看到宿主日志和虚拟机画面。所以 GT 710 在我这里是保险 方便不是绝对必须但强烈建议保留。2. 银河麒麟 V11 环境准备BIOS、内核参数与虚拟化组件安装2.1 进 BIOS 先改这几个选项直通之前BIOS 是第一个容易翻车的地方。我见过有人折腾了两天内核参数最后发现是 VT-d 压根没开。以 Intel 平台为例需要确认这几项VT-d有些主板叫 Intel Virtualization Technology for Directed I/O有些叫 VT for Directed I/O必须 Enable。没有它Intel 平台的 IOMMU 起不来VFIO 就是空谈。Above 4G Decoding这个名字在部分主板上和 Resizable BAR 选项挨在一起。RTX 5080 的显存是 16GB它的 BAR 空间远超 4GB 地址边界如果这个选项关闭BIOS 没法把 5080 的 MMIO 区域放到高位地址直通后虚拟机里经常直接认不到卡。CSM 与启动模式如果虚拟机要装 Windows 11宿主机的启动模式其实无所谓关键是虚拟机固件要 UEFI。但宿主机这边如果启用了 CSM会带来一个隐藏风险——部分老亮机卡的 Option ROM 不是 UEFI 规范的CSM 关闭后 GT 710 在开机自检阶段可能没有任何输出。我的建议是默认关掉 CSM如果 GT 710 开机黑屏再临时把 CSM 开回来不要让虚拟化的配置迁就这个。Primary Display把首选显示设备设为 GT 710 所在的插槽绝不能让 5080 变成宿主机的 VGA 仲裁主设备。这一步如果反了后面 vfio-pci 接管时会和 vgaarb 打架麻烦得很。改完 BIOS 保存重启先进系统确认 CPU 虚拟化可用grep -E (vmx|svm) /proc/cpuinfo ls /dev/kvm如果ls /dev/kvm不存在大概率是 BIOS 里 VT-x 也没开或者内核没有加载 kvm 模块。2.2 在 V11 上装 KVM/QEMU 和 libvirt银河麒麟这个发行版有个特点高级服务器版走 RPM 系桌面和通用版走 Deb 系。所以安装命令不能一概而论。我这台 V11 服务器版用的是 dnfdnf install -y qemu-kvm libvirt-daemon libvirt-client virt-install edk2-ovmf bridge-utils systemctl enable --now libvirtd如果你的 V11 是通用版或者发行源的软件管理是 apt对应的是apt install -y qemu-system-x86 libvirt-daemon-system virtinst ovmf systemctl enable --now libvirtd这里我最想提醒的是一定确认 edk2-ovmf 装上了。它的软件包名在不同发行版上不一样RPM 系叫edk2-ovmfDeb 系叫ovmf。如果没装后面虚拟机没法用 UEFI 引导5080 这种大显存卡在传统 BIOS 固件的虚拟机上很容易出幺蛾子。装完后跑一下systemctl status libvirtd再检查默认网络virsh net-list --all virsh net-start default既然说到安装软件顺带提一句银河麒麟用户常问的命令差异RPM 系的服务器版用dnf install xxxDeb 系的通用版用apt install xxx。拿不准就dnf --version试一下能出版本号就是 RPM 系。搞混了会浪费不少时间。2.3 内核参数 intel_iommuon 和 iommupt 分别是什么IOMMU 可以理解成给 PCIe 设备装了一道 DMA 门禁。没有它任何设备都能直接读写物理内存有了它设备访问内存要经过页表翻译而 VFIO 允许用户态的 QEMU 为被直通的设备单独维护一扇门的访问规则。这就是直通能安全进行的底层基础。Intel 平台的开启方式是给内核传两个参数intel_iommuon iommuptintel_iommuon是把 Intel 的 IOMMU 功能强制打开。部分发行版内核默认不开所以最好显式加。iommupt的意思是对那些不需要隔离的普通设备硬盘控制器、网卡等走 DMA passthrough 模式不做二次翻译减少 IOMMU 带来的性能损耗而被 VFIO 接管的设备依然有独立的页表映射。简单说就是普通设备放行直通设备严管。修改位置在/etc/default/grub找到GRUB_CMDLINE_LINUX这一行把参数追加进去GRUB_CMDLINE_LINUX...quiet intel_iommuon iommupt重新生成引导配置grub2-mkconfig -o /boot/grub2/grub.cfg如果你的机器是 UEFI 引导输出路径一般是/boot/efi/EFI/kylin/grub.cfg。保险起见生成后用ls -l --time-stylefull-iso看哪个文件时间戳变了就是它。重启后验证dmesg | grep -i -e IOMMU -e DMAR能看到 DMAR 相关条目正常输出IOMMU 基本就起来了。如果什么都没有回到 BIOS 查 VT-d。3. IOMMU 分组体检直通前的必做检查3.1 一条脚本看清所有 IOMMU groupIOMMU 分组是直通方案里最绕、也最要命的概念。简单说kernel 会把一组物理上无法独立隔离的 PCI 设备绑定成一个 group虚拟化平台要求要么整组一起直通要么一个都别想直通。怎么查分组我直接用 sysfs#!/bin/bash shopt -s nullglob for g in /sys/kernel/iommu_groups/*; do echo IOMMU Group ${g##*/}: for d in $g/devices/*; do dev$(basename $d) lspci -nns $dev | sed s/^/ / done done输出里每个 Group 编号代表一个隔离域。比如 Group 17 里只有01:00.0和01:00.1那说明这块区域很干净如果 Group 17 里除了显卡还冒出来一个 NVMe 硬盘或者无线网卡你就得想办法处理了。我实测下来现代主板的 PCIe 根端口大多实现了 ACS 隔离CPU 直连的 x16 插槽通常能独占一个 group。但这件事绝对不能靠猜必须逐台机器查一遍因为你永远不知道板厂在 BIOS 里做了什么改动。3.2 显卡和 HDMI 音频必须成对处理RTX 5080 在 PCI 总线上会被枚举成两个 function01:00.0是 VGA/3D 控制器01:00.1是 HDMI Audio 音频设备。这两个 function 绝大多数情况下属于同一个 IOMMU group因为它们是同一颗物理芯片上的两个逻辑功能。libvirt 只挂01:00.0启动时大概率报错提示01:00.1也在同一个 group 里必须一起分配。解决办法就是两个 hostdev 一起配进去我在第 5 节会给出完整 XML。不要把音频功能单独黑名单掉或者试图绕过直接一起给虚拟机Windows 会自动装 HDA 音频驱动不影响使用。3.3 分组不理想怎么办换槽与 pcie_acs_override如果查完分组发现 5080 跟别的设备挤在一个 group 里第一步不是找内核魔改参数而是换插槽。很多时候换个 PCIe 槽位就能把设备挪到另一个根端口下分组立马干净。实在没得换才考虑pcie_acs_override。这个参数在部分主板上就是分组的临时解药它会让内核忽略 PCIe 桥的 ACS 能力强行把下游设备拆分成独立 groupGRUB_CMDLINE_LINUX... intel_iommuon iommupt pcie_acs_overridedownstream,multifunction注意这个参数属于软件补丁式的做法它会放宽 IOMMU 的隔离粒度生产环境要掂量一下。家用或者实验环境用起来确实有效我在这台机器上试过加了参数立刻把原先粘在一起的设备拆开了。但能用换槽解决的尽量别用参数硬拆。4. VFIO 接管 RTX 5080从驱动绑定到验证4.1 vfio-pci 的几种绑定方式分体检完下一步就是让宿主机把 5080 交给vfio-pci驱动。这一步做不好后面虚拟机启动时 libvirt 会直接告诉你设备忙。我最推荐的方式是 modprobe.d 配置持久化。先用lspci -nn查到 5080 两个 function 的实际设备 ID注意不同品牌 5080 的子系统 ID 可能不同但 VGA/3D 控制器和设备 ID 基本一致以你机器显示为准lspci -nn | grep -i nvidia比如输出是10de:xxxx和另一个10de:yyyy然后写配置cat /etc/modprobe.d/vfio.conf EOF options vfio-pci ids10de:xxxx,10de:yyyy softdep nvidia pre: vfio-pci softdep nouveau pre: vfio-pci blacklist nvidia blacklist nouveau EOF这里options vfio-pci ids是让 vfio-pci 模块在加载时就声明这两个 ID 归我管。softdep的作用是如果系统里存在 nvidia 或 nouveau 模块让它们在 vfio-pci 之后才加载避免抢先绑定。blacklist是最后一道保险。改完配置后RPM 系的服务器版要重建 initramfsdracut --forceDeb 系对应的是update-initramfs -u这一步特别容易漏。只改 modprobe.d 不重建 initramfs重启后配置根本不会进引导环境vfio-pci 大概率没接管成功。我在这上面栽过后来养成了习惯改完驱动相关配置先dracut --force再重启。4.2 宿主机到底装不装 NVIDIA 驱动这是整个项目里最反直觉的一环宿主机千万不要给 5080 装 NVIDIA 官方驱动也不要让 nouveau 碰它。很多人习惯先在宿主上测一下卡是不是好的于是装上 NVIDIA 驱动跑了一遍然后又忘了卸结果 vfio-pci 怎么绑定都绑不上因为 nvidia 内核模块已经把设备占死了。如果你已经装过卸载干净再继续。至于 GT 710宿主机就用内核自带的 nouveau不要额外装 NVIDIA 官方驱动。原因很简单NVIDIA 闭源驱动一旦加载会尝试接管它能看到的所有 NVIDIA 显卡包括 5080。即便你只给 GT 710 装它也会去认 5080导致 VFIO 方案崩溃。所以我的原则是直通 GPU 的宿主NVIDIA 全家桶一律不装。4.3 验证接管成功的三个标志重启之后检查三件事lspci -k -s 01:00-k会列出内核驱动两个 function 都应该显示Kernel driver in use: vfio-pci。如果显示nouveau或者nvidia说明接管失败回看 modprobe.d 和 initramfs。第二件事ls /dev/vfio/至少能看到/dev/vfio/vfio如果 5080 已经绑定还会出现/dev/vfio/xx这样的 group 节点。第三件事dmesg | grep -i vfio能看到类似vfio-pci: add [10de:xxxx]的记录。三条都满足VFIO 接管这一步就稳了。如果 5080 还没有被 vfio-pci 接管别急着往下配虚拟机先把这一步搞定再继续。5. libvirt 虚拟机配置把显卡交出去的 XML 细节5.1 芯片组与固件为什么必须是 q35 OVMF创建虚拟机时芯片组一定要选 q35。i440FX 是老式 PCI 总线模型它把设备接在一个共享的 PCI 总线上没有 PCIe 根端口的概念5080 这种需要大 BAR 和现代 PCIe 能力的新卡在 i440FX 下经常性黑屏或报错。q35 提供真正的 PCIe 拓扑结构显卡是按 PCIe 设备呈现给客户机的Windows 的 NVIDIA 驱动对这个差异非常敏感。固件方面选 UEFIOVMF。5080 的显存 BAR 很大传统 BIOS 引导在资源分配上先天吃亏UEFI 配合 q35 能最大化兼容性。如果虚拟机要装 Windows 11UEFI 更是硬性要求。用 virt-install 创建虚拟机时可以显式指定virt-install \ --name win11 \ --vcpus 16 \ --memory 32768 \ --cpu host-passthrough \ --machine q35 \ --boot uefi \ --disk path/opt/vm/win11.qcow2,size200,formatqcow2,busvirtio \ --cdrom /opt/iso/win11.iso \ --os-variant win11 \ --network networkdefault \ --graphics vnc如果你的 virt-install 版本不认识win11这个 os-variant可以用--os-variant win2k22或者加--os-variant detecton,requireoff让它自动检测。5.2 hostdev XML手动把两个 function 都写进去虚拟机的设备挂载我建议直接手写 XML比 GUI 里点来点去可控得多。先用 virsh 找到设备地址virsh nodedev-list | grep pci virsh nodedev-dumpxml pci_0000_01_00_0然后编辑虚拟机virsh edit win11在devices段加入hostdev modesubsystem typepci managedyes driver namevfio/ source address domain0x0000 bus0x01 slot0x00 function0x0/ /source /hostdev hostdev modesubsystem typepci managedyes driver namevfio/ source address domain0x0000 bus0x01 slot0x00 function0x1/ /source /hostdevaddress里的 bus/slot/function 换成你机器上实际的地址两个 hostdev 对应 5080 的 VGA 和 Audio 两个 function少一个都不行。这里重点解释managedyes的作用它告诉 libvirt在虚拟机启动时自动把设备从 io 域绑定给 vfio-pci在虚拟机关机时自动释放回宿主。这样你就不用手动去 sysfs 里做 bind/unbind 操作出现意外时也不会把两块显卡搞成半死不活的状态。5.3 装机阶段的正确顺序先虚拟显卡装系统再挂 5080这个顺序是我反复调整后才总结出来的强烈建议照做。第一步创建虚拟机时不挂任何 hostdev先用默认的虚拟显卡Virtio 或 QXL装系统。Windows 装的第一个阶段NVIDIA 驱动还没起来直通显卡上的画面基本就是黑屏或者 BIOS 信息你根本看不清安装界面。第二步在虚拟化环境里把系统装好打上补丁装好 virtio 驱动。如果磁盘和网卡用了 virtio 总线需要加载 virtio-win 驱动否则系统里看不到磁盘和网络。第三步关机再virsh edit把 hostdev 加进去启动虚拟机。这时候显示器接到 5080 上你才能看到虚拟机从 UEFI 到系统桌面的完整画面。很多人一上来就把 5080 挂上然后用接在 5080 上的显示器看安装界面结果卡在装驱动那一步画面一黑什么都干不了只能反复重启。先把系统基础打牢再亮真卡能省掉 90% 的折腾。5.4 配套调优hugepages、CPU 拓扑和驱动兼容性特征显卡直通只是入门想要稳和快还有几个配套配置值得写进 XML。Hugepages虚拟机的内存页默认是 4KB频繁切换页表会有额外开销。可以在内核参数里预留 1G 大页GRUB_CMDLINE_LINUX... default_hugepagesz1G hugepagesz1G hugepages32重建 grub.cfg 重启后在虚拟机 XML 里加memoryBacking hugepages/ /memoryBacking这样虚拟机内存从大页池里分配性能提升在直通场景下能明显感觉到尤其是显存和内存之间的数据搬运。CPU 拓扑与核显无关但直通吃性能host-passthrough能让客户机直接看到宿主 CPU 的全部特性Windows 的 NVIDIA 驱动对 CPUID 暴露的特性很敏感建议这么设。有条件再配 vcpupin把 vCPU 绑到固定物理核上避免调度抖动。驱动兼容性特征NVIDIA 的 Windows 驱动会检测自己是不是运行在虚拟化环境中检测到 KVM 且没做兼容设置时设备管理器里直接给你个 Code 43。libvirt 提供了一组标准的兼容性配置features acpi/ apic/ hyperv relaxed stateon/ vapic stateon/ spinlocks stateon retries8191/ vendor_id stateon valueKVMCPU/ /hyperv kvm hidden stateon/ /kvm /featureskvmhidden stateon//kvm是隐藏 KVM 标识vendor_id是自定义 CPU 厂商字符串。这套配置是 KVM 社区里很常见的兼容性手段目的是让 NVIDIA 驱动认为自己在物理机上从而正常加载显卡驱动。直通 Linux 虚拟机通常遇不到 Code 43但 Windows 虚拟机把这段提前写好能少走很多弯路。6. 开机后的高频事故黑屏、Code 43 与完整排查链路6.1 黑屏的三种形态和各自的含义直通后第一次启动黑屏几乎是必然要碰到一次的。关键是要能分辨黑在哪一阶段。第一种5080 显示器从开机到结束完全无信号宿主机无报错。这多半是显卡的 Option ROM 或初始化问题。排查时先把graphics配置里的 VNC/Spice 开着用虚拟显示器去连虚拟机看客户机系统是否正常启动了。如果系统正常运行只是物理屏没画面说明是 UEFI 固件和这块卡的 ROM 兼容问题可以考虑从物理机上 dump 一份 5080 的 vBIOS在 hostdev 里用rom baron file/path/to/rom/指给它。这个操作不是所有卡都需要但遇到不亮屏时值得一试。第二种虚拟机 UEFI 标志显示了一下然后黑屏。这种通常是客户机驱动还没就绪。Windows 在安装 NVIDIA 驱动前会先加载微软基本显示驱动接着黑屏等待驱动接管这是正常过程。多等一两分钟或者用虚拟显示器进去看设备管理器里显卡状态。第三种宿主机的画面没了而不是虚拟机黑屏。这说明 GT 710 的输出出问题了。优先检查是不是 BIOS 的 Primary Display 被重置成了 PCIe 自动5080 变成了主显示设备。重启进 BIOS 重新指定 GT 710 所在槽位即可。6.2 Windows Code 43NVIDIA 对 KVM 的识别与对策Code 43 是 Windows 直通 NVIDIA 显卡最经典的事故。设备管理器里显卡带着一个黄色感叹号错误代码 43Windows 的说法是设备已停止。原因就是 NVIDIA 驱动检测到了 KVM 的 hypervisor 痕迹。排查逻辑按顺序来确认 5080 的两个 function 都挂进去了只挂 VGA 不挂 Audio 会导致驱动加载异常。确认虚拟机的features里写了hidden和vendor_id见 5.4 的配置。确认 CPU 模型是host-passthrough不要用qemu64这种基础模型它暴露的 CPUID 特征很容易露馅。装显卡驱动时优先用 NVIDIA 官网最新的 5xx 系列驱动。新卡配新驱动老驱动对 Blackwell 架构的支持不完整会出现装一半失败或装完照样 43。如果以上都做了还是 43再把hyperv里的relaxed、vapic、spinlocks全部打开并且确保虚拟机里没有开启基于 Hyper-V 的安全功能。这套组合在我这里的成功率高得离谱。6.3 宿主机显示输出消失与 GT 710 的驱动坑宿主显示消失还有一种隐蔽原因GT 710 被 nouveau 正常识别了但某个版本的内核在启动时把默认 framebuffer 分配给了 5080导致控制台信息只输出到不存在的设备上。这时 X 或 Wayland 桌面能起来但 tty 黑屏。做法是给 GRUB 内核参数加上nouveau.modeset1确保 nouveau 及早接管 GT 710 的显示。另外如果你之前给 GT 710 装过 NVIDIA 闭源驱动卸载后要检查/etc/X11/xorg.conf里是不是还留着指向 5080 的 BusID。残留的 X 配置会让你开机黑屏因为 X server 想初始化一块已经被 vfio-pci 占用的卡。删掉 xorg.conf 或者把 BusID 改成 GT 710 的地址宿主机画面就回来了。6.4 日志怎么看dmesg、journalctl 与 libvirt 错误格式排错不能靠肉眼猜日志要会看。宿主机侧dmesg -T | grep -i -e vfio -e iommu -e nvidia journalctl -k -b | grep -i vfio journalctl -u libvirtd -e/var/log/libvirt/qemu/虚拟机名.log里能抓到 QEMU 进程的 stderr很多设备初始化失败的信息会直接打在这里。客户机侧Windows 看事件查看器和设备管理器Linux 客户机用lspci -nnk dmesg | grep -i nvidia我排错时的习惯是先把宿主侧 vfio 日志和 libvirt 日志拉出来确认宿主机没有报错再进客户机看驱动。宿主侧报错和客户机侧报错是两个完全不同的世界别混在一起查。7. 实测下来的一些体会与收尾提醒7.1 硬件兼容性的最后提醒RTX 5080 是 Blackwell 架构的新卡直通链路里最让我意外的是它的 FLRFunction Level Reset行为。某些主板上虚拟机关机后 5080 的复位不彻底导致第二次启动时报 device is busy 或者直接挂起。遇到这种情况virsh shutdown后等几秒再启动或者把虚拟机彻底 destroy 掉让 QEMU 进程退出后自动释放设备一般就能过。如果特别频繁升级主板 BIOS 往往比改软件参数更有效。另外5080 的供电是新的 12V-2x6 接口转接线质量参差不齐。我在第一轮测试时用了一根劣质转接线直通后满载跑一分钟就掉驱动。换回原装线后问题消失。GPU 直通这种场景对硬件稳定性要求极高供电不能省。7.2 先做冒烟测试再上大任务我的建议是先准备一个不带桌面的 Linux live ISO比如 Debian netinst 或者 ArchISO在虚拟机里用 5080 跑起来lspci能看到 NVIDIA 设备dmesg没有 vfio 报错再装 Windows 或者正式系统。这一步能帮你把VFIO 链路问题和驱动兼容问题切开避免混在一起后瞎猜。整个项目做完我个人的体会是GPU 直通难的不是某一个步骤而是所有环节咬合紧密——BIOS 少开一个开关后面全是白忙宿主多装一个驱动直通就失效虚拟机少挂一个 function启动就报错。按这篇文章的顺序走每一步都验证到位再上 5080 直通成功的概率会大很多。最后留一个我自己的操作习惯每次改虚拟机 XML 之前先virsh dumpxml 虚拟机名 backup.xml存一份。GPU 直通排错时反复改动是常态有备份才能安心回滚。这套方案调好之后5080 在虚拟机里的性能基本接近物理机宿主侧 GT 710 也一直安安静静地亮着整个系统的状态就很舒服了。
阅读完成 · 觉得有帮助?
咨询建站