ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ NVIDIA ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° Π½Π°Π±ΠΎΡ ΠΏΠ°ΡΡΠ΅ΠΉ Π΄Π»Ρ ΡΠ΄ΡΠ° Linux Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ vGPU, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ GPU NVIDIA Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π Π°Π±ΠΎΡΠ° vGPU ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ GPU NVIDIA ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ vGPU ΡΠ²ΠΎΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ PCI Express (VF, Virtual Function), ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π° Π±Π°Π·Π΅ Π³ΠΎΡΡΠ΅Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΌΠΎΡΠ½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΡΡΠ°Π½ΡΠΈΠΈ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅ΡΡΡΡΠΎΡΠΌΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠ°ΠΉΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Ρ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ°ΠΌΠΈ NVIDIA Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡΠΎΠ°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Ada Lovelace. Π§ΠΈΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ vGPU Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ.
ΠΠ° ΡΡΠΎΡΠΎΠ½Π΅ Ρ ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠΎΠΏΡΡΠΆΠ΅Π½ΠΈΡ vGPU Ρ Π³ΠΎΡΡΠ΅Π²ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Nouveau, Π° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ Π³ΠΎΡΡΠ΅Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ°ΡΠ½ΡΠ΅ ΠΏΡΠΎΠΏΡΠΈΠ΅ΡΠ°ΡΠ½ΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ NVIDIA (Π² Π³ΠΎΡΡΠ΅Π²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ vGPU Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ GPU). ΠΠ»Ρ vGPU Π²ΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ· ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠ° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ GPU, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ Π·Π° Π΄Π°Π½Π½ΡΠΌ vGPU ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌ. ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ vGPU, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡΠΈ, ΡΠΈΡΠ»ΠΎΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ Π΄ΠΈΡΠΏΠ»Π΅Π΅Π² ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΊΡΠ°Π½Π°.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π±Π°Π·ΠΎΠ²ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ nvkm (core driver), ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π° Π±Π°Π·Π΅ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Nouveau, ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ vGPU — vgpu_mgr, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π² ΡΠΎΡΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ VFIO (Virtual Function I/O). ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ vGPU Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅/ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ vGPU, Π²ΡΠ±ΠΎΡ ΡΠΈΠΏΠ° vGPU, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ API Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ vGPU Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠΌ GPU, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ GSP, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ vGPU ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ, ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ, ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ Π² GPU, Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² ΡΠΏΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. +———————+ +———————+ +———————+ | Linux VM | | Windows VM | | Guest VM | | +—————-+ | | +—————-+ | | +—————-+ | | |Applications… | | | |Applications… | | | |Applications… | | | +—————-+ | | +—————-+ | | +—————-+ | … | +—————-+ | | +—————-+ | | +—————-+ | | | Guest Driver | | | | Guest Driver | | | | Guest Driver | | | +—————-+ | | +—————-+ | | +—————-+ | +———^———-+ +———-^———+ +———-^———+ | | | +———————————————————————+ |+———————+ +———————+ +———————+| || QEMU | | QEMU | | QEMU || || | | | | || |+———————+ +———————+ +———————+| +———————————————————————+ | | | +————————————————————————————————+ | +—————————————————————-+ | | | VFIO | | | | | | | +————————+ | +————————+ +———————————+| | | | Core Driver vGPU | | | | | || | | | Support | || | | +————————+ | | NVIDIA vGPU Manager | | NVIDIA vGPU VFIO Variant Driver || | | | NVIDIA GPU Core | | | | | || | | | Driver | | +————————+ +———————————+| | | +———^—————+ +—————————————————————-+ | | | | | | | +————————————————————————————————+ | | | | +———-|—————————|————————|———————-|———-+ | v +———-v———+ +————v———+ +————v———+ | | NVIDIA | PCI VF | | PCI VF | | PCI VF | | | Physical GPU | | | | | | | | | (Virtual GPU) | | (Virtual GPU) | | (Virtual GPU) | | | +———————+ +———————+ +———————+ | +————————————————————————————————+
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ Π² ΡΠΎΡΡΠ°Π² Mesa Vulkan-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° gfxstream (Graphics Streaming Kit), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ API Vulkan ΠΈΠ· Π³ΠΎΡΡΠ΅Π²ΡΡ
ΡΠΈΡΡΠ΅ΠΌ Π½Π° Π±Π°Π·Π΅ Linux, Android ΠΈ Fuchsia. ΠΡΠ½ΠΎΠ²ΠΎΠΉ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎΠΈΠΌΡΠ½Π½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠ΄Π° (Graphics Streaming Kit), ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ API ΠΏΡΠΈ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ API Vulkan. ΠΡΠ°ΠΉΠ²Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΌΡΠ»ΡΡΠΎΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Android, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ Android-ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ Cuttlefish, ΡΠ΅ΡΠ²ΠΈΡΠ΅ Google Play Games ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Fuchsia. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° gfxstream ΡΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΠΎΡΡΠ°Π² QEMU ΠΈ crosvm. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ virtio-gpu ΠΈ goldish.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru