PCI-Passthrough KVM

커널에 iommu 활성화

grubby --args="amd_iommu=on intel_iommu=on iommu=pt" --update-kernel DEFAULT

적용 후 리부팅

passthrough 적용할 장치의 정보 조회

$ lspci -Dnn | grep VGA
0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)

# 호스트의 그래픽 드라이버가 GPU를 사용하지 못하도록 합니다. 이렇게 하려면 pci-stub 드라이버와 함께 GPU의 PCI ID를 사용합니다.
# 예를 들어, 다음 명령은 드라이버가 10de:11fa 버스에 연결된 GPU에 바인딩하지 못하도록 합니다:
$ grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
$ sync; reboot

추가적으로 대부분의 그래픽카드에는 오디오 관련 장치가 같이 탑재되어있으며 해당 장치또한 호스트에 활성장치로 작동하게 된다. 해당 엔드포인트가 호스트 드라이버에 연결되지 않도록 합니다.
이 예제에서는 GPU를 VM에 할당하려면 오디오 기능에 해당하는 엔드포인트인 <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>가 호스트 오디오 드라이버에 연결되지 않도록 하고 대신 엔드포인트를 VFIO-PCI에 연결합니다.

$ driverctl set-override 0000:02:00.1 vfio-pci
$ sync; reboot

이후 해당 장치를 VM에 할당해주면 완료된다.

참조링크