解决Openstack Zed平台创建vIOMMU虚拟机失败的问题
1、问题描述
虚拟机需要使用DPDK,要求云平台在创建虚拟机的时候能够将物理网卡或者通过SRIOV生成的虚拟网卡直通到虚拟机中,并配置虚拟机开启iommu_group功能且直通的网卡能够单独iommu_group分组。测试在使用开源Openstack zed版本的平台时,通过配置image参数hw_machine_type=‘q35’, hw_viommu_model=‘intel’( Zed版本vIOMMU新特性)可以实现虚拟机开启iommu_group功能且直通单张网卡时能够单独iommu_group分组,但是当修改直通的网卡数量为多张时出现虚拟机创建失败的问题。报错信息如下:
libvirt.libvirtError: internal error: qemu unexpectedly closed the monitor: 2025-02-08T08:11:48.152818Z qemu-system-x86_64: -device vfio-pci,host=0000:60:06.0,id=hostdev1,bus=pci.5,addr=0x0: VFIO_MAP_DMA failed: Cannot allocate memory
2025-02-08T08:11:48.210884Z qemu-system-x86_64: -device vfio-pci,host=0000:60:06.0,id=hostdev1,bus=pci.5,addr=0x0: VFIO_MAP_DMA failed: Cannot allocate memory
2025-02-08T08:11:48.211060Z qemu-system-x86_64: -device vfio-pci,host=0000:60:06.0,id=hostdev1,bus=pci.5,addr=0x0: vfio 0000:60:06.0: failed to setup container for group 149: memory listener initialization failed: Region pc.ram: vfio_dma_map(0x559ef941f2b0, 0xc0000, 0x7ff40000, 0x7f95bfec0000) = -12 (Cannot allocate memory)
2025-02-08 16:11:48.801 7 ERROR nova.virt.libvirt.guest Traceback (most recent call last):
2025-02-08 16:11:48.801 7 ERROR nova.virt.libvirt.guest File "/var/lib/kolla/venv/lib/python3.10/site-packages/nova/virt/libvirt/guest.py", line 165, in launch
2025-02-08 16:11:48.801 7 ERROR nova.virt.libvirt.guest return self._domain.createWithFlags(flags)