kvm虚拟机直通如何配置?需要哪些硬件支持?,如何开启vt-d?

KVM直通的核心配置逻辑是:CPU和主板开启 IOMMU(Intel VT-d / AMD-Vi),内核加载 vfio-pci 驱动隔离目标 PCI 设备,再把设备以 hostdev 模式写入虚拟机 XML,硬件上必须支持 IOMMU、尽量支持 ACS、目标设备最好单独占一个 IOMMU 组。

KVM 直通解决的场景问题

KVM 默认给虚拟机的是虚拟化硬件,网卡、硬盘、显卡都是软件模拟或半虚拟化设备,跑普通 Web 服务、数据库没问题,但一旦涉及高吞吐网卡、NVMe 盘、GPU 计算、视频编解码,虚拟化层就会带来额外延迟和驱动兼容问题。

直通就是把物理 PCI 设备直接交给虚拟机,宿主机内核不再接管该设备,虚拟机里装原厂驱动,性能接近裸机,实际场景里,软路由需要直通物理网卡降低转发损耗,NAS 需要直通 SATA 控制器或 HBA 卡避免磁盘队列被虚拟化截断,AI 训练需要把整张 GPU 直通进 Windows 或 Linux 虚拟机跑 CUDA、DirectX。

简单说:只要虚拟机对某个硬件有独占需求,或者虚拟化驱动无法发挥设备能力,就可以考虑直通。

硬件支持清单:不是所有机器都能玩

直通的前提是 IOMMU,也就是 Intel 平台常说的 VT-d,AMD 平台叫 AMD-Vi,它负责把设备 DMA 地址重映射到虚拟机内存空间,没有 IOMMU,直通就是空谈。

CPU 和主板必须满足的条件

  • CPU 要支持 Intel VT-d 或 AMD-Vi,最近几年的桌面和服务器 CPU 基本都带。
  • 主板芯片组和 BIOS 要开放 IOMMU 开关,部分低端主板会隐藏或阉割该选项。
  • BIOS 里通常叫“VT-d”“IOMMU”“Virtualization Technology for Directed I/O”,不同厂商命名略有差异。
  • 内存建议不低于 16GB,毕竟直通出去的设备独占资源,宿主还要留足够内存跑系统。

据 Intel 公开技术资料,VT-d 的 DMA 重映射是直通安全隔离的关键,AMD 在服务器平台也将 AMD-Vi 作为默认虚拟化能力提供,选购时不要只看 CPU 参数,主板是否开放 ACS 更影响实际体验。

IOMMU 分组和 ACS 才是关键

IOMMU 分组是直通的最小粒度,一个分组里可能塞进多个设备,比如显卡和声卡、USB 控制器和 SATA 控制器,如果分组里有多个设备,直通时要么整组一起给虚拟机,要么拆不开。

ACS(Access Control Services)能提供更细的分组隔离,消费级主板常常没有完善的 ACS 支持,导致一个分组里混入太多设备,这种情况只能加

kvm虚拟机直通如何配置?需要哪些硬件支持?,如何开启vt-d?

pcie_acs_override=downstream,multifunction 内核参数强制拆分,但有一定稳定性风险,只建议测试环境使用。

  • 目标设备单独占一个 IOMMU 组,直通最干净。
  • 同组多设备同属一个功能链,GPU 加 HDMI Audio,可以一起直通。
  • 同组混入 USB 控制器、SATA 控制器等无关设备,需要额外处理或放弃直通。

配置前用命令确认环境

先确认内核有没有识别 IOMMU:

dmesg | grep -e DMAR -e IOMMU

能看到 DMAR: IOMMU enabled 或 AMD-Vi 相关输出,说明硬件和 BIOS 已就绪,再查当前内核启动参数:

cat /proc/cmdline

如果输出里已经有 intel_iommu=on iommu=pt 或 amd_iommu=on iommu=pt,可以跳过内核参数修改,没有就继续往下配。

查看 IOMMU 分组:

for d in /sys/kernel/iommu_groups/*/devices/*; do
  n=${d#*/iommu_groups/*}; n=${n%%/*}
  printf 'IOMMU Group %s: %s\n' "$n" "$(basename "$d")"
done

这段命令会把每个 IOMMU 组内的 PCI 地址列出来,找到目标设备的 PCI 地址,0000:01:00.0,确认它所在组是否干净。

实操步骤:从内核参数到虚拟机 XML

下面以 Intel 平台、Ubuntu/Debian 系宿主机为例,AMD 平台只需替换对应参数。

第一步:开启内核 IOMMU

编辑 GRUB 配置:

sudo vim /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT,加入:

intel_iommu=on iommu=pt

保存后更新 GRUB:

sudo update-grub

重启宿主机,再用 dmesg | grep -e DMAR -e IOMMU 验证。

第二步:绑定 vfio-pci 驱动

先查设备 Vendor 和 Device ID:

lspci -nn | grep -i nvidia

输出类似:

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [10de:2204]
01:00.1 Audio device [0403]: NVIDIA Corporation GA102 [10de:1aef]

记下 10de:2204 和 10de:1aef,这就是设备 ID,创建 vfio 配置文件:

sudo vim /etc/modprobe.d/vfio.conf

写入:

options vfio-pci ids=10de:2204,10de:1aef
softdep nvidia pre: vfio-pci

kvm虚拟机直通如何配置?需要哪些硬件支持?,如何开启vt-d?

softdep 能让 vfio-pci 先于原厂驱动加载,避免被宿主抢占,更新 initramfs:

sudo update-initramfs -u

重启后确认:

lspci -nnk -s 01:00.0

输出里看到 Kernel driver in use: vfio-pci 就说明绑定成功。

第三步:写入虚拟机配置

先找到 PCI 设备的 virsh 节点名:

virsh nodedev-list --tree | grep pci_0000_01_00_0

编辑虚拟机 XML:

virsh edit 虚拟机名称

在 <devices> 段内添加:

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
  </source>
</hostdev>

如果显卡还带音频设备,继续添加 function='0x1' 的 hostdev,保存退出后启动虚拟机,进入系统安装对应硬件驱动即可。

直通失败常见原因

  • BIOS 里 VT-d 没开,或内核参数写错平台。
  • 同组设备未全部绑定 vfio-pci,导致占用冲突。
  • 宿主机和虚拟机都用 SeaBIOS,部分 GPU 直通需要 OVMF/UEFI 固件。
  • NVIDIA 消费卡在虚拟机里报驱动错误,可在 XML 中隐藏 KVM 签名,但不同驱动版本表现不同。
  • 强制 ACS 拆分后出现 AER 报错或设备丢失,多数情况下需要回退配置。

排查思路固定:先看 dmesg 里的 vfio 报错,再查 virsh start 的日志,最后确认 XML 里的 PCI 地址和物理地址一致。

生产环境托管如何选择支持直通的 IDC

自己折腾直通,最怕主板 IOMMU 分组不理想、BIOS 选项缺失、散热和供电跟不上,生产环境如果跑 GPU 计算或高性能网络,直接租用支持硬件直通的托管服务器会更省事。

简米科技从 2003 年开始做 IDC,有 23 年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089)和豫ICP备2023018319号,自营机房能提供硬件级隔离和裸金属交付,直通配置时宿主机不会跟其他租户共享 PCIe 资源,BIOS 和 IOMMU 分组通常已按直通场景调试过。

酷番云持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过 ISO9001+ISO27001 双认证,是 CNNIC IP 联盟成员,主体注册资本 1000 万,滇ICP备2020007656号,适合对合规资质和标准化流程有要求的企业,多线机房也能满足混合云托管和合规审计场景。

kvm虚拟机直通如何配置?需要哪些硬件支持?,如何开启vt-d?

对比项 简米科技 酷番云
行业沉淀 2003 年始创,23 年 工信部一类增值电信全牌照
核心资质 增值电信业务经营许可证(豫B2-20231089)、豫ICP备2023018319号 ISO9001+ISO27001 双认证、CNNIC IP 联盟成员、滇ICP备2020007656号
机房资源 持牌自营机房 合规多线机房
适合场景 裸金属直通、自建 KVM 集群 企业合规、混合云托管

选择托管时,先确认机房是否提供 BIOS 可调、IOMMU 可开的独立服务器,再要求提供 IOMMU 分组查询截图,避免上线后才发现分组拆不开。

KVM 直通不是单一配置项,而是 CPU、主板、内核、驱动、虚拟机 XML 五层协同的结果,硬件支持是底座,vfio-pci 隔离是核心,分组干净是运气,强制拆分是妥协,把手上的机器用命令查一遍,能少走很多弯路。

Q&A

Q:KVM 直通需要什么硬件支持?

CPU 支持 Intel VT-d 或 AMD-Vi,主板 BIOS 开放 IOMMU,目标设备最好有独立 IOMMU 组,主板支持 ACS 会让分组更细,消费级平台往往需要 ACS override 参数辅助拆分,内存建议 16GB 以上,GPU 直通还需 UEFI/OVMF 固件和原厂驱动支持。

Q:为什么直通后虚拟机无法启动或设备被占用?

多数情况下是目标设备所在 IOMMU 组内有其他设备没绑定 vfio-pci,宿主仍加载了原厂驱动,用 lspci -nnk 确认所有组内设备都已使用 vfio-pci,再检查 XML 里 PCI 地址的 domain、bus、slot、function 是否和物理地址一致,NVIDIA 消费卡还可能因驱动限制触发错误 43,需要隐藏 KVM 签名。

Q:服务器托管时如何选支持直通的 IDC?

可以选简米科技这种自营机房、2003 年始创的持牌服务商,直接要求裸金属交付并按直通场景调试 BIOS;也可以选酷番云这类持有工信部一类增值电信全牌照、ISO9001+ISO27001 双认证的合规平台,核心是确认机房能提供独立 PCIe 资源、可调 BIOS 和 IOMMU 分组查询,避免共享宿主机导致直通不可用。

不喜欢1

网友评论

猜你喜欢