virtio-nvgpu ပရောဂျက်သည် KVM hypervisor အောက်တွင် လည်ပတ်နေသော guest system များမှ NVIDIA GPU များကို စွမ်းဆောင်ရည်သက်ရောက်မှု အနည်းဆုံးဖြင့် ဝင်ရောက်အသုံးပြုနိုင်စေမည့် virtio device တစ်ခုကို တီထွင်ထုတ်လုပ်သည်။ ၎င်းတွင် guest system တွင် တင်ထားသော kernel module တစ်ခုနှင့် host တွင် လည်ပတ်နေသော virtio device တစ်ခု ပါဝင်သည်။ kernel module code ကို C ဖြင့်ရေးသားထားပြီး GPLv2 အောက်တွင် လိုင်စင်ရထားပြီး virtio device code ကို Rust ဖြင့်ရေးသားထားပြီး Apache 2.0 လိုင်စင်ရထားသည်။
developer များ၏ အဆိုအရ GPU ကို ဝင်ရောက်အသုံးပြုသည့်အခါ စွမ်းဆောင်ရည်ဆုံးရှုံးမှုသည် ၂% ထက် မပိုပါ။ ioctl call များကို native NVIDIA driver သို့ ပြန်ညွှန်းပြီး API level တွင် request များကို translate မလုပ်ဘဲ NVIDIA driver ABI level တွင် လုပ်ဆောင်ခြင်းဖြင့် မြင့်မားသောစွမ်းဆောင်ရည်ကို ရရှိသည်။ guest ဘက်တွင် native libraries များနှင့် user space တွင် run နေသော high-level NVIDIA drivers များကို အသုံးပြုသည်။
guest system မှာ kernel module တစ်ခုကို load လုပ်ထားပါတယ်။ ၎င်းသည် /dev/nvidiactl, /dev/nvidia0…N, နှင့် /dev/nvidia-uvm device files များကို ပံ့ပိုးပေးပြီး virtqueue မှတစ်ဆင့် ioctl() နှင့် mmap() calls များကို host environment ရှိ handler သို့ routes လုပ်ကာ NVIDIA host driver သို့ ပေးပို့ပါတယ်။ host system နှင့် virtual machine အကြား context switches များကို ရှောင်ရှားရန် command buffers များကို host environment နှင့် GPU မှ access လုပ်နိုင်သော shared memory ထဲသို့ map (mmapped) လုပ်ပါတယ်။
သီးသန့် GPU access passthrough (VFIO Passthrough) နှင့်မတူဘဲ၊ virtio-nvgpu ပရောဂျက်သည် GPU တစ်ခုသို့ shared access ကို အများအပြားမှ ပေးသည်။ virtual စက်များvirtio-gpu (Venus, VirGL) နဲ့မတူဘဲ၊ Vulkan နဲ့ OpenGL graphics API translation level မှာမဟုတ်ဘဲ NVIDIA driver ကို ABI passthrough ကနေတစ်ဆင့် အလုပ်လုပ်ပါတယ်။ virtio-nvgpu ရဲ့ အားနည်းချက်တွေကတော့ full IOMMU-based isolation မရှိခြင်း (guest system တွေက NVIDIA host driver ကနေတစ်ဆင့် လုပ်ဆောင်ပြီး filtering ioctl calls တွေကိုပဲ ကန့်သတ်ထားပါတယ်) နဲ့ NVIDIA driver ABI ကို မှီခိုအားထားရခြင်း (ABI က version တစ်ခုချင်းစီနဲ့ ပြောင်းလဲပြီး virtio-nvgpu ကို လိုက်လျောညီထွေဖြစ်အောင် လုပ်ဆောင်ဖို့ လိုအပ်ပါတယ်) တို့ပဲ ဖြစ်ပါတယ်။
virtio-nvgpu ရဲ့ စွမ်းဆောင်ရည်တွေက Vulkan၊ OpenGL၊ NVENC နဲ့ CUDA API တွေကို အသုံးပြုပြီး rendering၊ video encoding နဲ့ computing တွေအတွက် လုံလောက်ပါတယ်။ ကိုးကားထားတဲ့ အဓိက application ကတော့ ဂိမ်း ဒါမှမဟုတ် graphics application တစ်ခု run တဲ့ cloud gaming service တွေ ဒါမှမဟုတ် virtual desktop တွေ ဖန်တီးခြင်းပါ။ virtual machine၊ NVENC ကို အသုံးပြု၍ ရလဒ်၏ rendering၊ hardware encoding နှင့် compressed video stream ပုံစံဖြင့် remote user ထံ output ပို့လွှတ်ခြင်းတို့ကို လုပ်ဆောင်သည်။
source: opennet.ru
