VirtualGL

VirtualGL ( VGL ) هي حزمة برمجية مفتوحة المصدر تُعيد توجيه أوامر عرض الرسومات ثلاثية الأبعاد من تطبيقات OpenGL في أنظمة Unix و Linux إلى مُسرِّع رسومات ثلاثية الأبعاد في خادم مُخصَّص، ثم تُرسل مُخرَجات العرض إلى عميل ( خفيف ) موجود في مكان آخر على الشبكة. [ 1 ] على جانب الخادم، تتكون VirtualGL من مكتبة تُعنى بإعادة التوجيه، وبرنامج وسيط يُوجِّه التطبيقات لاستخدام هذه المكتبة. يُمكن للعملاء الاتصال بالخادم إما باستخدام اتصال X11 عن بُعد ، أو باستخدام وكيل X11 مثل خادم الحوسبة الشبكية الافتراضية (VNC). في حالة اتصال X11، يلزم وجود برنامج VirtualGL مُثبَّت على جانب العميل لاستقبال مُخرَجات الرسومات بشكل مُنفصل عن دفق X11. أما في حالة اتصال VNC، فلا يلزم وجود أي برنامج مُثبَّت على جانب العميل سوى برنامج عميل VNC نفسه.

مشكلة

يمكن تحسين أداء تطبيقات OpenGL بشكل كبير من خلال معالجة الرسومات باستخدام مُسرّعات الأجهزة المُخصصة الموجودة عادةً في وحدة معالجة الرسومات (GPU) . أصبحت وحدات معالجة الرسومات شائعة الاستخدام لدرجة أن التطبيقات تعتمد عليها لتحقيق أداء مقبول. لكن بيئات VNC وغيرها من بيئات العميل الخفيف لأنظمة Unix وLinux لا تملك إمكانية الوصول إلى هذه الأجهزة على جانب الخادم. لذلك، فهي إما لا تدعم تطبيقات OpenGL على الإطلاق أو تلجأ إلى طرق أبطأ مثل المعالجة على جهاز العميل أو برمجياً على الخادم.

لطالما تطلّب عرض تطبيقات ثلاثية الأبعاد عن بُعد باستخدام تسريع الأجهزة استخدام "العرض غير المباشر". يعتمد العرض غير المباشر على امتداد GLX لنظام X Window ("X11" أو "X") لتغليف أوامر OpenGL داخل دفق بروتوكول X11 وإرسالها من التطبيق إلى شاشة X. في الوضع التقليدي، يعمل التطبيق على خادم تطبيقات بعيد، بينما تعمل شاشة X على سطح مكتب المستخدم. في هذه الحالة، تُنفَّذ جميع أوامر OpenGL بواسطة جهاز المستخدم، لذا يجب أن يمتلك هذا الجهاز مُسرِّع رسومات ثلاثية الأبعاد سريعًا. هذا يُقيِّد أنواع الأجهزة التي يُمكنها عرض تطبيق ثلاثي الأبعاد عن بُعد باستخدام هذه الطريقة.

يمكن أن يكون أداء العرض غير المباشر جيدًا إذا كانت الشبكة سريعة بما يكفي ( مثل إيثرنت جيجابت )، وإذا لم يُعدّل التطبيق هندسة الكائن المعروض ديناميكيًا، وإذا كان التطبيق يستخدم قوائم العرض ، وإذا لم يستخدم التطبيق قدرًا كبيرًا من تعيين النسيج . مع ذلك، لا تستوفي العديد من تطبيقات OpenGL هذه المعايير. ومما يزيد الأمر تعقيدًا، أن بعض امتدادات OpenGL لا تعمل في بيئة العرض غير المباشر. تتطلب بعض هذه الامتدادات القدرة على الوصول المباشر إلى وحدة معالجة الرسومات ثلاثية الأبعاد، وبالتالي لا يمكن تشغيلها بشكل غير مباشر. في حالات أخرى، قد لا توفر شاشة X الخاصة بالمستخدم دعمًا صريحًا لامتداد OpenGL المطلوب، أو قد يعتمد الامتداد على تكوين أجهزة محدد غير موجود في جهاز المستخدم.

يُتيح تنفيذ عملية عرض OpenGL على خادم التطبيقات تجاوز المشكلات الناجمة عن العرض غير المباشر، إذ يمتلك التطبيق الآن مسارًا سريعًا ومباشرًا إلى وحدة معالجة العرض ثلاثي الأبعاد. عند تنفيذ العرض ثلاثي الأبعاد على خادم التطبيقات، لا يلزم إرسال سوى الصور ثنائية الأبعاد الناتجة إلى العميل. يمكن تسليم الصور بنفس معدل الإطارات بغض النظر عن حجم بيانات العرض ثلاثي الأبعاد المستخدمة في إنشائها، لذا فإن تنفيذ العرض ثلاثي الأبعاد على خادم التطبيقات يحوّل فعليًا مشكلة أداء العرض ثلاثي الأبعاد إلى مشكلة أداء العرض ثنائي الأبعاد. يُصبح التحدي حينها كيفية بث بيانات صور بدقة 1-2 ميجابكسل عبر الشبكة بمعدلات إطارات تفاعلية، إلا أن التقنيات الشائعة ( مثل HDTV ) تُعالج هذه المشكلة بالفعل.

حل VirtualGL

تستخدم VirtualGL تقنية "GLX forking" لتنفيذ عمليات عرض OpenGL على خادم التطبيقات. عادةً ما تُرسل تطبيقات OpenGL في أنظمة Unix وLinux أوامر GLX وأوامر X11 العادية إلى شاشة X نفسها. تُستخدم أوامر GLX لربط سياقات عرض OpenGL بنافذة X محددة، والحصول على قائمة بتنسيقات البكسل التي تدعمها شاشة X، وما إلى ذلك. تستفيد VirtualGL من ميزة في أنظمة Unix وLinux تسمح بتحميل مكتبة مسبقًا في التطبيق، ما يؤدي فعليًا إلى اعتراض (أو "إدخال") بعض استدعاءات الدوال التي يُجريها التطبيق عادةً للمكتبات المشتركة المرتبطة به. بمجرد تحميل VirtualGL مسبقًا في تطبيق OpenGL على نظام Unix أو Linux، فإنه يعترض استدعاءات دوال GLX من التطبيق ويعيد كتابتها بحيث تُرسل أوامر GLX المقابلة إلى شاشة X الخاصة بخادم التطبيقات ("خادم X ثلاثي الأبعاد")، والتي يُفترض أنها مزودة بمُسرّع أجهزة ثلاثي الأبعاد. وبالتالي، يمنع VirtualGL إرسال أوامر GLX عبر الشبكة إلى شاشة X الخاصة بالمستخدم أو إلى شاشة X افتراضية ("وكيل X")، مثل VNC، التي لا تدعم GLX. وفي عملية إعادة كتابة استدعاءات GLX، يُعيد VirtualGL أيضًا توجيه عملية عرض OpenGL إلى مخازن مؤقتة للبكسل خارج الشاشة ("Pbuffers"). في الوقت نفسه، يُسمح لبقية استدعاءات الدوال من التطبيق، بما في ذلك أوامر X11 العادية المستخدمة لرسم واجهة المستخدم، بالمرور عبر VirtualGL دون تعديل.

داخليًا، يحتفظ محرك VirtualGL الوسيط بخريطة للنوافذ ومخازن البيانات، ويُطابق السمات المرئية بين شاشة X الوجهة (خادم X ثنائي الأبعاد) وخادم X ثلاثي الأبعاد، ويُنفذ مجموعة متنوعة من وظائف التجزئة الأخرى لضمان سلاسة إعادة توجيه GLX. ولكن في الأساس، بمجرد إنشاء سياق OpenGL على شاشة X الخاصة بخادم التطبيق، يتنحى VirtualGL جانبًا ويسمح لجميع أوامر OpenGL اللاحقة بالمرور دون عوائق إلى جهاز خادم التطبيق ثلاثي الأبعاد. وبالتالي، يمكن للتطبيق استخدام أي ميزات وامتدادات OpenGL التي يوفرها جهاز خادم التطبيق وبرامجه التشغيلية تلقائيًا.

إلى جانب معالجة أوامر GLX وإدارة مخازن Pbuffers، يقوم VirtualGL أيضًا بقراءة وحدات البكسل المُعالجة في الوقت المناسب (عادةً عن طريق المراقبة glXSwapBuffers()) glFinish()، ثم يرسم هذه الوحدات في نافذة X الخاصة بالتطبيق باستخدام أوامر رسم الصور القياسية في X. وبما أن VirtualGL يُعيد توجيه أوامر GLX بعيدًا عن خادم X ثنائي الأبعاد، فإنه يُمكن استخدامه لإضافة دعم ثلاثي الأبعاد مُسرّع لخوادم X الوسيطة (مثل VNC)، وكذلك لمنع حدوث عرض OpenGL غير المباشر عند استخدام شاشة عرض X عن بُعد.

عند استخدام بروتوكول X11 Transport مع وكيل X، تتم عمليات العرض ثلاثي الأبعاد وثنائي الأبعاد على خادم التطبيق. يقوم VirtualGL بإعادة توجيه أوامر العرض ثلاثي الأبعاد من التطبيق إلى معالج الرسوميات ثلاثي الأبعاد، ثم يقرأ الصور المعروضة، ويرسمها كسلسلة من الصور النقطية غير المضغوطة في وكيل X (VNC أو نظام مشابه). في الوقت نفسه، تُرسل أوامر الرسم ثنائي الأبعاد (أوامر X11) من التطبيق مباشرةً إلى وكيل X. ويتولى وكيل X وحده مسؤولية ضغط الصور وإرسالها إلى العملاء البعيدين.

يُتيح استخدام VirtualGL بالتزامن مع VNC أو أي وكيل X آخر تشغيل تطبيقات ثلاثية الأبعاد لعدة مستخدمين في وقت واحد على خادم تطبيقات واحد، كما يُتيح لعدة عملاء مشاركة كل جلسة. مع ذلك، فإن VNC وما شابهه مُصممة للتعامل مع تطبيقات ثنائية الأبعاد ذات مساحات واسعة من الألوان الثابتة، وعدد قليل من الألوان، وفروقات ضئيلة بين الإطارات. في المقابل، تُنتج التطبيقات ثلاثية الأبعاد صورًا ذات أنماط لونية دقيقة ومعقدة، وترابط أقل بكثير بين الإطارات المتتالية. يُشابه عبء العمل الناتج عن رسم الصور المُعالجة من تطبيق OpenGL في نافذة X عبء عمل مشغل الفيديو، وعادةً ما تفتقر برامج العميل الخفيف الجاهزة إلى برامج ترميز صور سريعة بما يكفي للتعامل مع هذا العبء بمعدلات إطارات تفاعلية.

يتغلب VirtualGL على هذه المشكلة بطريقتين:

  1. TurboVNC
  2. شركة VGL للنقل

TurboVNC و TigerVNC

يُعدّ كلٌّ من TurboVNC و TigerVNC فرعين من TightVNC، وهما يُسرّعان عملية ترميز Tight وJPEG، وذلك جزئيًا باستخدام libjpeg-turbo، وهي نسخة مُسرّعة بتقنية SIMD من libjpeg . يوفر كلا المشروعين خوادم VNC بالإضافة إلى تطبيقات العميل.

طُوِّر برنامج TurboVNC من قِبَل نفس فريق VirtualGL. على شبكات إيثرنت بسرعة 100 ميجابت، يُمكنه عرض أكثر من 50 ميجابكسل/ثانية بجودة صورة فائقة الوضوح. يتضمن TurboVNC تحسينات إضافية تُتيح له عرض 10-12 ميجابكسل/ثانية عبر وصلة نطاق عريض بسرعة 5 ميجابت، بجودة صورة أقل بشكل ملحوظ ولكنها مقبولة. كما يُوسِّع TurboVNC نطاق TightVNC ليشمل التخزين المؤقت المزدوج من جانب العميل وميزات أخرى مُخصصة لتطبيقات ثلاثية الأبعاد، مثل إمكانية إرسال نسخة غير مُفقَدة من صورة الشاشة أثناء فترات عدم النشاط. [ 2 ] يستخدم مركز تكساس للحوسبة المتقدمة في جامعة تكساس في أوستن برنامجي TurboVNC وVirtualGL لتمكين مُستخدمي TeraGrid من الوصول عن بُعد إلى إمكانيات العرض ثلاثي الأبعاد لمجموعة Stampede [ 3 ] للتصور.

TigerVNC هو نسخة أحدث من TightVNC، يوفر أداءً مشابهًا لـ TurboVNC في معظم الحالات، ولكنه يختلف عنه في أهداف المشروع وميزاته. [ 4 ] [ 5 ]

شركة VGL للنقل

عند استخدام بروتوكول نقل VGL، تتم عملية عرض الرسومات ثلاثية الأبعاد على خادم التطبيق، بينما تتم عملية عرض الرسومات ثنائية الأبعاد على جهاز العميل. يقوم VirtualGL بضغط الصور المعروضة من تطبيق الرسومات ثلاثية الأبعاد وإرسالها كبث فيديو إلى العميل، الذي يقوم بدوره بفك ضغطها وعرضها في الوقت الفعلي.

عند استخدام بروتوكول نقل VGL، يقوم VirtualGL بضغط الصور ثلاثية الأبعاد المُعالجة باستخدام نفس برنامج ترميز JPEG المُحسّن الذي يستخدمه TurboVNC. ثم يرسل VirtualGL الصور المضغوطة عبر منفذ TCP مُخصص إلى تطبيق عميل VirtualGL يعمل على جهاز العميل. يتولى عميل VirtualGL مسؤولية فك ضغط الصور ورسم وحدات البكسل في نافذة X المناسبة. في الوقت نفسه، تُرسل عناصر العرض غير المُعتمدة على OpenGL عبر الشبكة باستخدام بروتوكول X11 القياسي عن بُعد، ويتم عرضها على جهاز العميل.

يتطلب هذا الأسلوب وجود شاشة عرض X على جهاز المستخدم، والاعتماد على بروتوكول X11 البعيد لتنفيذ عملية العرض ثنائي الأبعاد يعني أن أداء العديد من التطبيقات سيكون ضعيفًا عند استخدام VGL Transport على الشبكات ذات زمن الاستجابة العالي. إضافةً إلى ذلك، لا يدعم VGL Transport التعاون (عدة مستخدمين في الجلسة الواحدة) بشكلٍ أساسي، حيث يتم إرسال الصور إلى أجهزة المستخدمين بدلًا من سحبها. مع ذلك، يوفر استخدام VGL Transport تجربة استخدام سلسة تمامًا، حيث تتوافق كل نافذة تطبيق مع نافذة سطح مكتب واحدة. كما يُقلل VGL Transport من حمل وحدة المعالجة المركزية للخادم، نظرًا لأن عملية العرض ثنائي الأبعاد تتم على جهاز المستخدم، ويتيح VGL Transport استخدام ميزات OpenGL المتقدمة، مثل العرض المجسم رباعي التخزين المؤقت .

يتصور مطورو VirtualGL أن المستخدمين الأساسيين لـ VGL Transport هم مستخدمو أجهزة الكمبيوتر المحمولة المزودة باتصال لاسلكي 802.11g أو اتصال إيثرنت سريع بخادم التطبيق.

منتجات تجارية تستخدم VirtualGL

كان كل من VirtualGL وTurboVNC مكونين أساسيين من منتج Sun Visualization System من شركة Sun Microsystems ، والذي توقف إنتاجه في أبريل 2009. تم دمج هاتين الحزمتين مفتوحتي المصدر مع إضافة مغلقة المصدر تسمح لـ VirtualGL بإرسال صور مضغوطة إلى عملاء Sun Ray الخفيفين، بالإضافة إلى حزمة مغلقة المصدر أخرى تدمج VirtualGL مع Sun Grid Engine ، مما يوفر إدارة الموارد وجدولة مهام ثلاثية الأبعاد عن بُعد. كانت هذه الحزمة المدمجة، والتي أُطلق عليها اسم "Sun Shared Visualization"، متاحة للتنزيل مجانًا. وكانت شركة Sun تتقاضى رسومًا مقابل الدعم الفني.

يدعم الإصدار 4.xx من برنامج NoMachine تقنية VirtualGL لتمكين المستخدمين من تشغيل تطبيقات ثلاثية الأبعاد في جلسات سطح مكتب NoMachine. [ 6 ]

يتضمن الإصدار 2.1 من برنامج Scalable Visualization Array من HP مكونات تتكامل مع VirtualGL و TurboVNC، مما يسمح بجدولة مهام ثلاثية الأبعاد وعرضها عن بُعد من مجموعة التصور. [ 7 ]

تم تصميم الإصدار 3.0.0 من ThinLinc للعمل بالتزامن مع VirtualGL. [ 8 ]

يدعم الإصدار 2010 من برنامج EnginFrame Views تقنية VirtualGL كأحد خيارات البروتوكول البعيد. [ 9 ]

تستخدم منتجات Exceed onDemand و Exceed Freedom من OpenText شفرة من VirtualGL لتنفيذ عملية العرض من جانب الخادم. [ 10 ]

انظر أيضاً

مراجع

الحواشي

  1. "مقدمة موجزة إلى VirtualGL" . VirtualGL.org . تم الاطلاع عليه بتاريخ 20 فبراير 2016 .
  2. "مقدمة موجزة عن TurboVNC" . TurboVNC.org . تم الاطلاع عليه بتاريخ 20 فبراير 2016 .
  3. "دليل مستخدم ستامبيد" . مركز تكساس للحوسبة المتقدمة (TACC). مؤرشف من الأصل في 10 مارس 2016. تم الاطلاع عليه في 29 فبراير 2016 .
  4. "VirtualGL" . ArchLinux.org . تم الاطلاع عليه بتاريخ 25 يونيو 2021 .
  5. "ماذا عن TigerVNC؟" . مشروع VirtualGL . تم الاطلاع عليه بتاريخ 7 أغسطس 2023 .
  6. "تفعيل دعم VirtualGL في NoMachine 4 أو أحدث" . NoMachine.com . تم الاطلاع عليه بتاريخ 20 فبراير 2016 .
  7. "الحوسبة عالية الأداء (HPC)" . Hp.com. مؤرشف من الأصل في 9 أغسطس 2014. تم الاطلاع عليه في 17 فبراير 2015 .
  8. "دليل مسؤول ThinLinc لإصدار ThinLinc 4.5.0" . ThinLinc.com . تم الاطلاع عليه بتاريخ 20 فبراير 2016 .
  9. "التصوير عن بعد" . Nice-software.com. مؤرشف من الأصل في 7 ديسمبر 2010. تم الاطلاع عليه في 17 فبراير 2015 .
  10. "دليل مستخدم Open Text Exceed، الإصدار 14" (ملف PDF) . Kb.berkeley.edu. 12 يونيو 2012. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 15 يونيو 2010. تم الاطلاع عليه بتاريخ 12 يونيو 2012 .

مراجع عامة