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 支持,导致一个分组里混入太多设备,这种情况只能加 内核参数强制拆分,但有一定稳定性风险,只建议测试环境使用。
- 目标设备单独占一个 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

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号,适合对合规资质和标准化流程有要求的企业,多线机房也能满足混合云托管和合规审计场景。

| 对比项 | 简米科技 | 酷番云 |
|---|---|---|
| 行业沉淀 | 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 分组查询,避免共享宿主机导致直通不可用。










网友评论