PCI-STUB에 비해 VFIO-PCI를 사용하면 어떤 이점이 있는지 묻고 싶습니다.
이 기사를 발견했습니다"OVMF를 통한 PCI 패스스루”그러나 그들은 모든 장점을 언급하지는 않았지만 VFIO에 몇 가지 장점이 있다는 것뿐입니다.
감사해요
답변1
PCI-STUB는 가상 드라이버입니다. 이는 원시 KVM 장치 할당이 호스트 드라이버로 할당된 장치에 실제로 바인딩되지 않고 단지 장치를 잡고 사용하기 시작하기 때문에 원래 개발되었습니다. KVM이 올바른 장치 드라이버가 아니기 때문에 KVM이 사용자에게 장치를 할당할 때 다른 호스트 드라이버가 장치에 바인딩을 시도할 수 있습니다. pci-stub 드라이버는 장치의 드라이버 슬롯을 차지하기 위해 도입되었으며 KVM은 이를 사용합니다.
pci-stub과 달리 vfio는 사용자 공간 드라이버에 대한 완전한 인터페이스입니다. 이는 장치에 대한 안전하고 격리된 IOMMU 보호 액세스를 제공합니다.
vfio의 장점:
pci-stub은 일반적으로 커널에 내장되어 있어 로드 가능한 모듈의 드라이버보다 먼저 장치에 바인딩할 수 있습니다. 이 설정을 사용하면 호스트 드라이버가 장치에 액세스하기 전에 pci-stub에 장치에 바인딩하도록 지시하여 게스트에 할당할 수 있도록 장치를 원래 상태로 유지할 수 있습니다.
vfio의 또 다른 소규모 사용 사례는 IOMMU 그룹화입니다. 여러 장치가 포함된 그룹이 있는 경우 그룹의 모든 장치는 호환 가능한 드라이버에 바인딩되어야 합니다. 그렇지 않으면 vfio는 그룹을 실행할 수 없는 것으로 간주합니다. 이는 호스트 드라이버가 서로 격리되지 않으므로 사용자 제어 장치와 동일한 그룹에 있는 것을 방지하기 위한 것입니다. pci-stub의 경우 드라이버가 호스트를 대신하여 DMA를 시작하지 않는다는 것을 알고 있으므로 호환 가능하다고 가정합니다.
따라서 IOMMU 그룹에 그룹을 실행 가능하게 만들기 위해 무언가를 수행해야 하는 엔드포인트가 있지만 사용자가 해당 그룹에 액세스할 수 없도록 하려는 경우 장치를 pci-stub에 바인딩할 수 있습니다. 감염된 사용자는 vfio 인터페이스를 통해 vfio-pci에 바인딩된 그룹의 다른 장치를 열 수 없기 때문에 장치를 vfio-pci에 바인딩하는 것에 비해 약간의 추가 보호 기능을 추가합니다.
답변2
Ehtesham의 답변에 따르면 pci-stub은 nouvaeu, nvidia, radeon, amdgpu 등과 같은 장치 드라이버가 로드되는 것을 방지하여 장치의 BIOS가 드라이버에 의해 초기화되지 않고 KVM으로 전달될 수 있도록 하는 데 사용되는 더미 드라이버입니다.
vfio-pci 다음에 로드할 다른 모듈을 나열하는 conf 파일을 넣어 vfio-pci가 장치 드라이버보다 먼저 로드되도록 하는 구성 옵션이 있다는 점을 추가하고 싶습니다.
예를 들어 Ubuntu 18.04에서는 /etc/modprobe.d/에 다음 내용으로 vfio-pci.conf를 생성합니다.
#options vfio-pci ids=vendid:devid,vendid:devid2,...
softdep radeon pre: vfio-pci
softdep amdgpu pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
#softdep nouveau pre: vfio-pci
#softdep drm pre: vfio-pci
#softdep nvidia pre: vfio-pci
#softdep xhci_hdc pre: vfio-pci
vfio-pci id 목록을 grub에 추가하면 첫 번째 줄이 필요하지 않습니다.