PVE PCIe 直通与 GPU 虚拟化完全指南
本文详解 PVE 8.x 环境下 PCI 设备直通技术,涵盖 IOMMU 配置、显卡直通、驱动屏蔽等核心内容,帮助读者实现显卡、网卡等硬件设备直通给虚拟机使用。
什么是 PCIe 直通
PCIe 直通(PCI Passthrough)是一种虚拟化技术,允许将物理 PCI 设备直接分配给虚拟机使用。直通后,虚拟机可以直接操作硬件,性能接近物理机水平。
适用场景:
- GPU 直通(游戏、AI 计算、视频转码)
- 网卡直通(高性能网络、SR-IOV)
- USB 控制器直通(USB 设备稳定性)
- 存储控制器直通(硬盘性能优化)
IOMMU 基础配置
检查硬件支持
首先确认 CPU 和主板支持 IOMMU/VT-d:
# Intel 平台
dmesg | grep -e DMAR -e IOMMU
# AMD 平台
dmesg | grep AMD-Vi
内核参数配置
传统 GRUB 引导
编辑 /etc/default/grub:
# Intel 平台
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream"
# AMD 平台
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt pcie_acs_override=downstream"
更新引导:
update-grub
update-grub2
UEFI (systemd-boot) 引导
编辑 /etc/kernel/cmdline:
# 推荐配置(Intel)
echo 'quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction pci=nommconf' > /etc/kernel/cmdline
# 应用配置
pve-efiboot-tool refresh
参数说明:
intel_iommu=on/amd_iommu=on:启用 IOMMUiommu=pt:直通模式,提高性能pcie_acs_override=downstream:拆分 IOMMU 分组initcall_blacklist=sysfb_init:解决某些显卡问题video=efifb:off:禁用 EFI 帧缓冲(显卡直通必需)
加载 VFIO 模块
编辑 /etc/modules,添加以下内容:
vfio
vfio_pci
vfio_virqfd
vfio_iommu_type1
验证模块加载:
dmesg | grep remapping
# 成功输出示例:
# DMAR-IR: Enabled IRQ remapping in x2apic mode
# AMD-Vi: Interrupt remapping enabled
驱动屏蔽配置
为确保直通设备在 Host 上不被占用,需要屏蔽相关驱动。
创建黑名单配置
编辑 /etc/modprobe.d/pve-blacklist.conf:
# Nvidia 显卡
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
# AMD 显卡
blacklist amdgpu
blacklist radeon
# Intel 核显
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
启用不安全中断
某些设备需要允许不安全中断:
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
更新 initramfs
update-initramfs -u -k all
显卡直通实战
查询显卡信息
# 查看所有 PCI 设备
lspci
# 查看显卡详细信息
lspci -v | grep NVIDIA
# 查看设备 ID
lspci -n -s 04:00.0
# 输出示例:04:00.0 0300: 10de:0fc6 (rev a1)
PVE 8.x 直通步骤
PVE 8.0+ 版本大幅简化了直通流程,不再需要手动编辑配置文件:
-
Web 界面操作
- 进入虚拟机硬件配置
- 点击 "添加" -> "PCI 设备"
- 选择目标显卡
- 勾选:
- ☑️ 所有功能(直通同组所有设备)
- ☑️ ROM-Bar(显卡显示输出必需)
- ☑️ PCI-Express
- ☑️ 主 GPU(虚拟机主显示输出)
-
安装驱动
- 通过远程桌面/串口进入虚拟机
- 安装显卡官方驱动
- 重启虚拟机
-
验证直通
# 虚拟机内执行 nvidia-smi # 或 lspci | grep VGA
传统配置方式(PVE 7.x 及更早)
如需手动配置设备 ID:
# 创建 VFIO 配置
echo "options vfio-pci ids=10de:0fc6 disable_vga=1" > /etc/modprobe.d/vfio-pci.conf
# 编辑虚拟机配置
vim /etc/pve/qemu-server/100.conf
# 添加以下配置
hostpci0: 0000:04:00,pcie=1
machine: q35
cpu: host,hidden=1,flags=+pcid
args: -cpu 'host,+pdpe1gb,+kvm_pv_unhalt,+kvm_pv_eoi,hv_spinlocks=0x1fff,hv_vapic,hv_time,hv_reset,hv_vpindex,hv_runtime,hv_relaxed,hv_synic,hv_stimer,kvm=off,hv_vendor_id=whatever' -machine q35,kernel_irqchip=on
vga: std
Resource Mappings 配置
PVE 8.x 引入的 Resource Mappings 功能简化了设备管理:
- 进入 数据中心 -> Resource Mappings
- 点击 添加-
- 选择要映射的设备
- 设置权限(哪些用户/组可以使用)
虚拟机中使用:
- 添加硬件 -> PCI 设备
- 选择 "Mapped Device"
- 从列表中选择预配置的映射设备
Windows 虚拟机配置
基础配置建议
操作系统:Windows 10/11 / Server 2016/2019/2022
系统设置:
- 机型:Q35(推荐,支持 PCIe 原生)
- BIOS:OVMF (UEFI)
- 显卡:默认(安装完成后再直通)
- SCSI 控制器:VirtIO SCSI
磁盘:
- 总线:SATA 或 SCSI (VirtIO)
- 缓存:直接同步(数据安全)或 回写(性能优先)
CPU:
- 核心数:根据需求配置
- 类型:host(直通 CPU 特性)
- 启用 NUMA:是(多核推荐)
显卡直通特殊处理
GTX 650 等老显卡显示问题:
- 屏蔽 nouveau 驱动(Host):
echo "blacklist nouveau" > /etc/modprobe.d/disable-nouveau.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/disable-nouveau.conf
update-initramfs -u -k all
- 下载显卡 ROM:
- 访问 https://www.techpowerup.com/vgabios
- 根据显卡型号、厂商、BIOS 版本下载对应 ROM
- 在 PCI 设备配置中指定 ROM 文件路径
驱动安装流程
- 安装 Windows 系统
- 安装 VirtIO 驱动(使用 virtio-win ISO)
- 配置并启用远程桌面
- 直通显卡
- 通过远程桌面安装显卡驱动
- 重启,完成
常见问题与解决
问题1:直通后虚拟机无法启动
原因:IOMMU 分组问题
解决:
# 安装 ACS patch 覆盖
# 编辑 /etc/default/grub,添加:
pcie_acs_override=downstream,multifunction
问题2:显卡代码 43 错误(Nvidia)
原因:Nvidia 驱动检测到虚拟化环境
解决:在虚拟机配置中添加隐藏虚拟化标志:
cpu: host,hidden=1,flags=+pcid
args: -cpu host,kvm=off,hv_vendor_id=proxmox
问题3:直通后显示器无信号
排查步骤:
- 确认 ROM-Bar 已勾选
- 确认显卡 ROM 正确(必要时手动指定)
- 确认主 GPU 已勾选
- 检查显示器连接的是直通显卡接口
问题4:音频无法输出
解决:
- 直通显卡时勾选 "所有功能"(会自动包含音频设备)
- 或在 PCI 设备中单独添加显卡音频控制器
性能优化建议
- CPU 亲和性:将虚拟机绑定到特定 NUMA 节点
- 大页内存:启用 HugePages 减少 TLB miss
- CPU 隔离:使用
isolcpus隔离专用核心 - 设备分组优化:合理规划 IOMMU 分组
小结
PCIe 直通是 PVE 高级功能,可以显著提升虚拟机硬件性能:
- 准备工作:启用 IOMMU、加载 VFIO 模块
- 驱动屏蔽:防止 Host 占用直通设备
- 直通配置:Web 界面操作(PVE 8.x)或手动配置
- 虚拟机设置:选择合适的机型和 BIOS 类型
通过合理的直通配置,可以在虚拟机中实现接近物理机的显卡、网卡性能。
参考资料: