この古いscsiコントローラを仮想マシンに渡す方法はありませんか?

この古いscsiコントローラを仮想マシンに渡す方法はありませんか?

vm pci-e および pci 純粋なデバイスに正常に渡されました。 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"
    

    2行目を編集し、通過したい各デバイスに同様の行を追加しますvfio。この例では、デバイスと一致するようにベンダーと製品IDを使用しました。

  • メモリ制限:

    ファイルに次の行を追加します。/etc/security/limits.conf

    @kvm     soft    memlock        150000
    @kvm     hard    memlock        150000
    

    ここでは、グループ制限をkvm150000KBに設定しました。これは128 MBのVMには十分ですが、VMのメモリ割り当てを増やすと増やす必要があります。

源泉: https://www.evonide.com/non-root-gpu-passthrough-setup/(仮想マシンに別のユーザーを使用しているため設定が若干異なります)

おすすめ記事