العودة
virtio-nvgpu يمنح ضيوف KVM وصولاً شبه أصلي إلى GPU من NVIDIA
SiTech AI Team3 წთ. საკითხავი

virtio-nvgpu يمنح ضيوف KVM وصولاً شبه أصلي إلى GPU من NVIDIA

نشر فريق Nestri جهاز virtio-nvgpu التجريبي، وهو يعيد توجيه استدعاءات ioctl لسائق NVIDIA عند مستوى ABI. وفي قياسات RTX 3060 يبقى الضيف ضمن 2% من الأداء دون افتراض للإطارات الأثقل من 2 م.ث.

نشر فريق Nestri، المطوّر لحزمة nesbox مفتوحة المصدر للألعاب السحابية، جهاز virtio-nvgpu التجريبي. يمنح هذا الجهاز ضيف Linux تحت KVM وصولاً شبه أصلي إلى بطاقة رسوميات من NVIDIA. فبدل ترجمة نداءات واجهة الرسوميات البرمجية، يمرّر المكوّن استدعاءات ioctl الخاصة بسائق نواة NVIDIA بين الضيف والمضيف عند مستوى driver ABI، فيعمل في الضيف سائق NVIDIA الأصلي للوضع المستخدم دون تعديل، وتخاطب المكتبات نفسها من Vulkan وNVENC البطاقة نفسها.

هدف المشروع هو البث بلا شاشة: مركّب النوافذ داخل الآلة الافتراضية يرسم الإطارات ويركّبها ويشفّرها على GPU، ولا يخرج سوى الفيديو المضغوط. لا توجد شاشة في الآلة الافتراضية، وتبقى البطاقة لدى المضيف.

تمرير السائق، لا الواجهة البرمجية

تسجّل وحدة النواة في الضيف الملفات /dev/nvidiactl و/dev/nvidia0...N و/dev/nvidia-uvm. يُرسل كل استدعاء ioctl إلى طابور virtqueue، فيترجمه مكوّن في VMM يعرف الـ ABI وينفّذه على ملفات أجهزة المضيف، بينما تربط نداءات mmap نافذة ذاكرة مشتركة. ويُبلغ طابور ثانٍ يعمل في الاتجاه المعاكس الضيفَ بجهوزية GPU، وهو ما يسمح له بالنوم بدل الانتظار في حلقة استعلام.

ولأن سائق الوضع المستخدم في الضيف يبني مخازن أوامر GPU محلياً، فإن نداءات الرسم الفردية لا تعبر الحدود إطلاقاً. وبحسب إحصاء المشروع نفسه، رسم الضيف في جولة كاملة 813,691 إطاراً بينما خدمت الواجهة الخلفية 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%. أما الإطارات الخفيفة جداً فتخسر أكثر (7.1% عند 0.5 م.ث)، لأن الاستيقاظ يكلّف نحو 0.02 م.ث مهما صغر الإطار.

كلفة المعالج مماثلة لما دون افتراض: 0.37 ثانية مقابل 0.40 خلال 12 ثانية من التصيير دون تحديد معدل وبسرعة نحو 100 إطار في الثانية. ويتقاسم أربعة ضيوف البطاقة نفسها بالتساوي: 103.7 إطاراً في الثانية معاً مقابل 102.9 لضيف واحد، ويشفّر الأربعة H.264 في الوقت نفسه بمعدل 60 هرتز ثابت.

ما لا يتوفر بعد

يصف المؤلفون سطح الأمان بوضوح: لا حدّ IOMMU بين عمل GPU في الضيف والمضيف، وتبقى البطاقة في نطاق سائق المضيف، لذلك يُعدّ سائق NVIDIA على المضيف جزءاً من قاعدة الحوسبة الموثوقة. وتُرفض استدعاءات ioctl غير الموصوفة في ملف ABI بدل تمريرها، ويسمّيها الدليل تقليصاً لسطح الهجوم لا عزلاً عتادياً. ولمستأجرين لا يثق بعضهم ببعض يبقى VFIO أو vGPU الحل الأقوى.

المساعد المعزول isolate لكل ضيف مصمّم فقط ولم يُكتب بعد؛ و CUDA يُمرَّر لكنه مُختبَر حتى تعداد الأجهزة فقط؛ و MIG و SR-IOV خارج النطاق. دعم السائقين صريح بثلاثة ملفات ABI هي 535.129.03 و580.178.04 و595.71.05، وتُرفض الإصدارات الأقدم. يتبع هيكل المستودع nvproxy من gVisor وchromeos/virtio-media.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.