Aarch64架构下如何为KVM虚拟机添加VFIO-IOMMU支持?
解决aarch64 KVM虚拟机VFIO-IOMMU(SMMUv3)支持问题
1. 确认主机层面的前置条件
- 检查主机SMMUv3是否正常初始化:
输出需包含类似dmesg | grep -i smmuARM SMMUv3 initialized的内容,确保主机内核已正确识别硬件SMMU。 - 加载必要的VFIO模块:
可将这些模块写入modprobe vfio vfio_iommu_type1 vfio_pci/etc/modules-load.d/vfio.conf实现开机自启。
2. 修正虚拟机XML配置
仅添加<iommu model='smmuv3'/>不足以让客户机识别SMMUv3,需补充以下配置:
- 确保CPU特性支持:将虚拟机CPU模式设置为
host-passthrough或包含虚拟化扩展的virt模式,XML示例:<cpu mode='host-passthrough' check='none'/> - 添加SMMUv3设备并锁定内存:在
<devices>节点下添加IOMMU配置,同时启用内存锁定(避免VFIO访问内存时被换出):<memoryBacking> <locked/> </memoryBacking> <devices> <!-- 原有设备配置 --> <iommu model='smmuv3'/> </devices> - 验证QEMU命令行:启动虚拟机后,通过以下命令检查QEMU是否加载了SMMUv3设备:
若输出包含ps aux | grep qemu-system-aarch64 | grep smmuv3-device smmuv3,说明配置生效。
3. 检查客户机内核配置
客户机Ubuntu 22.04需启用SMMUv3相关内核配置:
zcat /proc/config.gz | grep CONFIG_ARM_SMMU_V3
若输出为CONFIG_ARM_SMMU_V3=y或=m,则配置正常;若未开启,需重新编译内核并启用该选项。
4. QEMU版本限制说明
你的QEMU 4.2.1版本不支持ARM SMMUv4(SMMUv4支持从QEMU 5.0开始引入),但该版本的virt机器类型已支持SMMUv3,无需升级即可使用SMMUv3功能。
内容的提问来源于stack exchange,提问作者wangt13
相关产品推荐
相关产品推荐

