مدیریت اجرایی

مدیریت قدرت و عملکرد دستگاه‌های Android می‌تواند به اطمینان از اجرای مداوم و روان برنامه‌ها بر روی طیف گسترده‌ای از سخت‌افزار کمک کند. در Android نسخه 7.0 و بالاتر، OEM ها می توانند از نکات عملکرد پایدار پشتیبانی کنند که برنامه ها را قادر می سازد عملکرد دستگاه را ثابت نگه دارند و یک هسته انحصاری را برای بهبود عملکرد برای برنامه های پیش زمینه فشرده CPU مشخص کنند.

عملکرد پایدار

برای برنامه‌های طولانی‌مدت (بازی، دوربین، رندر اسکریپت ، پردازش صدا)، عملکرد می‌تواند به‌طور چشمگیری تغییر کند، زیرا به محدودیت‌های دمای دستگاه رسیده و موتورهای سیستم روی تراشه (SoC) کاهش می‌یابند. توسعه‌دهندگان برنامه‌هایی که برنامه‌های با کارایی بالا و طولانی‌مدت ایجاد می‌کنند، محدود هستند، زیرا وقتی دستگاه شروع به گرم شدن می‌کند، قابلیت‌های پلتفرم زیرین هدف متحرکی است.

برای رفع این محدودیت‌ها، Android 7.0 پشتیبانی از عملکرد پایدار را معرفی کرد و به OEMها امکان داد نکاتی در مورد قابلیت‌های عملکرد دستگاه برای برنامه‌های طولانی‌مدت ارائه دهند. توسعه‌دهندگان برنامه‌ها می‌توانند از این نکات برای تنظیم برنامه‌ها برای سطح قابل پیش‌بینی و ثابت عملکرد دستگاه در دوره‌های زمانی طولانی استفاده کنند.

معماری

یک برنامه اندرویدی می‌تواند از پلتفرم درخواست کند تا به حالت عملکرد پایدار وارد شود که در آن دستگاه Android می‌تواند یک سطح عملکرد ثابت را برای مدت زمان طولانی حفظ کند.

شکل 1. معماری حالت عملکرد پایدار

پیاده سازی

برای پشتیبانی از عملکرد پایدار در Android نسخه 7.0 و جدیدتر، OEM ها باید:

  • تغییرات خاص دستگاه را در پاور HAL ایجاد کنید تا حداکثر فرکانس‌های CPU/GPU را قفل کنید یا بهینه‌سازی‌های دیگری را برای جلوگیری از انقباض حرارتی انجام دهید.
  • راهنمایی جدید POWER_HINT_SUSTAINED_PERFORMANCE را در برق HAL اجرا کنید.
  • با برگرداندن TRUE از طریق API isSustainedPerformanceModeSupported() پشتیبانی را اعلام کنید.
  • Window.setSustainedPerformanceMode را پیاده سازی کنید.

در پیاده‌سازی مرجع Nexus، اشاره قدرت حداکثر فرکانس‌های CPU و GPU را در بالاترین سطوح پایدار محدود می‌کند. به خاطر داشته باشید که پایین آوردن نوار MAX در فرکانس CPU/GPU، نرخ فریم را کاهش می دهد، اما این نرخ کمتر در این حالت به دلیل پایداری آن ترجیح داده می شود. به عنوان مثال، دستگاهی که از حداکثر ساعت معمولی استفاده می کند ممکن است بتواند برای چند دقیقه با سرعت 60 فریم در ثانیه رندر بگیرد، اما پس از گرم شدن دستگاه، ممکن است در پایان 30 دقیقه به 30 فریم در ثانیه کاهش یابد. برای مثال، هنگام استفاده از حالت پایدار، دستگاه می‌تواند برای کل 30 دقیقه با سرعت 45 فریم در ثانیه رندر کند. هدف، نرخ فریم در هنگام استفاده از حالت است که به همان میزان (یا بالاتر) از نرخ فریم در صورت عدم استفاده از حالت باشد، و در طول زمان ثابت باشد تا توسعه‌دهندگان مجبور نباشند هدف متحرک را تعقیب کنند.

ما اکیداً توصیه می‌کنیم که حالت پایدار را به‌گونه‌ای اجرا کنید که دستگاه به بالاترین عملکرد پایدار ممکن دست یابد - نه فقط حداقل مقادیر مورد نیاز برای گذراندن آزمایش (مثلاً حداکثر حداکثر فرکانس ممکن را انتخاب کنید که باعث شود دستگاه در طول زمان از نظر حرارتی گاز نگیرد).

توجه : برای اجرای حالت پایدار نیازی به کاهش حداکثر نرخ ساعت نیست.

اعتبار سنجی

OEM ها می توانند از تست CTS (اندروید 7.0 و جدیدتر) برای تأیید اجرای API عملکرد پایدار استفاده کنند. این تست یک بار کاری را برای تقریبا 30 دقیقه اجرا می کند و عملکرد را با و بدون فعال بودن حالت پایدار مشخص می کند:

  • با فعال بودن حالت پایدار، نرخ فریم باید نسبتاً ثابت بماند (آزمایش درصد تغییر نرخ فریم را در طول زمان اندازه‌گیری می‌کند و نیاز به تغییر <5٪ دارد).
  • با فعال کردن حالت پایدار، نرخ فریم نباید کمتر از نرخ فریم در پایان 30 دقیقه با حالت غیرفعال باشد.

علاوه بر این، می توانید پیاده سازی خود را به صورت دستی با چندین بار کاری فشرده CPU و GPU آزمایش کنید تا مطمئن شوید که دستگاه پس از 30 دقیقه استفاده از حالت حرارتی گاز نمی گیرد. در آزمایش داخلی، از حجم‌های کاری نمونه از جمله بازی‌ها و برنامه‌های محک (مثلا gfxbench ) استفاده کردیم.

هسته های انحصاری

برای بارهای کاری فشرده و حساس به زمان، استفاده از یک رشته دیگر می تواند تفاوت بین تعیین مهلت فریم یا عدم آن باشد. برای برنامه هایی که الزامات تأخیر و نرخ فریم سختی دارند (مانند برنامه های صوتی یا واقعیت مجازی)، داشتن یک هسته CPU انحصاری می تواند سطح قابل قبولی از عملکرد را تضمین کند.

دستگاه‌های دارای Android 7.0 یا جدیدتر اکنون می‌توانند یک هسته را به طور واضح برای برنامه پیش‌زمینه برتر رزرو کنند، عملکرد همه برنامه‌های پیش‌زمینه را بهبود می‌بخشند و به برنامه‌هایی با بار کاری با شدت بالا کنترل بیشتری بر نحوه تخصیص کارشان در هسته‌های CPU می‌دهند.

برای پشتیبانی از یک هسته انحصاری در یک دستگاه:

  • cpusets فعال کنید و یک cpuset پیکربندی کنید که فقط شامل برنامه پیش‌زمینه بالایی باشد.
  • اطمینان حاصل کنید که یک هسته (این هسته انحصاری است) برای رشته های این cpuset رزرو شده است.
  • برای برگرداندن شماره هسته هسته انحصاری، getExclusiveCores API را پیاده سازی کنید.

برای تعیین اینکه کدام فرآیندها بر روی کدام هسته‌ها برنامه‌ریزی شده‌اند، از systrace در حین اجرای هر بار کاری استفاده کنید و بررسی کنید که هیچ رشته فضای کاربری از برنامه‌های غیر از برنامه پیش‌زمینه بالا در هسته انحصاری برنامه‌ریزی نشده است.

برای مشاهده پیاده سازی مرجع برای Nexus 6P، به android//device/huawei/angler/power/power.c مراجعه کنید.