חזרה
virtio-nvgpu מעניק לאורח של KVM גישה כמעט מקורית ל-GPU של NVIDIA
SiTech AI Team3 წთ. საკითხავი

virtio-nvgpu מעניק לאורח של KVM גישה כמעט מקורית ל-GPU של NVIDIA

צוות Nestri פרסם את virtio-nvgpu, התקן virtio ניסיוני שמעביר ioctl של מנהל ההתקן של NVIDIA ברמת ה-ABI. כך אורח KVM מגיע לכמעט 2% מביצועי חומרה ישירה, כולל קידוד NVENC בתוך המכונה.

צוות Nestri, שעומד מאחורי nesbox, סטק הקוד הפתוח למשחקי ענן, פרסם את virtio-nvgpu, התקן virtio ניסיוני שמעניק ללקוח Linux תחת KVM גישה כמעט מקורית לכרטיס NVIDIA. במקום לתרגם קריאות של API גרפי, המודול מעביר ioctl של מנהל ההתקן של NVIDIA בין האורח למארח ברמת ה-driver ABI, וכך האורח מריץ את מנהלי ההתקן המקוריים של NVIDIA ללא שינוי: אותן ספריות Vulkan ו-NVENC מדברות עם אותו כרטיס.

ייעוד המערכת הוא סטרימינג ללא מסך (headless): מנהל חלונות בתוך המכונה הווירטואלית מצייר, מרכיב ומקודד פריימים על ה-GPU, ורק וידאו דחוס יוצא החוצה. אין מסך פיזי, והכרטיס נשאר בידי המארח.

להעביר את מנהל ההתקן, לא את ה-API

מודול ליבה באורח רושם את /dev/nvidiactl, /dev/nvidia0...N ואת /dev/nvidia-uvm. כל ioctl נכתב לתור virtqueue, רכיב ב-VMM שמכיר את ה-ABI מתרגם אותו ומוציא אותו אל קבצי ההתקן של המארח, וקריאות mmap ממפות חלון זיכרון משותף. תור שני בכיוון ההפוך מודיע לאורח מתי ה-GPU מוכן, וזה מה שמאפשר לו לישון במקום להסתובב בלולאת המתנה.

מכיוון שמנהל ההתקן במצב משתמש באורח בונה את חוצצי הפקודות של ה-GPU מקומית, קריאות draw בודדות כלל לא חוצות את גבול הווירטואליזציה. לפי הספירה של הפרויקט עצמו, בהרצה מלאה אחת האורח צייר 813,691 פריימים והבקנד שירת 13,792 הודעות: חציה אחת לכל 59 פריימים.

המספרים

המדידות נעשו על RTX 3060 עם מנהל התקן 595.99.02, מארח Ubuntu 26.04 על Ryzen 7 9850X3D, ומולו אורח עם 2 vCPU ו-Linux 7.2. בפריימים כבדים מכשני מילישניות ההפרש מול אותה מכונה בלי וירטואליזציה נשאר בתוך 2%: פריים של 39 מ״ש יצא באורח מהיר ב-0.4%, ופריים של 2 מ״ש איטי ב-1.7%. פריימים קלים מאוד נפגעים יותר (7.1% ב-0.5 מ״ש), כי יקיצה עולה כ-0.02 מ״ש ולא משנה כמה קטן הפריים.

צריכת ה-CPU זהה לזו של חומרה ישירה: 0.37 שניות מול 0.40 לאותן 12 שניות של רינדור ללא תזמון בקצב של כ-100 פריימים בשנייה. ארבעה אורחים חולקים כרטיס אחד באופן שווה: יחד 103.7 פריימים בשנייה מול 102.9 לאורח בודד, וארבעתם מקודדים H.264 במקביל בקצב יציב של 60 הרץ.

מה שעדיין אין

המחברים מפרטים בגלוי את משטח האבטחה: אין גבול IOMMU בין עבודת ה-GPU של האורח למארח, והכרטיס נשאר בתחום של מנהל ההתקן במארח, ולכן מנהל ההתקן של NVIDIA במארח נכלל בבסיס המחשוב המהימן. ioctl שאינם מוגדרים בפרופיל ה-ABI נדחים ולא מועברים; ה-README מכנה זאת צמצום משטח תקיפה ולא בידוד חומרה. עבור דיירים שאינם סומכים זה על זה, VFIO או vGPU נשארים הפתרון החזק יותר.

העוזר המבודד isolate, עבור כל תהליך אורח, קיים כתכנון בלבד; CUDA מועבר אך נבדק רק עד שלב ספירת ההתקנים; MIG ו-SR-IOV מחוץ לתחום. התמיכה במנהלי התקן מפורשת, עם שלושה פרופילי ABI ‏(535.129.03, 580.178.04 ו-595.71.05), וגרסאות ישנות יותר נדחות. המבנה עוקב אחרי nvproxy של gVisor ו-chromeos/virtio-media.

SSiTech

SiTech — פיתוח אתרים בכוח ה-AI

אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.