اگر از ماشین مجازی ویندوز روی لینوکس استفاده می‌کنید و برای نمایش تصویر آن به روش‌هایی مانند SPICE یا یک مانیتور و دانگل HDMI متکی هستید، Looking Glass می‌تواند تجربه متفاوتی ارائه دهد. این پروژه متن‌باز فریم‌های تولیدشده توسط سیستم‌عامل مهمان را از طریق حافظه اشتراکی با تأخیر بسیار کم به کلاینت لینوکس منتقل می‌کند و امکان نمایش ویندوز را در یک پنجره معمولی روی دسکتاپ لینوکس فراهم می‌سازد.

در نسخه‌های جدیدتر پروژه، توسعه Windows IDD نیز به سمت ایجاد یک نمایشگر مجازی برای ماشین مجازی رفته است. این روش می‌تواند نیاز به مانیتور فیزیکی یا دانگل HDMI را برطرف کند. با این حال نباید آن را با حذف نیاز به GPU مناسب برای GPU Passthrough اشتباه گرفت؛ IDD عمدتاً مشکل خروجی نمایشگر را حل می‌کند.

Looking Glass چیست و چه کاربردی در ماشین مجازی دارد؟

نمایش ویندوز در یک پنجره لینوکس با تأخیر بسیار کم

Looking Glass یک نرم‌افزار متن‌باز برای ماشین‌های مجازی مبتنی بر KVM و GPU Passthrough است. برنامه به جای اینکه تصویر ویندوز را مانند یک دسکتاپ راه دور از طریق شبکه منتقل کند، فریم‌های تولیدشده در ماشین مجازی را از طریق حافظه اشتراکی به سیستم میزبان منتقل می‌کند. به همین دلیل برای استفاده تعاملی و حتی کاربردهای گرافیکی گزینه‌ای متفاوت از Remote Desktop یا VNC محسوب می‌شود.

در معماری معمول Looking Glass یک برنامه Host داخل ویندوز مهمان اجرا می‌شود و Looking Glass Client روی لینوکس قرار دارد. داده تصویری از ماشین مجازی به کلاینت منتقل می‌شود و کاربر می‌تواند ویندوز را مانند یک پنجره عادی در دسکتاپ لینوکس کنترل کند. پشتیبانی از صدا و همگام‌سازی Clipboard نیز در نسخه‌های جدید پروژه وجود دارد.

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

چرا Looking Glass از SPICE روان‌تر است؟

SPICE همچنان برای مدیریت ماشین مجازی و دسترسی اولیه بسیار مفید است اما Looking Glass برای نمایش سریع فریم‌های GPU طراحی شده است. استفاده از حافظه اشتراکی و KVMFR باعث می‌شود مسیر انتقال تصویر بسیار سریع باشد و بار پردازش غیرضروری کاهش پیدا کند. در مستندات فعلی Looking Glass نیز استفاده از KVMFR برای انتقال سریع فریم‌ها توصیه شده است.

در نسخه‌های جدیدتر همچنین رابط Capture مبتنی بر DirectX 12 می‌تواند از کپی مستقیم‌تر فریم‌ها به حافظه اشتراکی استفاده کند. پروژه اعلام کرده که این روش می‌تواند انتقال فریم را به موتور کپی سخت‌افزاری GPU بسپارد و از یک کپی اضافی جلوگیری کند.

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

نمایشگر مجازی IDD در Looking Glass چه تغییری ایجاد می‌کند؟

حذف نیاز به مانیتور یا دانگل HDMI در ماشین مجازی

یکی از محدودیت‌های روش سنتی Looking Glass این بود که GPU اختصاص‌یافته به ماشین مجازی معمولاً باید یک نمایشگر متصل داشته باشد. این نمایشگر می‌توانست یک مانیتور واقعی یا دانگل Dummy HDMI یا DisplayPort باشد. مستندات B7 نیز برای پیکربندی معمول همین نیاز را ذکر می‌کنند.

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

فناوری IDD یا Indirect Display Driver رویکرد متفاوتی دارد. درایور نمایشگر غیرمستقیم ویندوز می‌تواند نمایشگری مجازی ایجاد کند که به خروجی فیزیکی معمول GPU متصل نیست. خود مایکروسافت نیز IDD را برای سناریوهایی مانند نمایشگرهای مجازی و انتقال تصویر از راه دور تعریف کرده است.

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

نسخه IDD برای چه کسانی مناسب است؟

در صفحه دانلود رسمی Looking Glass در حال حاضر نسخه‌های آزمایشی خودکار برای IDD ارائه می‌شوند. این نسخه‌ها برای آزمایش قابلیت‌های جدید هستند و خود پروژه هشدار می‌دهد که نسخه‌های Bleeding Edge مانند نسخه‌های پایدار آزمایش و تأیید نشده‌اند. در فهرست فعلی دانلودها نیز Windows IDD Driver در کنار Windows Host Application ارائه شده است.

بنابراین IDD بیشتر برای کاربری مناسب است که یک ماشین مجازی Windows با GPU Passthrough دارد اما نمی‌خواهد برای آن نمایشگر فیزیکی یا دانگل HDMI تهیه کند. این فناوری به تنهایی جای GPU Passthrough را نمی‌گیرد و نباید انتظار داشت یک ماشین مجازی معمولی با کارت گرافیک مجازی ساده ناگهان عملکرد یک سیستم مجهز به GPU Passthrough را پیدا کند.

نصب و راه‌اندازی Looking Glass در ماشین مجازی ویندوز

اجزای اصلی مورد نیاز در لینوکس و ویندوز

در یک پیکربندی معمول باید Looking Glass Client روی لینوکس نصب شود و Looking Glass Host داخل ماشین مجازی ویندوز اجرا شود. برای انتقال سریع فریم‌ها نیز KVMFR به عنوان رابط حافظه اشتراکی بین QEMU و Looking Glass استفاده می‌شود. مستندات رسمی KVMFR را روش پیشنهادی برای IVSHMEM معرفی می‌کنند.

در سمت ویندوز نیز نصب Host Application و درایور IVSHMEM لازم است. از نسخه B6 به بعد نصب‌کننده رسمی Looking Glass درایور IVSHMEM را نیز در اختیار دارد و نصب Host از طریق فایل نصب ویندوز انجام می‌شود.

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

نصب KVMFR و تنظیم حافظه اشتراکی

KVMFR یک ماژول کرنل لینوکس است که یک رابط حافظه اشتراکی سریع برای Looking Glass ایجاد می‌کند. اندازه این حافظه باید با وضوح تصویر ماشین مجازی متناسب باشد. مستندات و راهنماهای مرتبط برای وضوح‌های بالاتر مقدار بیشتری از حافظه اشتراکی را پیشنهاد می‌کنند.

در سیستم‌های مبتنی بر Debian یا Ubuntu می‌توان ابتدا هدر کرنل متناظر با نسخه فعلی را نصب کرد و سپس ماژول KVMFR را از طریق DKMS ساخت. جزئیات دقیق به توزیع لینوکس و نسخه کرنل بستگی دارد.

sudo dkms install . sudo modprobe kvmfr static_size_mb=64

برای وضوح 1080p معمولاً ۳۲ مگابایت می‌تواند کافی باشد و برای 1440p مقدار ۶۴ مگابایت گزینه رایجی است. وضوح 4K ممکن است به ۱۲۸ مگابایت یا بیشتر نیاز داشته باشد. اندازه دقیق باید با نیاز ماشین مجازی و تنظیمات IVSHMEM هماهنگ باشد.

استفاده از IDD و تنظیم وضوح نمایشگر مجازی

نصب درایور نمایشگر مجازی داخل ویندوز

نسخه IDD از Looking Glass برای ایجاد نمایشگر مجازی در ویندوز استفاده می‌شود. پس از نصب درایور می‌توان نمایشگر ایجادشده را از بخش تنظیمات Display ویندوز مشاهده کرد و وضوح و نرخ نوسازی موردنظر را انتخاب کرد. مدل عمومی IDD ویندوز نیز برای ایجاد نمایشگرهایی طراحی شده است که به خروجی فیزیکی معمول GPU وابسته نیستند.

در نسخه‌های فعلی منتشرشده برای Looking Glass باید توجه داشته باشید که IDD در کانال توسعه قرار دارد. بنابراین روش نصب و فایل مورد نیاز ممکن است با تغییر نسخه‌های توسعه‌ای تغییر کند. صفحه دانلود رسمی نیز این نسخه‌ها را برای آزمایش قابلیت‌های جدید ارائه می‌کند و استفاده از آنها را با احتیاط توصیه می‌کند.

تنظیم رزولوشن و نرخ نوسازی نمایشگر مجازی

بعد از شناسایی نمایشگر مجازی می‌توان وضوح و نرخ نوسازی را متناسب با نیاز ماشین مجازی تنظیم کرد. یکی از مزیت‌های نمایشگر مجازی این است که محدودیت‌های ناشی از EDID یک مانیتور واقعی را ندارد و درایورهای مجازی می‌توانند مجموعه‌ای از وضوح‌ها و نرخ‌های نوسازی را ارائه کنند. نمونه‌های عمومی IDD حتی از وضوح‌های بسیار بالا و نرخ‌های نوسازی بالا نیز پشتیبانی می‌کنند.

برای استفاده روزمره ویندوز در ماشین مجازی معمولاً 1080p یا 1440p انتخاب‌های منطقی‌تری هستند. انتخاب وضوح بالاتر باعث افزایش حجم داده تصویری و نیاز به حافظه اشتراکی بیشتر می‌شود و در سیستم‌های ضعیف‌تر می‌تواند روی روانی نمایش تأثیر بگذارد.

Settings > System > Display

تنظیمات > سیستم > صفحه نمایش

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

آیا Looking Glass برای اجرای بازی مناسب است؟

تفاوت نمایش روان ویندوز با شتاب‌دهی سه‌بعدی

Looking Glass می‌تواند نمایش ماشین مجازی را بسیار روان کند اما نباید این موضوع را با فراهم کردن شتاب‌دهی سه‌بعدی اشتباه گرفت. برای اجرای بازی‌های سنگین در ماشین مجازی همچنان GPU Passthrough یا یک روش واقعی برای اختصاص منابع GPU به سیستم مهمان مورد نیاز است. Looking Glass در این معماری وظیفه انتقال و نمایش تصویر را بر عهده دارد.

اگر GPU به ماشین مجازی Passthrough شده باشد، Looking Glass می‌تواند تصویر تولیدشده توسط آن GPU را با تأخیر کم روی دسکتاپ لینوکس نمایش دهد. نمونه‌های عملی این معماری برای اجرای بازی‌های ویندوز روی Linux با GPU Passthrough نیز وجود دارد.

Looking Glass در لینوکس؛ اجرای ویندوز مجازی با نمایشگر مجازی و GPU Passthrough

Venus و VirGL چه تفاوتی با GPU Passthrough دارند؟

در سال‌های اخیر تلاش‌هایی برای ارائه شتاب‌دهی سه‌بعدی بهتر در ماشین‌های مجازی ویندوز با استفاده از روش‌هایی مانند VirGL و Venus انجام شده است. با این حال این پروژه‌ها و درایورها همچنان محدودیت‌ها و پیچیدگی‌های خاص خود را دارند و نباید آنها را به عنوان جایگزین مستقیم GPU Passthrough در همه کاربردها در نظر گرفت.

در مقابل GPU Passthrough یک کارت گرافیک واقعی را مستقیماً در اختیار ماشین مجازی قرار می‌دهد. این روش برای کاربردهای سنگین سه‌بعدی همچنان معماری متفاوتی با یک نمایشگر مجازی یا یک درایور گرافیکی مجازی دارد. Looking Glass نیز معمولاً در کنار چنین معماری‌ای استفاده می‌شود تا خروجی GPU مهمان را با تأخیر کم روی سیستم میزبان نمایش دهد.

محدودیت‌های Looking Glass و IDD

IDD هنوز با نسخه پایدار یکسان نیست

اگر هدف شما یک سیستم کاملاً پایدار برای استفاده روزمره است باید بین نسخه پایدار Looking Glass و نسخه‌های توسعه‌ای IDD تفاوت قائل شوید. صفحه رسمی دانلود Looking Glass نسخه پایدار را برای استفاده معمول پیشنهاد می‌کند و نسخه‌های Bleeding Edge را برای کسانی در نظر گرفته که به قابلیت‌های جدیدتر نیاز دارند و می‌توانند مشکلات احتمالی را مدیریت کنند.

در نتیجه اگر در حال ساخت یک ماشین مجازی کاری هستید بهتر است ابتدا معماری پایدار Looking Glass را راه‌اندازی کنید. سپس در صورت نیاز می‌توانید IDD را آزمایش کنید تا وابستگی به نمایشگر فیزیکی یا دانگل HDMI حذف شود.

سخت‌افزار مناسب برای تجربه روان اهمیت زیادی دارد

Looking Glass برای تأخیر پایین طراحی شده است اما عملکرد آن فقط به نرم‌افزار وابسته نیست. مستندات پروژه برای تجربه مناسب پردازنده‌ای با حداقل ۶ هسته و ۱۲ رشته را پیشنهاد می‌کنند و در پیکربندی پیشنهادی نیز پردازنده ۸ هسته‌ای و ۱۶ رشته‌ای یا بهتر ذکر شده است. پهنای باند PCIe و توانایی GPU نیز روی نتیجه نهایی تأثیر دارند.

اگر از iGPU برای سمت میزبان استفاده می‌کنید نیز پهنای باند حافظه سیستم می‌تواند سقفی برای وضوح و نرخ نوسازی ایجاد کند. بنابراین برای نمایش 4K با نرخ نوسازی بالا باید منابع سخت‌افزاری و اندازه حافظه اشتراکی را متناسب با نیاز انتخاب کنید.

جمع‌بندی؛ Looking Glass برای چه نوع ماشین مجازی مناسب است؟

Looking Glass یکی از راهکارهای شناخته‌شده برای نمایش ماشین مجازی ویندوز روی لینوکس با تأخیر بسیار کم است. معماری آن بر پایه KVM و حافظه اشتراکی شکل گرفته و KVMFR نیز برای انتقال سریع فریم‌ها مورد استفاده قرار می‌گیرد.

قابلیت IDD مسیر متفاوتی را برای خروجی تصویر فراهم می‌کند و در نسخه‌های توسعه‌ای فعلی می‌تواند نیاز به مانیتور فیزیکی یا Dummy Plug را کاهش دهد. با این حال GPU Passthrough همچنان موضوعی جداگانه است و IDD به تنهایی شتاب‌دهی سه‌بعدی یک GPU واقعی را به ماشین مجازی اضافه نمی‌کند.

برای استفاده معمول از ویندوز در ماشین مجازی می‌توان Looking Glass را همراه با KVMFR و یک نمایشگر مجازی آزمایش کرد. برای بازی و برنامه‌های سه‌بعدی سنگین نیز بهتر است ابتدا GPU Passthrough را به شکل صحیح راه‌اندازی کنید و سپس Looking Glass را به عنوان مسیر نمایش کم‌تأخیر به کار ببرید.