NVIDIA ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΊΠΎΠ΄ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ vGPU Π½Π° Π±Π°Π·Π΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Nouveau

Компания 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