مدیر رندرینگ مستقیم

از ویکی‌پدیا، دانشنامهٔ آزاد

در رایانش، مدیر رندرینگ مستقیم (به انگلیسی: Direct Rendering Manager) (مخفف انگلیسی: DRM) یک زیر سیستم از هسته لینوکس است که یک واسط با کارت گرافیک‌های امروزی است. DRM یک API فضای کاربر ایجاد می‌کند تا بتوان اطلاعات و دستورها را به کارت گرافیک ارسال کرد و عملکردهای از جمله پیکربندی تنظیمات صفحه نمایش را انجام داد. DRM اولین توسعه فضای هسته Xسرور بود.[۱] اما پس از آن از پشته گرافیک جایگزینی مانند Wayland استفاده کردند.

برنامه‌های فضای کاربری از APIهای DRM برای فرمان دادن به کارت گرافیک استفاده می‌کنند تا دستورها سخت‌افزاری سه بعدی رندر، کدگشایی ویدئویی و محاسبات GPGPU را انجام دهد.

کاربر برنامه‌های فضایی می‌تواند با استفاده از DRM API به فرمان GPU برای انجام سخت‌افزاری 3D رندر و رمز گشایی ویدئویی و همچنین محاسبات GPGPU.

بررسی اجمالی[ویرایش]

هسته لینوکس قبلاً فقط یک api به نام fbdev داشت؛ که برای مدیریت بافر فریم در یک تبدیل گرافیک استفاده می‌شود. اما برای شتاب دهنده‌های گرافیکی سه بعدی کارت گرافیک‌های جدید نمی‌توانند نیازها را بر طرف کند. این نوع کارت گرافیک‌ها معمولاً نیازمند یک صف مدیریت دستورها در حافظه رم گرافیک هستند تا دستورها را از حافظه به کارت گرافیک اعزام کنند. همچنین به یک مدیریت مناسب نیاز برای بافر و آزاد سازی حافظه اختصاص داده نیازمند است.[۲][۳]

در ابتدا برنامه‌های فضای کاربری خودشان مستقیم منابع را مدیریت می‌کردند اما این برنامه‌ها معمولاً وقتی اجرا می‌شوند که در آن واحد فقط یکی از آنها بخواهد به منابع کارت دسترسی داشته باشد. وقتی دو یا بیشتر برنامه بخواهند در یک زمان یک کارت گرافیک را کنترل کنند. یک فاجعه را منتهی می‌شود.[۳]

وقتی اولین مدیریت مستقیم رندر ساخته شد. هدف این بود که چندین برنامه بتواند از منابع کارت ویدئو استفاده کنند.[۴]

DRM یک دسترسی انحصاری به کارت گرافیک می‌گیرد. همچنین مسئول آغاز و نگهدارندگی دستورها در صف، VRAM و سایر منابع سخت‌افزاری است. می‌شود منحصر به فرد دسترسی به کارت ویدئو و آن را مسئول راه اندازی و حفظ فرماندهی صف VRAM و سایر منابع سخت‌افزاری. برنامه‌هایی که می‌خواهند از کارت گرافیک استفاده کنند درخواست خود را برای DRM ارسال می‌کنند و DRM به عنوان یک داور عمل می‌کند و همچنین از تداخل‌های ممکن جلوگیری می‌کند.

معماری نرم‌افزار[ویرایش]

روند استفاده مستقیم رندر مدیر هسته لینوکس برای دسترسی به یک شتاب دهنده ۳ بعدی کارت گرافیک

یک کتابخانه به نام libdrm به منظور تسهیل در رابط فضای کار برنامه‌ها با زیر سیستم DRM ساخته شد. این کتاب‌خانه صرفاً یک لفاف بسته‌بندی است که توابع آن در زبان سی نوشته شده است.[۵] استفاده از کتابخانه libdrm یک رابط مستقیم با کاربر، استفاده مجدد، اشتراک گذاری کد بین برنامه‌ای را سبب می‌شود.

جزئیات معماری مدیریت مستقیم رندر

DRM شامل دو بخش است: هسته عمومی DRM و درایور اختصاصی DRM[۶]

هسته DRM یک فریم ورک پایه را فراهم می‌کند که درایوهای DRMهای مختلف می‌توانند ثبت شوند و همچنین یک فضای کاربر از حداقل مجموعه رایج ioctls را فراهم می‌کند. DRM هسته‌ای را فراهم می‌کند چارچوب اساسی که در.[۷] یک درایور DRM به عبارت دیگر بخشی از api وابستگی سخت‌افزار را پیاده‌سازی می‌کند.

منابع[ویرایش]

  1. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام drmbook-init وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  2. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام drmbook-mm وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  3. ۳٫۰ ۳٫۱ خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام drmbook-kms وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  4. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام drmbook-modesetting وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  5. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام drmbook-rendernodes وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  6. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام DRM readme وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  7. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام libdrm README وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).

[۱][۲][۳][۴][۵][۶][۷][۸][۹][۱۰] [۱۱][۱۲][۱۳][۱۴][۱۵][۱۶][۱۷][۱۸][۱۹][۲۰][۲۱][۲۲][۲۳][۲۴][۲۵][۲۶][۲۷]

  1. Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Driver Initialization". Retrieved 31 August 2016.
  2. Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Memory management". Retrieved 31 August 2016.
  3. Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - KMS Initialization and Cleanup". Retrieved 31 August 2016.
  4. Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Dumb Buffer Objects". Retrieved 31 August 2016.
  5. Barnes, Jesse; Pinchart, Laurent; Vetter, Daniel; Wunner, Lukas. "Linux GPU Driver Developer's Guide - Render nodes". Retrieved 31 August 2016.
  6. "Linux kernel/drivers/gpu/drm/README.drm". kernel.org. Archived from the original on 26 February 2014. Retrieved 2014-02-26.
  7. "libdrm README". Archived from the original on 26 July 2014. Retrieved 23 July 2014.
  8. Uytterhoeven, Geert. "The Frame Buffer Device". Kernel.org. Retrieved 28 January 2015.
  9. "drm-kms man page". Ubuntu manuals. Retrieved 19 November 2015.
  10. "drm-memory man page". Ubuntu manuals. Retrieved 29 January 2015. Many modern high-end GPUs come with their own memory managers. They even include several different caches that need to be synchronized during access. [...]. Therefore, memory management on GPUs is highly driver- and hardware-dependent.
  11. Airlie, Dave (12 March 2010). "GPU offloading - PRIME - proof of concept". Retrieved 10 February 2015.
  12. Clark, Rob; Semwal, Sumit. "DMA Buffer Sharing Framework: An Introduction" (PDF). Retrieved 14 May 2016.
  13. Corbet, Jonathan (20 July 2004). "Kernel Summit: Video Drivers". LWN.net. Retrieved 23 November 2015.
  14. Corbet, Jonathan (22 January 2007). "LCA: Updates on the X Window System". LWN.net. Retrieved 23 November 2015.
  15. Corbet, Jonathan (6 November 2007). "Memory management for graphics processors". LWN.net. Retrieved 23 July 2014.
  16. Corbet, Jonathan (28 May 2008). "GEM v. TTM". LWN.net. Retrieved 10 February 2015.
  17. Corbet, Jonathan (13 January 2010). "The end of user-space mode setting?". LWN.net. Retrieved 20 November 2015.
  18. Corbet, Jonathan (11 January 2012). "DMA buffer sharing in 3.3". LWN.net. Retrieved 14 May 2016.
  19. Corbet, Jonathan (11 September 2013). "3.12 merge window, part 2". LWN.net. Retrieved 21 July 2014.
  20. Corbet, Jonathan (13 August 2014). "3.17 merge window, part 2". LWN.net. Retrieved 7 October 2014.
  21. Corbet, Jonathan (17 December 2014). "3.19 Merge window part 2". LWN.net. Retrieved 9 February 2015.
  22. Corbet, Jonathan (1 July 2015). "4.2 Merge window part 2". LWN.net. Retrieved 31 August 2015.
  23. Corbet, Jonathan (11 November 2015). "4.4 Merge window, part 1". LWN.net. Retrieved 11 January 2016.
  24. Corbet, Jonathan (20 January 2016). "4.5 merge window part 2". LWN.Net. Retrieved 14 March 2016.
  25. "DrmModesetting - Enhancing kernel graphics". DRI Wiki. Retrieved 23 November 2015.
  26. Høgsberg, Kristian (4 September 2008). "The DRI2 Extension - Version 2.0". X.Org. Retrieved 23 May 2016.
  27. Deucher, Alex (15 April 2010). "Notes about radeon display hardware". Archived from the original on 5 April 2016. Retrieved 8 April 2016.