Ubuntu 22.04 KVM GPU Passthrough with VFIO - Full Guide
이 문서는 Ubuntu 22.04 환경에서 KVM 가상 머신에 GPU를 Passthrough 하기 위해 VFIO를 활용한 전체 설정 과정 입니다.
✅ 사전 준비
하드웨어 요구사항
- VT-d(Intel) 또는 AMD-Vi 지원 CPU
- IOMMU 지원 메인보드
- Passthrough 가능한 NVIDIA GPU (ex. RTX 4090)
소프트웨어 구성
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager ovmf pciutils
✅ IOMMU 활성화
GRUB 설정
sudo nano /etc/default/grub
Intel
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on iommu=pt"
AMD
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on iommu=pt"
sudo update-grub
sudo reboot
✅ VFIO 바인딩 설정
VFIO 관련 모듈 로드 설정
sudo tee /etc/modules-load.d/vfio.conf <<EOF
vfio
vfio_pci
vfio_virqfd
vfio_iommu_type1
EOF
NVIDIA 드라이버 블랙리스트
sudo tee /etc/modprobe.d/blacklist-nvidia.conf <<EOF
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist nvidia_drm
blacklist nvidia_uvm
blacklist gdrdrv
blacklist snd_hda_intel
EOF
✅ VFIO 바인딩 장치 ID 지정
4090 GPU + 오디오 장치 ID 기준:
sudo tee /etc/modprobe.d/vfio-pci.conf <<EOF
options vfio-pci ids=10de:2684,10de:22ba
EOF
✅ initramfs 재생성
sudo update-initramfs -u
sudo reboot
❗ 문제 상황: VFIO 바인딩 실패
현상
lspci -nnk
에서Kernel driver in use:
비어 있음vfio-pci
로 바인딩되지 않고, NVIDIA 드라이버도 사용하지 않는 상태
해결: 수동 바인딩
echo 10de 2684 > /sys/bus/pci/drivers/vfio-pci/new_id
echo 10de 22ba > /sys/bus/pci/drivers/vfio-pci/new_id
echo 0000:1a:00.0 > /sys/bus/pci/devices/0000:1a:00.0/driver/unbind
echo 0000:1a:00.1 > /sys/bus/pci/devices/0000:1a:00.1/driver/unbind
echo 0000:68:00.0 > /sys/bus/pci/devices/0000:68:00.0/driver/unbind
echo 0000:68:00.1 > /sys/bus/pci/devices/0000:68:00.1/driver/unbind
echo 0000:1a:00.0 > /sys/bus/pci/drivers/vfio-pci/bind
echo 0000:1a:00.1 > /sys/bus/pci/drivers/vfio-pci/bind
echo 0000:68:00.0 > /sys/bus/pci/drivers/vfio-pci/bind
echo 0000:68:00.1 > /sys/bus/pci/drivers/vfio-pci/bind
✅ 자동 바인딩 스크립트 설정
설정 파일
echo "ENABLE=1" | sudo tee /etc/vfio-bind.conf
스크립트 생성 (현재 수정중입니다. 사용하지 마세요.)
sudo nano /etc/initramfs-tools/scripts/init-top/vfio-bind
#!/bin/sh
CONFIG=/etc/vfio-bind.conf
if [ -f "$CONFIG" ]; then
. "$CONFIG"
else
ENABLE=1
fi
if [ "$ENABLE" != "1" ]; then
echo "VFIO Bind: Skipped (disabled in config)"
exit 0
fi
echo "VFIO Bind: Running..."
DEVICES="0000:1a:00.0 0000:1a:00.1 0000:68:00.0 0000:68:00.1"
for dev in $DEVICES; do
if [ -e "/sys/bus/pci/devices/$dev/driver" ]; then
echo $dev > "/sys/bus/pci/devices/$dev/driver/unbind"
fi
echo vfio-pci > "/sys/bus/pci/devices/$dev/driver_override"
done
for dev in $DEVICES; do
echo $dev > /sys/bus/pci/drivers_probe
done
sudo chmod +x /etc/initramfs-tools/scripts/init-top/vfio-bind
sudo update-initramfs -u
✅ VFIO ON/OFF 스위치 사용법
동작 | 명령어 |
---|---|
VFIO 바인딩 활성화 | `echo "ENABLE=1" |
VFIO 비활성화 (드라이버 원복) | `echo "ENABLE=0" |
설정 반영 | sudo update-initramfs -u && sudo reboot |
🎉 최종 결과
lspci -nnk | grep -A 3 -i nvidia
출력에 Kernel driver in use: vfio-pci
가 나올 경우 성공!
'GPU' 카테고리의 다른 글
GPU를 통한 AI 연구시 OS 결정요소 (Linux vs Windows) (0) | 2025.05.07 |
---|