تجزیه و تحلیل و بهینه‌سازی عملکرد بازی

این راهنما فرآیند تجزیه و تحلیل و بهینه‌سازی عملکرد بازی در دستگاه‌های اندروید را برای یک تجربه کاربری روان شرح می‌دهد. این راهنما شناسایی گلوگاه‌های عملکرد، تمایز بین مشکلات CPU و GPU و تأیید نتایج بهینه‌سازی را پوشش می‌دهد.

مهم نیست که یک بازی چقدر سرگرم‌کننده یا جذاب باشد، اگر روی دستگاه‌های تلفن همراه به خوبی اجرا نشود، بازیکنان از آن لذت نخواهند برد و به موفقیت چندانی نخواهد رسید. حتی بازی‌های سرگرم‌کننده هم می‌توانند مشکلاتی مانند فریم در ثانیه (FPS) پایین یا داغ شدن بیش از حد دستگاه داشته باشند. این مشکلات بازیکنان را ناراضی می‌کند. بنابراین، بهبود عملکرد بازی ضروری است و باید بدانید که چگونه آن را بهینه کنید.

فرآیند بهینه‌سازی عملکرد شامل مراحل زیر است:

  1. اندازه‌گیری عملکرد کلی بازی. تعیین میزان کاهش عملکرد بر اساس هر صحنه برای شناسایی ناهنجاری‌ها.

  2. بررسی مشکلات CPU و GPU. علت اصلی را مشخص کنید، اینکه آیا مشکل از CPU است یا از GPU.

    ابزارها: Unreal Insight، Unity Profiler، Perfetto و ابزارهای اندازه‌گیری عملکرد.

  3. بهینه‌سازی پردازنده. رفع گلوگاه‌های عملکرد شناسایی‌شده.

    ابزارها: Unreal Insight، Unity Profiler، Perfetto و Simpleperf.

  4. بهینه‌سازی پردازنده گرافیکی. رفع گلوگاه‌های عملکردی شناسایی‌شده.

    ابزارها: RenderDoc، Arm mobile studio، AGI، ابزار مخصوص فروشنده.

  5. تست A/B. برای اعتبارسنجی دقیق اثربخشی بهینه‌سازی‌های اجرا شده، تست A/B انجام دهید.

    ابزارها: Unreal Insight، Unity Profiler، Perfetto و ابزارهای اندازه‌گیری عملکرد، قفل فرکانس CPU یا GPU و RenderDoc.

  6. این فرآیند تکراری (1-5) تا زمانی که FPS و پارامترهای حرارتی هدف با موفقیت حاصل شوند، ادامه می‌یابد.

پیش‌نیازها

تجزیه و تحلیل عملکرد جامع بازی

شما باید عملکرد کلی بازی را بررسی کنید و هرگونه افت عملکرد یا ناهنجاری مبتنی بر صحنه را شناسایی کنید. قبل از بهینه‌سازی بازی، عملکرد فعلی آن را بررسی کنید. از آنجا که بازی‌ها شامل رابط‌های کاربری و صحنه‌های زیادی هستند، صحنه‌هایی را که از CPU یا GPU بالایی استفاده می‌کنند یا طرح‌بندی‌هایی که به طور غیرمنتظره‌ای اجرا می‌شوند، تجزیه و تحلیل کنید تا افت عملکرد و میزان استفاده از CPU یا GPU را در هر صحنه رصد کنید.

  1. سنجش میزان افت عملکرد: از ابزارهای اندازه‌گیری عملکرد برای اندازه‌گیری عملکرد کلی بازی استفاده کنید. عملکرد را بر اساس هر صحنه اندازه‌گیری کنید تا نواحی خاصی که دچار افت یا ناهنجاری شده‌اند را شناسایی کنید.
  2. شناسایی صحنه‌های مشکل‌ساز: داده‌ها را تجزیه و تحلیل کنید تا صحنه‌هایی با مصرف بالای CPU یا GPU یا صحنه‌هایی که طرح‌بندی صفحه نمایش در آنها عملکرد مورد انتظار را ارائه نمی‌دهد، پیدا کنید.
  3. جمع‌آوری داده‌های ردیابی: از ابزارهای ردیابی برای جمع‌آوری داده‌های عملکرد دقیق برای صحنه‌های مشکل‌ساز شناسایی‌شده استفاده کنید.

شناسایی گلوگاه‌های CPU یا GPU

اگر بازی به FPS هدف خود نمی‌رسد، مشخص کنید که آیا به CPU محدود است یا به GPU محدود. تجزیه و تحلیل رفتار CPU و GPU برای یافتن فرصت‌های بهینه‌سازی بسیار مهم است، حتی زمانی که دستگاه داغ می‌شود یا در طول گیم‌پلی بیش از حد از برق استفاده می‌کند. می‌توانید از روش‌های مختلفی برای فهمیدن اینکه سیستم به CPU محدود است یا به GPU محدود، استفاده کنید.

  1. تجزیه و تحلیل داده‌های ردیابی: از ابزار مورد نظر خود برای تجزیه و تحلیل داده‌های ردیابی استفاده کنید:

    • بینش غیرواقعی (موتور آنریل): ردیابی را تجزیه و تحلیل کنید تا زمان‌بندی GameThread ، RenderThread و RHIThread را مشاهده کنید.
      • اگر GameThread یا RenderThread از محدودیت زمانی فریم (برای مثال، ۳۳.۳ میلی‌ثانیه برای ۳۰ فریم در ثانیه) فراتر روند، بازی به CPU وابسته است.
      • اگر RHIThread اجرای طولانی مدتی را نشان دهد یا بیشتر زمان فریم را به خود اختصاص دهد، بازی به پردازنده گرافیکی (GPU-bound) وابسته است.
    جدول زمانی ردیابی Unreal Insight که زمان اجرای GameThread، RenderThread و RHIThread را نشان می‌دهد
    شکل ۲. ردیابی بینش غیرواقعی با GameThread، RenderThread و RHIThread (برای بزرگنمایی کلیک کنید).
    • Unity Profiler (یونیتی): اگر رشته اصلی زمان قابل توجهی را روی نشانگرهایی مانند Gfx.WaitForPresentOnGfxThread مصرف کند در حالی که رشته رندر Gfx.PresentFrame یا <GraphicsAPIName>.WaitForLastPresent را نشان می‌دهد، بازی به GPU وابسته است.
    جدول زمانی Unity Profiler که نشان می‌دهد Thread اصلی منتظر Gfx.WaitForPresentOnGfxThread است
    شکل ۳. مثال محدود شده با GPU برای Unity Profiler (برای بزرگنمایی کلیک کنید).
    • Perfetto: تجزیه و تحلیل تخصیص هسته‌های پردازنده و جزئیات اجرای رشته‌ها. این تجزیه و تحلیل، شناسایی گلوگاه‌های عملکرد را از طریق بررسی دقیق اطلاعات اجرای رشته‌ها تسهیل می‌کند.
    • سربار پردازنده: این ردپا نشان می‌دهد که بار کاری روی GameThread و RenderThread ، همراه با VSync، مسئول تأخیر در QueuePresent RHI Thread است و بدین ترتیب سناریویی با محدودیت پردازنده را نشان می‌دهد.

      ردیابی کامل که زمان اجرای GameThread، RenderThread و RHIThread را نشان می‌دهد
      شکل ۴. ردیابی‌های Perfetto با جزئیات اجرای CPU (برای بزرگنمایی کلیک کنید).
    • سربار GPU: اگر زمان تکمیل GPU از محدودیت زمانی فریم، مثلاً ۲۵ میلی‌ثانیه، بیشتر شود، بازی به GPU وابسته است. این ردپا نشان می‌دهد که تکمیل GPU از ۲۵ میلی‌ثانیه بیشتر شده است که نشان‌دهنده سناریوی GPU-bound است.

      ردیابی بی‌نقص که بلوک تکمیل GPU را در انتظار تکمیل GPU نشان می‌دهد
      شکل ۵. ردیابی‌های کامل با جزئیات سربار GPU (برای بزرگنمایی کلیک کنید).
  2. از دستورات آمار موتور Unreal استفاده کنید:

    • stat unit : زمان اختصاص داده شده به رشته‌های بازی، ترسیم و RHI را مقایسه کنید. اگر زمان‌های بازی و ترسیم کم باشند اما زمان RHI به طور مداوم از محدودیت زمانی فریم فراتر رود، بازی به GPU وابسته است. به عنوان مثال، اگر FPS مورد نیاز 30 باشد (معادل 33.33 میلی‌ثانیه در هر فریم) و هر دو رشته بازی و ترسیم به طور مداوم در محدوده 10-15 میلی‌ثانیه باقی بمانند، اما RHI به طور مداوم از 30 میلی‌ثانیه فراتر رود، قویاً سناریوی GPU وابسته را نشان می‌دهد.
    پوشش واحد آمار که زمان اجرای فریم، بازی، ترسیم، پردازنده گرافیکی و RHIT را نشان می‌دهد
    شکل 6. واحد آمار، تخمین شرایط محدود به GPU را تسهیل می‌کند.
    • stat VulkanRHI : بررسی مدت زمان ارسال صف و مدت زمان ارائه صف.
    پوشش Stat VulkanRHI که شمارنده‌های چرخه را برای صف ارسال و صف ارائه نمایش می‌دهد
    شکل 7. Stat VulkanRHI تخمین شرایط محدود به GPU را تسهیل می‌کند (برای بزرگنمایی کلیک کنید).
    • stat slow : زمان اختصاص داده شده به رشته‌های بازی، رندر و RHI را به دقت بررسی کنید تا موانع را مشخص کنید.
  3. بررسی معیارهای عملکرد: از نتایج حاصل از تجزیه و تحلیل جامع عملکرد بازی خود استفاده کنید. در اندروید:

    • محدود به CPU: استفاده از CPU (در حالت عادی) بیش از ۱۵٪، با استفاده کم از GPU و FPS پایین.
    • محدود به پردازنده گرافیکی: استفاده از پردازنده گرافیکی بیش از ۹۰٪.

    معمولاً اگر میزان FPS و استفاده از GPU پایین باشد در حالی که استفاده از CPU از ۱۵٪ بیشتر شود، می‌توان وضعیت را محدود به CPU در نظر گرفت.

    جداول معیارهای عملکرد که سناریوهای محدود به CPU و محدود به GPU را برجسته می‌کنند
    شکل ۸. معیارهای عملکرد با استفاده از CPU و GPU.

بهینه‌سازی عملکرد پردازنده

اگر تجزیه و تحلیل نشان می‌دهد که بازی به CPU وابسته است، بررسی بیشتری انجام دهید تا رشته‌ها یا APIهای خاصی را که باعث گلوگاه شده‌اند، مشخص کنید.

برای راهنمایی دقیق، به نکات بهینه‌سازی CPU و GPU برای اندروید مراجعه کنید.

بهینه‌سازی عملکرد پردازنده گرافیکی

اگر تجزیه و تحلیل نشان می‌دهد که بازی به پردازنده گرافیکی (GPU) وابسته است، با استفاده از اشکال‌زداهای فریم، بررسی بیشتری انجام دهید تا خط لوله رندر و فراخوانی‌های ترسیم را تجزیه و تحلیل کنید.

برای راهنمایی دقیق، به نکات بهینه‌سازی CPU و GPU برای اندروید مراجعه کنید.

اثربخشی بهینه‌سازی را تأیید کنید

  1. انجام تست A/B: با بهینه‌سازی‌های پیاده‌سازی‌شده، یک نسخه بسازید.
  2. اندازه‌گیری عملکرد: از همان ابزارها و روش‌های تحلیل اولیه برای اندازه‌گیری عملکرد نسخه بهینه‌شده استفاده کنید.
  3. مقایسه نتایج: داده‌های عملکرد جدید را با داده‌های اولیه مقایسه کنید تا تأیید کنید که گلوگاه‌های شناسایی‌شده برطرف شده‌اند و اهداف FPS و حرارتی برآورده شده‌اند.
  4. تکرار: مراحل تحلیل و بهینه‌سازی را تا رسیدن به عملکرد مورد نظر تکرار کنید.

همچنین ببینید