مدیریت عملکرد

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

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

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

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

معماری

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

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

پیاده‌سازی

برای پشتیبانی از عملکرد پایدار در Android 7.0 و نسخه‌های جدیدتر، «تولیدکنندگان اصلی محصول» باید:

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

در پیاده‌سازی مرجع Nexus، اشاره‌گر مصرف برق حداکثر فرکانس‌های CPU و GPU را در بالاترین سطوح پایدار محدود می‌کند. به‌خاطر داشته باشید که پایین آوردن نوار «حداکثر» در فرکانس CPU/GPU نرخ فریم را کاهش می‌دهد، اما این نرخ پایین‌تر به‌دلیل پایداری‌اش در این حالت ترجیح داده می‌شود. برای مثال، دستگاهی که از حداکثر ساعت‌های عادی استفاده می‌کند ممکن است بتواند برای چند دقیقه با سرعت ۶۰ فریم در ثانیه رندر کند، اما پس‌از گرم شدن دستگاه، ممکن است تا ۳۰ فریم در ثانیه در پایان ۳۰ دقیقه کاهش یابد. هنگام استفاده از حالت پایدار، دستگاه می‌تواند، برای مثال، به‌طور مداوم با نرخ ۴۵ فریم در ثانیه برای کل ۳۰ دقیقه رندر کند. هدف این است که نرخ فریم هنگام استفاده از حالت به اندازه نرخ فریم هنگام استفاده نکردن از حالت (یا بیشتر از آن) بالا باشد و در طول زمان ثابت باشد تا توسعه‌دهندگان مجبور نباشند هدفی متحرک را دنبال کنند.

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

توجه: برای پیاده‌سازی حالت پایدار، محدود کردن نرخ‌های ساعت MAX لازم نیست.

اعتبارسنجی

تولیدکنندگان تجهیزات اصلی می‌توانند از آزمون CTS (‏Android 7.0 و نسخه‌های جدیدتر) برای درستی‌سنجی پیاده‌سازی میانای برنامه‌سازی کاربردی عملکرد پایدار استفاده کنند. این آزمایش بار کاری را برای تقریباً ۳۰ دقیقه اجرا می‌کند و عملکرد را با و بدون فعال بودن حالت پایدار محک می‌زند:

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

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

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

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

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

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

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

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

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