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를 사용하는 것이 권장된다.
'Virtual > KVM' 카테고리의 다른 글
[Rocky 8.10][KVM] VM 생성 - GUI, CLI (0) | 2025.07.22 |
---|---|
[Rocky 8.10][KVM] Bonding + Bridge 네트워크 구성 (0) | 2025.07.18 |
[Rocky 8.10][KVM] 외부 통신 Setting (1) | 2025.07.17 |
[Rocky 8.10][KVM] KVM 설치 후 SSH 접속 안되는 현상 (1) | 2025.07.16 |
[Rocky 8.10][KVM] Bridge 설정 (0) | 2025.07.15 |