게스트에게 USB 카드를 전달하려고 하는데 VFIO 드라이버를 고정할 수 없는 것 같습니다. 대신 호스트가 카드를 로드하고 인수합니다. 내 GPU가 성공적으로 통과했으므로 vfio/IOMMU가 작동한다고 확신합니다.
카드: Sonnet Allegro USB 3.1, 2포트 USB-C 10Gb PCIe 카드(USB3C-2PM-E) 마더보드: ASRock x399 Taichi CPU: Threadripper 1950x GPU를 출시할 때 사용한 것과 동일한 프로세스를 따르려고 했는데 이것이 주요 사항입니다. 내가 배운 것여기:
먼저 카드 ID를 가져옵니다.
~ lspci | grep USB
01:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] Device 43ba (rev 02)
0a:00.0 USB controller: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller
0b:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) USB 3.0 Host Controller
45:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) USB 3.0 Host Controller
다음. 공급업체, 제품 ID 및 별칭을 가져온 다음 그에 따라 시스템 파일을 수정하여 호스트가 카드를 선점하는 것을 방지합니다.
~ lspci -nn | grep 0a:00
0a:00.0 USB controller [0c03]: ASMedia Technology Inc. ASM1142 USB 3.1 Host Controller [1b21:1242]
cat /sys/bus/pci/devices/0000:0a:00.0/modalias
pci:v00001B21d00001242sv000016B8sd00007230bc0Csc03i30
~ sudo nano /etc/modprobe.d/local.conf
끝에 붙여넣기:
alias pci:v00001B21d00001242sv000016B8sd00007230bc0Csc03i30 vfio-pci
options vfio-pci ids=1b21:1242
그 다음에:
~ sudo update-initramfs -u
그런 다음 재부팅하고 카드가 vfio 드라이버를 사용하고 있는지 확인하십시오.
~ lspci -kn | grep -A 2 0a
0a:00.0 0c03: 1b21:1242
Subsystem: 16b8:7230
Kernel driver in use: xhci_hcd
또한 위에서 언급한 동일한 블로그를 따라 재정의 스크립트를 만들어 보았습니다.
sudo nano /sbin/vfio-pci-override-usb.sh
#!/bin/sh
DEVS="0000:0a:00.0"
for DEV in $DEVS; do
echo "vfio-pci" > /sys/bus/pci/devices/$DEV/driver_override
done
modprobe -i vfio-pci
#####
sudo chmod 755 /sbin/vfio-pci-override-usb.sh
sudo nano /etc/modprobe.d/local.conf
이전 항목을 주석 처리하고 다음을 추가합니다.
install vfio-pci /sbin/vfio-pci-override-usb.sh
sudo update-initramfs -u
reboot
하지만 여전히 작동하지 않습니다.
~ lspci -kn | grep -A 2 0a:00
0a:00.0 0c03: 1b21:1242
Subsystem: 16b8:7230
Kernel driver in use: xhci_hcd
또한: lspci에서 드라이버를 검색하면(다른 드라이버를 사용하고 있는지 확인하기 위해) 여러 장치가 표시되지만 0a:00은 표시되지 않습니다.
~ lspci -kn | grep -A 2 xhci
Kernel driver in use: xhci_hcd
01:00.1 0106: 1022:43b6 (rev 02)
Subsystem: 1b21:1062
--
Kernel driver in use: xhci_hcd
0b:00.0 1300: 1022:145a
Subsystem: 1022:145a
--
Kernel driver in use: xhci_hcd
0c:00.0 1300: 1022:1455
Subsystem: 1022:1455
--
Kernel driver in use: xhci_hcd
46:00.0 1300: 1022:1455
Subsystem: 1022:1455
다음으로 드라이버를 블랙리스트에 등록해 보았습니다.
sudo nano /etc/default/grub
# original: GRUB_CMDLINE_LINUX_DEFAULT=”amd_iommu=on”
# to:
GRUB_CMDLINE_LINUX_DEFAULT=”modprobe.blacklist=xhci_hcd amd_iommu=on”
##then:
sudo update-grub
##Uncomment in local.conf:
# options vfio-pci ids=1b21:1242
sudo update-initramfs -u
아직 하지 않았습니다:
lspci -kn | grep -A 2 0a:00
0a:00.0 0c03: 1b21:1242
Subsystem: 16b8:7230
Kernel driver in use: xhci_hcd
또 무엇을 시도할 수 있나요? 이 장치에서 사용하는 커널 드라이버가 vfio-pci여야 한다고 생각하는 것이 맞습니까?
답변1
파티에 조금 늦었다는 것을 알고 있지만 Google 검색에서 비슷한 문제에 직면한 모든 사람에게 다음 내용이 도움이 되기를 바랍니다. 독립형 USB 컨트롤러에서만 이것을 테스트했습니다.
xhci_hcd는 실제로 커널에 내장되어 있으므로 USB 컨트롤러를 선언하며, 해결 방법이 발견되지 않는 한 vfio-pci는 사용 중인 커널로 할당되지 않습니다. 한 가지 방법은 바인딩/바인딩 해제를 위해 스크립트를 호출하는 것입니다.
이 문제를 해결하는 또 다른 쉬운 방법은 다음 명령을 사용하는 것입니다.
sudo driverctl -v set-override 0000:0X:00 vfio-pci
0000:0X:00은 PCI ID입니다.
재부팅 후 할당된 드라이버는 자동으로 vfio-pci가 됩니다.
답변2
하하, 바보야, 고생을 많이 한 것 같은데, virt-install에서 카드를 추가할 수 있고 카드가 VFIO 드라이버에 바인딩되어 있지 않아도 괜찮은 것 같습니다.
편집: NVIDIA GPU와 USB 카드를 동시에 전달할 수 없기 때문에 너무 빨리 말한 것 같습니다(virt-manager는 시작하려고 할 때 오류 없이 중단됩니다).. 하지만 별도의 것 같아요. 문제는 두 개의 특정 카드가 합쳐지는 것에 관한 것이기 때문입니다.
편집 #2: 비결은 다른 GPU로 Windows를 설치한 다음 도메인 XML을 편집하여 GPU 패스스루를 설정하는 것입니다.