没有办法将这个旧的 scsi 控制器传递给虚拟机吗?

没有办法将这个旧的 scsi 控制器传递给虚拟机吗?

我已成功传递给 vm pci-e 和 pci pure 设备。我想将 scsi 控制器传递给虚拟机

操作系统可以看到控制器

06:06.0 SCSI storage controller [0100]: BusLogic BT-946C (BA80C30) [MultiMaster 10] [104b:1040]
    Kernel driver in use: vfio-pci
    Kernel modules: BusLogic

我拆下控制器

virsh nodedev-detach pci_0000_06_06_0

我启动虚拟机

qemu-system-i386 -boot a -fda boot_install.img -m 128 -no-fd-bootchk --enable-kvm -device pcnet,netdev=network0 -netdev tap,id=network0,ifname=tap1,script=no,downscript=no -device vfio-pci,host=06:06.0

和...

qemu-system-i386: -device vfio-pci,host=06:06.0: VFIO_MAP_DMA failed: Cannot allocate memory
qemu-system-i386: -device vfio-pci,host=06:06.0: VFIO_MAP_DMA failed: Cannot allocate memory
qemu-system-i386: -device vfio-pci,host=06:06.0: vfio 0000:06:06.0: failed to setup container for group 12: memory listener initialization failed: Region pc.ram: vfio_dma_map(0x7fadc1bccc00, 0x0, 0xa0000, 0x7fadb5200000) = -12 (Cannot allocate memory)

怎么解决?谢谢

答案1

您需要使用udev规则来更改您希望传递给用户的设备的所有权。为了避免出现此内存错误,您还需要增加用户能够分配的内存限制。

我使用 Arch Linux,因此这些文件可能位于您的发行版的不同位置。

  • 创建该组kvm(如果尚不存在),并将其添加到用户的补充组中。如果您不打算以其他用户身份运行虚拟机,您也可以使用自己的用户组。

  • Udev规则:

    创建文件/etc/udev/rules.d/99-vm.rules

    SUBSYSTEM=="vfio", OWNER="root", GROUP="kvm"
    SUBSYSTEM=="***", ATTR{idVendor}=="***", ATTR{idProduct}=="***" OWNER="root", GROUP="kvm"
    

    编辑第二行并为您希望直通的每个设备添加类似的行vfio,在本示例中,我使用供应商和产品 ID 来匹配设备。

  • 内存限制:

    将以下行添加到文件中/etc/security/limits.conf

    @kvm     soft    memlock        150000
    @kvm     hard    memlock        150000
    

    在这里,我们将组的限制设置kvm为 150000KB,这对于 128MB 的 VM 来说应该足够了,但如果您增加 VM 的内存分配,则应该增加。

来源: https://www.evonide.com/non-root-gpu-passthrough-setup/(设置有点不同,因为他为虚拟机使用单独的用户)

答案2

找到解决方法。由于 root 有效,所以可能是权限问题

相关内容