KVM 기반의 GPU Passthrough 환경

KVM 기반의 GPU Passthrough 환경
Hypervisor에서 하드웨어 장치를 직접 Virtual Machine에게 할당하는 PassThrough 를 소개하고 환경 설정 방법에 대해서 설명드리도록 하겠습니다.

PCI Passthrough란

PCI Passthrough는 NIC, 디스크 컨트롤러, HBA, USB 컨트롤러와 사운드 카드 등의 PCI 장치를 직접적으로 Guest에게 할당하여 바로 제어하고 접근 할 수 있도록 하는 방법입니다. 다음과 같은 특징과 장점이 있습니다.

Virtual Network의 가장 큰 오버헤드가 트래픽이 복사되는 것입니다. PCI Pass Through 기술은 호스트가 직접 NIC에 접근하여 처리하기 때문이 어러한 오버헤드를 피할 수 있습니다.
GPU를 직접 Guest 에게 할당 할 수 있으면, 3D 가속등의 하드웨어 기능을 오버헤드가 없이 Guest 에서 사용할 수 있습니다.

KVM Hypervisor 에서 PCI Passthrough를 통하여 PCI 장치를 Guest에게 직접 할당하기 위해서는 IOMMU 가상화기술(VT-d)이 지원되는 하드웨어가 필요합니다.

 KVM 기반의 GPU Passthrough 환경

Intel과 AMD 모두 프로세서 아키텍처에서 Hypervisor에서 PCI Passthrough 를 지원하도록 관련 기술을 제공하고 있습니다.

Intel에서는 이 옵션을 VT-d(Virtualization Technology for Directed I/O))라고 부르고, AMD에서는 IOMMU(I/O Memory Management Unit)라고 부릅니다. 두 경우 모두 새 CPU가 PCI의 실제 주소를 게스트의 가상 주소에 맵핑합니다.
추가적으로 주변기기의 오동작에서 메모리를 지키기 위해 메모리 보호 기능도 제공하게 됩니다. Intel CPU 기준으로 환경을 설정하는 방법에 대해 설명드리도록 하겠습니다.

GRUB 설정

/etc/default/grub 파일 열고, GRUB_CMDLINE_LINUX_DEFAULT 내용이 없을 경우 아래와 IOMMU를 설정하는 내용을 추가합니다.

GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"

만약 아래와 같이 기존 내용이 있을 경우 한 칸을 띄고 아래와 같이 내용을 추가합니다.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on"

그리고 다음 명령어 실행 한 후에 재부팅 합니다.

$ sudo update-grub

커널 모듈 설정

다음 명령어를 실행 한 뒤에 GPU 하드웨어 주소를 확인합니다.

$ sudo lspci -nn | grep -i nvidia
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1b06] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10ef] (rev a1)

GPU 장치와 Audio 장치의 하드웨어 주소를 각각 10de:1b06, 10de:10ef 으로 확인 합니다.
다음은 /etc/modprobe.d/vfio.conf 파일을 생성하고, 아래의 내용을 추가합니다.

# create new: for [ids=***], specify [vendor-ID:device-ID]
options vfio-pci ids=10de:1b06,10de:10ef

그리고, 다음 명령어를 실행 한 뒤에 시스템을 재부팅합니다.

$ sudo echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
$ sudo update-initramfs -u
$ reboot

설정 확인

다음 명령어를 사용하여, 하드웨어 주소가 추가되었는지 확인합니다.

$ sudo dmesg | grep -i vfio
[    2.854923] VFIO - User Level meta-driver version: 0.3
[    2.871499] vfio_pci: add [10de:1b06[ffff:ffff]] class 0x000000/00000000
[    2.887476] vfio_pci: add [10de:10ef[ffff:ffff]] class 0x000000/00000000

그리고 다음 명령어를 사용하여 가상머신에 할당할 하드웨어가 vfio-pci의 모듈이 사용되고 있는지확인해 주시기 바랍니다.

$ sudo lspci -k
01:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
	Subsystem: Micro-Star International Co., Ltd. [MSI] GP102 [GeForce GTX 1080 Ti]
	Kernel driver in use: vfio-pci
	Kernel modules: nvidiafb, nouveau
01:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
	Subsystem: Micro-Star International Co., Ltd. [MSI] GP102 HDMI Audio Controller
	Kernel driver in use: vfio-pci
	Kernel modules: snd_hda_intel

Cloud 기반 GPU 서버 호스팅

제공해 드리는 GPU 서버는 GPU Passthrough 기술을 이용하여, 성능 저하 없이 클라우드 서버에서 사용할 수 있기 됩니다. 필요하신 경우 GPU 서버는 아래의 페이지에서 신청 하실 수 있습니다.

네피리티
No Comments

Sorry, the comment form is closed at this time.