GPU 가상화

**GPU 가상화**(GPU virtualization)는 가상 머신에서 실행되는 컴퓨터 그래픽스 또는 GPGPU 애플리케이션을 하드웨어 가속하기 위해 GPU를 사용하는 것을 허용하는 기술을 가리킨다. GPU 가상화는 데스크톱 가상화, 클라우드 게임 및 계산과학(유체역학 시뮬레이션 등)과 같은 다양한 애플리케이션에 사용된다.

GPU 가상화 구현은 일반적으로 장치 에뮬레이션, API 원격화, 고정 패스스루 및 매개 패스스루의 하나 이상의 기술을 포함한다. 각 기술은 가상 머신 대 GPU 통합 비율, 그래픽스 하드웨어 가속, 렌더링 화질, 소프트웨어 기능 지원, 다른 하드웨어로의 소프트웨어 이식성, 가상 머신 간 프로세스 격리, 그리고 일시 중단/재개 및 라이브 마이그레이션 지원과 관련하여 다른 장단점을 제공한다.

## API 원격화

API 원격화 또는 API 포워딩에서 게스트 애플리케이션의 그래픽 API 호출은 원격 프로시저 호출을 통해 호스트로 전달되며, 호스트는 호스트의 GPU를 단일 사용자로 사용하여 여러 게스트의 그래픽 명령을 실행한다. 이는 장치 에뮬레이션과 결합될 때 반가상화의 한 형태로 간주될 수 있다. 이 기술은 GPU가 하드웨어 지원 가상화를 지원하지 않을 때 여러 게스트와 호스트 간에 GPU 리소스를 공유할 수 있도록 한다. 구현 개념은 간단하지만, 여러 단점이 있다.
* 순수 API 원격화에서는 그래픽 API에 접근할 때 가상 머신 간에 격리가 거의 없다. 반가상화를 사용하여 격리를 개선할 수 있다.
* 필름 프레임당 많은 수의 드로잉 호출을 발행하는 애플리케이션의 경우 성능이 기본 성능의 86%에서 12%까지 낮아진다.
* 많은 수의 API 진입점을 전달해야 하며, 진입점의 부분적인 구현은 충실도를 저하시킬 수 있다.
* 게스트 머신의 애플리케이션은 사용 가능한 API가 적을 수 있다.

하이퍼바이저는 일반적으로 게스트와 호스트 간에 공유 메모리를 사용하여 성능을 최대화하고 지연 시간을 최소화한다. 대신 네트워크 인터페이스를 사용하면 (분산 렌더링에서 일반적인 접근 방식) 타사 소프트웨어가 특정 API(CUDA용 rCUDA 등) 또는 일반적인 API(OpenGL용 VMGL 등) 지원을 추가할 수 있지만, 네트워크 지연 및 직렬화 오버헤드가 이점을 상쇄할 수 있다.

## 고정 패스스루

고정 패스스루 또는 GPU 패스스루(PCI 버스 패스스루의 특수 사례)에서 GPU는 단일 가상 머신에 의해 독점적이고 영구적으로 직접 접근된다. 이 기술은 기본 성능의 96~100%를 달성하고 높은 충실도를 제공하지만, GPU가 제공하는 가속은 여러 가상 머신 간에 공유될 수 없다. 따라서 이 기술은 통합 비율이 가장 낮고, 그래픽 가속을 사용하는 각 가상 머신에 추가적인 물리적 GPU가 필요하므로 비용이 가장 높다.

다음 소프트웨어 기술은 고정 패스스루를 구현한다.
* VM웨어 가상 전용 그래픽스 가속(vDGA)
* Parallels Workstation Extreme
* 하이퍼-V 개별 장치 할당(DDA)
* 시트릭스 젠서버 GPU 패스스루
* 젠 및 QEMU/KVM (인텔 GVT-d 사용)

버추얼박스는 버전 6.1.0에서 PCI 패스스루 지원을 제거했다.

### QEMU/KVM
특정 GPU 모델의 경우 엔비디아와 AMD 비디오 카드 드라이버는 GPU가 가상 머신에 의해 액세스되고 있음을 감지하고 일부 또는 모든 GPU 기능을 비활성화하려고 한다. 엔비디아는 최근 지포스 게임 레디 드라이버 465.xx 이상에서 이 검사를 비활성화하여 소비자 GPU의 가상화 규칙을 변경했다.

엔비디아의 경우, 데스크톱 및 노트북 소비자 GPU의 다양한 아키텍처는 다양한 방식으로 패스스루될 수 있다. 데스크톱 그래픽 카드의 경우, 레거시 또는 UEFI BIOS 구성을 통해 각각 SeaBIOS 및 OVMF를 사용하여 KVM을 통해 패스스루가 가능하다.

### 엔비디아

#### 데스크톱
데스크톱의 경우 대부분의 그래픽 카드를 패스스루할 수 있지만, 파스칼 아키텍처 또는 그 이전의 그래픽 카드의 경우 GPU가 호스트를 부팅하는 데 사용되면 가상 머신에서 그래픽 카드의 VBIOS를 패스스루해야 한다.

#### 노트북
노트북의 경우 엔비디아 드라이버는 ACPI를 통해 배터리 존재 여부를 확인하며, 배터리가 없으면 오류가 반환된다. 이를 방지하려면 Base64로 변환된 텍스트로 생성된 acpitable이 필요하며, 이는 배터리를 속여 검사를 우회하는 데 사용된다.

##### 파스칼 및 이전 버전
파스칼 및 이전 버전의 노트북 그래픽 카드의 경우, 패스스루는 그래픽 카드 구성에 따라 크게 달라진다. MXM 변형과 같이 엔비디아 옵티머스가 없는 노트북의 경우, 전통적인 방법을 통해 패스스루를 달성할 수 있다. 엔비디아 옵티머스가 켜져 있고 자체 그래픽스 프레임버퍼 대신 CPU의 통합 그래픽스 프레임버퍼를 통해 렌더링하는 노트북의 경우, 패스스루는 더 복잡하여 원격 렌더링 디스플레이 또는 서비스, 인텔 GVT-g의 사용, 그리고 GPU 자체 대신 노트북 시스템 BIOS에 VBIOS가 존재하기 때문에 VBIOS를 부팅 구성에 통합해야 한다. 엔비디아 옵티머스를 지원하고 전용 프레임버퍼를 갖춘 노트북의 경우, 구성이 다를 수 있다. 엔비디아 옵티머스를 끌 수 있다면, 전통적인 방법으로 패스스루가 가능하다. 그러나 옵티머스만이 유일한 구성이라면, VBIOS가 노트북 시스템 BIOS에 존재할 가능성이 높으며, 통합 그래픽스 프레임버퍼에서만 렌더링하는 노트북과 동일한 단계를 거쳐야 하지만, 외부 모니터 연결도 가능하다.

## 매개 패스스루

매개 장치 패스스루 또는 완전 GPU 가상화에서 GPU 하드웨어는 IOMMU를 통해 각 게스트에 가상 주소 공간을 갖는 컨텍스트를 제공하며, 하이퍼바이저는 게스트의 그래픽 명령을 GPU로 직접 보낸다. 이 기술은 하드웨어 지원 가상화의 한 형태로, 거의 기본에 가까운 성능과 높은 충실도를 달성한다. 하드웨어가 컨텍스트를 완전한 논리적 장치로 노출하는 경우, 게스트는 모든 API를 사용할 수 있다. 그렇지 않으면 API와 드라이버가 GPU 컨텍스트의 추가적인 복잡성을 관리해야 한다. 단점으로는 GPU 리소스에 접근할 때 가상 머신 간에 격리가 거의 없을 수 있다는 점이다.

다음 소프트웨어 및 하드웨어 기술은 매개 패스스루를 구현한다.
* VM웨어 가상 공유 패스스루 그래픽스 가속 (엔비디아 vGPU 또는 AMD MxGPU 사용)
* 시트릭스 젠서버 공유 GPU (엔비디아 vGPU, AMD MxGPU 또는 인텔 GVT-g 사용)
* 젠 및 KVM (인텔 GVT-g 사용)
* Thincast Workstation - Virtual 3D 기능 (Direct X 12 & Vulkan 3D API)

API 원격화는 일반적으로 현재 및 이전 GPU에서 사용할 수 있지만, 매개 패스스루는 특정 장치에서만 사용 가능한 하드웨어 지원이 필요하다.

## 장치 에뮬레이션

GPU 아키텍처는 매우 복잡하고 빠르게 변화하며, 내부 세부 사항은 종종 비밀로 유지된다. 새로운 세대의 GPU를 완전히 가상화하는 것은 일반적으로 불가능하며, 이전 세대의 단순한 GPU만 가능하다. 예를 들어, IBM PC 호환기종 아키텍처의 특수 에뮬레이터인 PCem은 Direct3D 3을 지원하는 S3 ViRGE/DX 그래픽 장치와 글라이드를 지원하는 3dfx Voodoo2 등을 에뮬레이트할 수 있다.

VGA 또는 SVGA 가상 디스플레이 어댑터를 사용할 경우, 게스트는 3D 그래픽스 가속이 없을 수 있으며, 그래픽스 터미널을 통해 머신에 접근할 수 있는 최소한의 기능만 제공한다. 에뮬레이트된 장치는 게스트에게 기본적인 2D 그래픽스 모드만 노출할 수 있다. 가상 머신 관리자는 소프트웨어 렌더링을 사용하여 일반적인 API 구현을 제공하여 게스트에서 3D 그래픽스 애플리케이션을 활성화할 수 있지만, 하드웨어 가속 기본 성능의 3% 정도로 낮은 속도로 작동할 수 있다. 다음 소프트웨어 기술은 소프트웨어 렌더링을 사용하여 그래픽스 API를 구현한다.
* VM웨어 SVGA 3D 소프트웨어 렌더러
* 버추얼박스 VMSVGA 그래픽스 컨트롤러
* 시트릭스 젠서버 OpenGL 소프트웨어 가속기
* 윈도우 고급 래스터화 플랫폼
* 코어 OpenGL 소프트웨어 렌더러
* 메사 소프트웨어 렌더러
* 스위프트 셰이더(Swift Shader, 웹GPU 구현) 소프트웨어 렌더러

## 같이 보기
* 플랫폼 가상화 소프트웨어 비교

## 참고

## 각주

분류:하드웨어 가상화