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"
두 번째 줄을 편집하고 통과하려는 각 장치에 대해 유사한 줄을 추가합니다
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
해결책을 찾기. 루트가 유효하므로 권한 문제일 수 있습니다.