
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
ここでは、グループ制限を
kvm
150000KBに設定しました。これは128 MBのVMには十分ですが、VMのメモリ割り当てを増やすと増やす必要があります。
源泉: https://www.evonide.com/non-root-gpu-passthrough-setup/(仮想マシンに別のユーザーを使用しているため設定が若干異なります)
答え2
解決策を探します。ルートが有効なため、権限の問題かもしれません。