Wirtualizacja GPU

Wirtualizacja GPU odnosi się do technologii, które umożliwiają użycie GPU do przyspieszenia grafiki lub aplikacji GPGPU działających na maszynie wirtualnej . Wirtualizacja GPU jest wykorzystywana w różnych zastosowaniach, takich jak wirtualizacja komputerów stacjonarnych , gry w chmurze i nauki obliczeniowe (np. symulacje hydrodynamiczne ).

Implementacje wirtualizacji GPU zazwyczaj obejmują jedną lub więcej z następujących technik: emulację urządzenia, zdalne API, stałe przekazywanie i pośredniczone przekazywanie. Każda technika wiąże się z różnymi kompromisami w zakresie stosunku konsolidacji maszyny wirtualnej do GPU , akceleracji grafiki , wierności renderowania i obsługi funkcji , przenośności na inny sprzęt, izolacji między maszynami wirtualnymi oraz obsługi wstrzymywania/wznawiania i migracji na żywo .

Zdalne API

W zdalnym przekazywaniu lub przekazywaniu interfejsów API wywołania graficznych interfejsów API z aplikacji gościa są przekazywane do hosta za pomocą zdalnego wywołania procedury , a następnie host wykonuje polecenia graficzne od wielu gości, korzystając z procesora graficznego hosta jako pojedynczy użytkownik. Można to uznać za formę parawirtualizacji w połączeniu z emulacją urządzenia. Ta technika umożliwia współdzielenie zasobów GPU między wieloma gośćmi i hostem, gdy GPU nie obsługuje wirtualizacji wspomaganej sprzętowo. Jest koncepcyjnie prosty do wdrożenia, ale ma kilka wad:

  • W czystym zdalnym interfejsie API istnieje niewielka izolacja między maszynami wirtualnymi podczas uzyskiwania dostępu do graficznych interfejsów API; izolację można poprawić za pomocą parawirtualizacji
  • Wydajność waha się od 86% do zaledwie 12% natywnej wydajności w aplikacjach, które generują dużą liczbę wywołań rysowania na klatkę
  • Duża liczba punktów wejścia API musi zostać przekazana, a częściowa implementacja punktów wejścia może zmniejszyć wierność
  • Aplikacje na maszynach-gościach mogą być ograniczone do kilku dostępnych interfejsów API

Hiperwizory zwykle używają pamięci współdzielonej między gościem a hostem, aby zmaksymalizować wydajność i zminimalizować opóźnienia. Używając interfejsu sieciowego (powszechne podejście w renderowaniu rozproszonym ), oprogramowanie innych firm może dodać obsługę określonych interfejsów API (np. rCUDA dla CUDA ) lub dodać obsługę typowych interfejsów API (np. pakietu oprogramowania, chociaż opóźnienie sieci i narzut związany z serializacją mogą przeważyć nad korzyściami.

Wsparcie aplikacji z technologii wirtualizacji zdalnej API
Technologia Direct3D OpenGL Wulkan OpenCL
VMware (vSGA) 11 4.1 Tak NIE
Akceleracja Parallels Desktop dla komputerów Mac 3D 11 3.3 NIE NIE
Hyper-V RemoteFX vGPU 12 4.4 NIE 1.1
VirtualBox Guest Additions 3D 8/9 2.1 NIE NIE
Stacja robocza Thincast — wirtualne 3D 12.1 NIE Tak NIE
QEMU / KVM z Virgilem 3D NIE 4.3 Zaplanowany NIE

Naprawiono przejście

W trybie fixed pass-through lub GPU pass-through (specjalny przypadek PCI pass-through) dostęp do GPU jest uzyskiwany wyłącznie i na stałe przez pojedynczą maszynę wirtualną. Technika ta zapewnia 96–100% natywnej wydajności i wysokiej wierności, ale przyspieszenie zapewniane przez procesor graficzny nie może być współużytkowane przez wiele maszyn wirtualnych. W związku z tym ma najniższy współczynnik konsolidacji i najwyższy koszt, ponieważ każda maszyna wirtualna z akceleracją graficzną wymaga dodatkowego fizycznego procesora graficznego.

Następujące technologie oprogramowania implementują stałe przekazywanie:

VirtualBox usunął obsługę pass-through PCI w wersji 6.1.0.

QEMU/KVM

W przypadku niektórych modeli procesorów graficznych sterowniki kart graficznych Nvidia i AMD próbują wykryć dostęp maszyny wirtualnej do procesora graficznego i wyłączyć niektóre lub wszystkie funkcje procesora graficznego. Firma NVIDIA niedawno zmieniła zasady wirtualizacji dla konsumenckich procesorów graficznych, wyłączając sprawdzanie w sterowniku GeForce Game Ready 465.xx i nowszych.

W przypadku firmy NVIDIA różne architektury konsumenckich procesorów graficznych do komputerów stacjonarnych i laptopów mogą być przepuszczane na różne sposoby. W przypadku kart graficznych do komputerów stacjonarnych przejście można wykonać za pośrednictwem KVM przy użyciu starszej konfiguracji BIOS lub UEFI BIOS odpowiednio za pośrednictwem SeaBIOS i OVMF.

NVIDIA

Komputery stacjonarne

W przypadku komputerów stacjonarnych większość kart graficznych może być przepuszczana, chociaż w przypadku kart graficznych o architekturze Pascal lub starszej VBIOS karty graficznej musi zostać przekazany w maszynie wirtualnej, jeśli GPU jest używany do uruchamiania hosta.

Laptopy

W przypadku laptopów sterownik NVIDIA sprawdza obecność baterii przez ACPI, a bez baterii zostanie zwrócony błąd. Aby tego uniknąć, acpitable utworzony z tekstu przekonwertowanego na Base64 jest wymagany do sfałszowania baterii i obejścia kontroli.

Pascala i wcześniejszych

W przypadku kart graficznych do laptopów, które są w Pascalu i starsze, przepustowość różni się znacznie w zależności od konfiguracji karty graficznej. W przypadku laptopów, które nie mają NVIDIA Optimus, takich jak warianty MXM, przejście można uzyskać tradycyjnymi metodami. W przypadku laptopów z włączoną technologią NVIDIA Optimus oraz renderowaniem przez zintegrowany bufor graficzny procesora, w przeciwieństwie do własnego, przekazywanie jest bardziej skomplikowane i wymaga zdalnego renderowania wyświetlacza lub usługi, użycia Intel GVT-g, a także integracji VBIOS w konfiguracji rozruchowej, ponieważ VBIOS jest obecny w systemie BIOS laptopa, a nie w samym GPU. W przypadku laptopów z procesorem graficznym NVIDIA Optimus i dedykowanym buforem ramki konfiguracje mogą się różnić. Jeśli NVIDIA Optimus może zostać wyłączona, to przekazywanie jest możliwe za pomocą tradycyjnych środków. Jeśli jednak Optimus jest jedyną konfiguracją, to najprawdopodobniej VBIOS jest obecny w BIOS-ie systemowym laptopa i wymaga tych samych czynności, co renderowanie laptopa tylko na zintegrowanym buforze ramki graficznej, ale możliwy jest również zewnętrzny monitor.

Zapośredniczone przejście

W przypadku pośredniczącego tranzytu urządzenia lub pełnej wirtualizacji GPU, sprzęt GPU zapewnia konteksty z zakresami pamięci wirtualnej dla każdego gościa za pośrednictwem IOMMU , a hiperwizor wysyła polecenia graficzne od gości bezpośrednio do GPU. Ta technika jest formą wirtualizacji wspomaganej sprzętowo i zapewnia niemal natywną wydajność i wysoką wierność. Jeśli sprzęt udostępnia konteksty jako pełne urządzenia logiczne, goście mogą korzystać z dowolnego interfejsu API. W przeciwnym razie interfejsy API i sterowniki muszą radzić sobie z dodatkową złożonością kontekstów GPU. Wadą może być niewielka izolacja między maszynami wirtualnymi podczas uzyskiwania dostępu do zasobów GPU.

Następujące technologie oprogramowania i sprzętu implementują zapośredniczone przekazywanie:

  • VMware Virtual Shared Pass-Through z Nvidia vGPU lub AMD MxGPU
  • Citrix XenServer z Nvidia vGPU, AMD MxGPU lub Intel GVT-g
  • Xen i KVM z Intel GVT-g
  • Thincast Workstation — funkcja Virtual 3D (Direct X 12 i Vulkan 3D API)

Podczas gdy zdalne API jest ogólnie dostępne dla aktualnych i starszych procesorów graficznych, zapośredniczone przekazywanie wymaga wsparcia sprzętowego dostępnego tylko na określonych urządzeniach.

Wsparcie sprzętowe dla pośredniczącej wirtualizacji tranzytowej
Sprzedawca Technologia rodziny kart graficznych Zintegrowane rodziny GPU
serwer Profesjonalny Konsument
Nvidia vGPU GRID , Tesla Quadro NIE
AMD MxGPU Serwer FirePro , Radeon Instinct Radeona Pro NIE NIE
Intel GVT-g Broadwell i nowsze

Emulacja urządzenia

Architektury GPU są bardzo złożone i szybko się zmieniają, a ich wewnętrzne szczegóły są często utrzymywane w tajemnicy. Ogólnie rzecz biorąc, pełna wirtualizacja nowych generacji procesorów graficznych jest niewykonalna, a jedynie starsze i prostsze generacje. Na przykład PCem , wyspecjalizowany emulator architektury IBM PC , może emulować urządzenie graficzne S3 ViRGE /DX, które obsługuje Direct3D 3, oraz 3dfx Voodoo2 , które obsługuje między innymi Glide .

Podczas korzystania z wirtualnej karty graficznej VGA lub SVGA gość może nie mieć akceleracji grafiki 3D, zapewniając jedynie minimalną funkcjonalność umożliwiającą dostęp do urządzenia za pośrednictwem terminala graficznego. Emulowane urządzenie może udostępniać gościom tylko podstawowe tryby grafiki 2D. Menedżer maszyny wirtualnej może również udostępniać wspólne implementacje interfejsu API, korzystając z renderowania oprogramowania , aby umożliwić aplikacjom grafiki 3D na gościach, aczkolwiek z szybkościami, które mogą być niskie, jak 3% natywnej wydajności przyspieszanej sprzętowo. Następujące technologie oprogramowania implementują interfejsy API grafiki przy użyciu renderowania programowego:

Zobacz też

Notatki