KVM/QEMU 部署与设备绑定

KVM/QEMU 部署与设备绑定

1. 前置检查

1
2
3
4
zcat /proc/config.gz | grep -E 'VFIO|IOMMU|KVM'
test -e /dev/kvm
find /sys/kernel/iommu_groups -type l
dmesg | grep -Ei 'iommu|vfio'

先证明硬件 IOMMU和 group存在,再配置 VFIO。

2. 推荐配置

1
2
3
4
CONFIG_VFIO=y/m
CONFIG_VFIO_PCI=y/m
CONFIG_VFIO_IOMMU_TYPE1=y/m
CONFIG_KVM=y

不要启用 VFIO_NOIOMMU作为生产替代。

3. PCI绑定

1
2
3
4
5
6
DEV=0000:01:00.0
readlink -f /sys/bus/pci/devices/$DEV/iommu_group
basename "$(readlink -f /sys/bus/pci/devices/$DEV/driver)"
echo vfio-pci > /sys/bus/pci/devices/$DEV/driver_override
echo $DEV > /sys/bus/pci/devices/$DEV/driver/unbind
echo $DEV > /sys/bus/pci/drivers_probe

命令必须按实际 driver状态调整;切换网络/存储设备可能立即中断系统。

4. Group完整性

列出:

1
2
GROUP=$(basename "$(readlink -f /sys/bus/pci/devices/$DEV/iommu_group)")
find /sys/kernel/iommu_groups/$GROUP/devices -maxdepth 1 -type l

组内每个 function和 bridge关系都需评估,不能只绑定目标 function。

5. 权限

QEMU进程需:

  • group node访问;
    -足够 memlock;
    -KVM访问;
    -必要 hugepages;
    -设备 firmware/ROM;
    -受控 cgroup/device ACL。

不建议 chmod 666 /dev/vfio/*

6. QEMU

典型参数概念:

1
-device vfio-pci,host=0000:01:00.0

ARM virt machine还需正确 GIC/ITS、guest firmware和 MMIO window。具体参数取决于 QEMU版本。

7. 启动前

-停止 host业务;
-确认 reset能力;
-备份 console;
-确认 rootfs/network不依赖目标;
-验证组隔离;
-验证 guest driver;
-准备失败回绑。

8. 关闭

Guest shutdown后确认 DMA停止、fd关闭和 reset成功,再清 driver_override并 probe原 driver。无法 reset的设备可能需整机重启。

9. RK3588限制

在当前 DTS无 PCIe IOMMU映射的前提下,上述流程预期会在 group/Type1 attach阶段不满足安全条件;不要以 unsafe no-IOMMU强行完成。

文章互动

阅读 --

留言

0 条留言

正在加载留言…