Վերադառնալ
virtio-nvgpu-ը KVM հյուրերին տալիս է NVIDIA GPU-ի գրեթե բնական հասանելիություն
SiTech AI Team2 წთ. საკითხავი

virtio-nvgpu-ը KVM հյուրերին տալիս է NVIDIA GPU-ի գրեթե բնական հասանելիություն

Nestri թիմը հրապարակել է փորձարարական virtio-nvgpu սարքը։ Այն NVIDIA դրայվերի ioctl-ները փոխանցում է ABI մակարդակում, և KVM հյուրը GPU-ն օգտագործում է գրեթե առանց վիրտուալացման, ներառյալ NVENC կոդավորումը։

Nestri թիմը, որը մշակում է բաց կոդով ամպային խաղերի nesbox փաթեթը, հրապարակել է փորձարարական virtio-nvgpu սարքը, որ KVM-ի տակ աշխատող Linux հյուրին տալիս է NVIDIA վիդեոքարտին գրեթե բնական հասանելիություն։ Գրաֆիկական API-ի կանչերը թարգմանելու փոխարեն մոդուլը NVIDIA-ի դրայվերի ioctl-ները հյուրի և հոսթի միջև փոխանցում է driver ABI մակարդակում, ուստի հյուրում NVIDIA-ի սեփական դրայվերներն անփոփոխ են աշխատում, և նույն Vulkan-ն ու NVENC-ը խոսում են նույն քարտի հետ։

Ծրագրի նպատակը headless սթրիմինգն է։ քարտը մնում է հոսթին, իսկ վիրտուալ մեքենայում կոմպոզիտորը կադրերը նկարում, հավաքում և կոդավորում է GPU-ի վրա, ու դուրս է գալիս միայն սեղմված վիդեոն։

Փոխանցել դրայվերը, ոչ թե API-ն

Հյուրի միջուկային մոդուլը գրանցում է /dev/nvidiactl, /dev/nvidia0...N և /dev/nvidia-uvm սարքերը։ Յուրաքանչյուր ioctl հերթագրվում է virtqueue-ում, VMM-ի ABI-ին ծանոթ բաղադրիչը այն թարգմանում և կատարում է հոսթի սարքային ֆայլերի դեմ, իսկ mmap կանչերը քարտեզագրում են ընդհանուր հիշողության պատուհանը։ Հակառակ ուղղությամբ երկրորդ հերթը հյուրին հայտնում է, երբ GPU-ն պատրաստ է, ինչը թույլ է տալիս սպասել քնի մեջ, ոչ թե ցիկլով։

Քանի որ հյուրի դրայվերը GPU հրամանների բուֆերները կառուցում է տեղում, առանձին draw call-երը վիրտուալացման սահմանը չեն հատում։ Ծրագրի հաշվարկով մեկ փուլում հյուրը նկարել է 813 691 կադր, իսկ backend-ը՝ 13 792 հաղորդագրություն, մոտ մեկ հատում 59 կադրի դիմաց։

Թվերը

Չափումները կատարվել են RTX 3060-ով, 595.99.02 դրայվերով։ հոսթում՝ Ubuntu 26.04 և Ryzen 7 9850X3D, հյուրում՝ 2 vCPU և Linux 7.2։ Մոտ 2 մվրկ-ից ծանր կադրերում տարբերությունը նույն մեքենայի առանց վիրտուալացման տարբերակի հետ 2%-ի սահմաններում է մնում։ 39 մվրկ կադրը հյուրում 0,4%-ով ավելի արագ էր, իսկ 2 մվրկ-ը՝ 1,7%-ով ավելի դանդաղ։ Շատ թեթև կադրերը ավելի շատ են կորցնում (0,5 մվրկ-ում 7,1%), որովհետև արթնացումը արժե մոտ 0,02 մվրկ։

CPU-ի ծախսը նույնն է՝ առանց վիրտուալացման։ վայրկյանում մոտ 100 կադրով հյուրը 12 վայրկյանում ծախսել է 0,37 վայրկյան, հոսթը՝ 0,40։ Չորս հյուր մեկ քարտը բաժանում են հավասարաչափ։ միասին 103,7 կադր վայրկյանում, իսկ մեկ հյուրը՝ 102,9։ Բոլոր չորսը միաժամանակ H.264 են կոդավորում 60 Hz-ով։

Ինչ դեռ չկա

Հեղինակները բացահայտ նկարագրում են անվտանգության մակերեսը։ հյուրի GPU աշխատանքի և հոսթի միջև IOMMU-ի սահման չկա, քարտը մնում է հոսթի դրայվերի տիրույթում, ուստի NVIDIA դրայվերը վստահելի հաշվարկային բազայի մեջ է։ ABI պրոֆիլում չնկարագրված ioctl-ները մերժվում են, այլ ոչ թե փոխանցվում։ README-ում սա կոչվում է հարձակման մակերեսի կրճատում, ոչ թե ապարատային մեկուսացում։ Իրար չվստահող վարձակալների համար VFIO-ն կամ vGPU-ն ավելի ուժեղ լուծում են մնում։

Յուրաքանչյուր հյուրի համար նախատեսված ավազարկղային isolate օգնականը միայն նախագծված է։ CUDA-ն փոխանցվում է, բայց փորձարկվել է միայն սարքերի թվարկումից առաջ։ MIG-ը և SR-IOV-ը շրջանակից դուրս են։ Աջակցվող դրայվերները երեք ABI պրոֆիլ են (535.129.03, 580.178.04 և 595.71.05), ավելի հին տարբերակները մերժվում են։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։