본문 바로가기
Virtual/KVM

[Rocky 8.10][KVM] Nvidia GPU PassThrough(pGPU) 구성

by Yoon_estar 2025. 7. 21.
728x90

개요

  • Nvidia GPU를 VFIO(Virtual Function I/O) 모듈을 통해 패스스루(pass-through) 하기 위한 과정
  • 주로 KVM/QEMU 가상화 환경에서 GPU를 VM에 직접 할당하려는 목적에 사용됨
  • 설정 후 GPU는 호스트에서 사용되지 않으며, vfio-pci 드라이버에 바인딩되어 가상머신에서 사용할 수 있음

패스스루(Pass-Through)

  • 호스트 시스템에 물리적으로 연결된 하드웨어 자원(GPU, NIC등)을 가상머신이 직접 제어할 수 있도록 직접 연결해 주는 기술
  • 가상 환경에서도 네이티브 성능에 가까운 하드웨어 엑세스를 제공해줌
  • VM에서 GPU를 CUDA 연산용으로 사용하거나, 게이밍/렌더링에 활용하는 경우

VFIO & vfio-pci

  • VFIO(Virtual Function I/O)는 리눅스 커널에서 사용자 공간 애플리케이션(QEMU)이 직접 I/O 장치를 안전하게 접근할 수 있도록 해주는 프레임 워크
  • vfio-pci는 VFIO에서 PCI 장치를 제어하기 위한 커널 모듈로, 특정 장치를 커널이 아닌 VFIO에 넘겨주는 역할을 함
  • 즉 vfio-pci에 바인딩 된 장치는 리눅스 호스트에서 사용되지 않고, 가상 머신에 넘겨질 수 있음

 

커널 IOMMU 설정(KVM 서버)

 

IOMMU 활성화

# grubby --update-kernel=ALL --args="intel_iommu=on iommu=pt"

 

 

intel_iommu=on IOMMU 기능 활성화
iommu=p 패스스루 성능 최적화 (PassThrough 모드)

 

GRUB 설정 적용

# grub2-mkconfig -o /boot/grub2/grub.cfg

 

GRUB 설정 확인

# grep CMDLINE /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=2G-64G:256M,64G-:512M resume=UUID=af9fd34a-e6cf-4df4-96ed-9447f38bbeb4 rd.lvm.lv=rl/root rd.lvm.lv=rl/swap intel_iommu=on iommu=pt"

 

 

 

nouveau 드라이버 비활성화(KVM 서버)

 

블랙 리스트 설정

echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf
echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist-nouveau.conf

 

initramfs 재생성

  • dracut은 부팅 시 불러올 커널 모듈 초기화 이미지(Initramfs)를 재생성합니다.
# dracut -f --kver $(uname -r)

 

시스템 재부팅

shutdown -r now

 

블랙리스트 설정 확인

  • 아무것도 출력 안되야함
lsmod | grep nouveau

 

 

vfio-pci 바인딩 설정(KVM 서버)

 

pciutils install

dnf install pciutils -y

 

GPU 장치 정보 확인

# lspci -nn | grep NVIDIA

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA107 [GeForce RTX 3050 8GB] [10de:2582] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:2291] (rev a1)

 

vfio-pci 바인딩할 장치 ID 설정

  • 10de:xxx 는 위에서 확인한 GPU 및 오디오 장치의 Vendor ID:Device ID
echo "options vfio-pci ids=10de:1c82,10de:0fb9" > /etc/modprobe.d/vfio.conf

2291
echo "options vfio-pci ids=10de:2291" > /etc/modprobe.d/vfio.conf

 

vfio 모듈 로딩 설정(KVM 서버)

 

모듈 수동 로드

modprobe vfio
modprobe vfio_pci
modprobe vfio_iommu_type1

 

부팅 시 자동 로딩 설정

# cat << EOF > /etc/modules-load.d/vfio.conf
vfio
vfio_pci
vfio_iommu_type1
EOF

 

재부팅

# reboot

 

vfio 모듈 확인

# lsmod | grep vfio
vfio_pci               61440  0
vfio_virqfd            16384  1 vfio_pci
irqbypass              16384  2 vfio_pci,kvm
vfio_iommu_type1       36864  0
vfio                   36864  2 vfio_iommu_type1,vfio_pci

 

vfio-pci 바인딩 확인

# lspci -nnk | grep -A 2 NVIDIA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA107 [GeForce RTX 3050 8GB] [10de:2582] (rev a1)
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8d9d]
        Kernel driver in use: nvidia
--
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:2291] (rev a1)
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:8d9d]
        Kernel driver in use: snd_hda_intel

 

가상 머신 설정

Graphic 환경에서 virt manager 실행

 

가상 머신 선택 후 Virtual Machine Details 선택

 

왼쪽 하단 클릭 +Add Hardware 클릭

재부팅 후 guest os(VM)에서 확인

 

 

 

참고 사항

 

Pass-through를 설정하면 local KVM 서버에서는 GPU 관리 권한이 없어지기 때문에 GPU에 연결된 디스플레이가 부팅 시 출력되지 않거나, 콘솔 화면이 나오지 않을 수 있다.

따라서 서버에 연결된 모니터로 출력이 필요하다면, iGPU 또는 별도의 GPU를 사용하는 것이 권장된다.