Manajemen kinerja

Mengelola kekuatan dan kinerja perangkat Android dapat membantu memastikan aplikasi berjalan secara konsisten dan lancar di berbagai perangkat keras. Di Android 7.0 dan yang lebih baru, OEM dapat menerapkan dukungan untuk petunjuk performa berkelanjutan yang memungkinkan aplikasi mempertahankan performa perangkat yang konsisten dan menentukan inti eksklusif guna meningkatkan performa untuk aplikasi latar depan yang intensif CPU.

Kinerja berkelanjutan

Untuk aplikasi yang berjalan lama (game, kamera, RenderScript , pemrosesan audio), performa dapat sangat bervariasi seiring tercapainya batas suhu perangkat dan mesin sistem pada chip (SoC) dibatasi. Pengembang aplikasi yang membuat aplikasi berkinerja tinggi dan berjalan lama memiliki keterbatasan karena kemampuan platform yang mendasarinya merupakan target bergerak ketika perangkat mulai memanas.

Untuk mengatasi keterbatasan ini, Android 7.0 memperkenalkan dukungan untuk performa berkelanjutan, yang memungkinkan OEM memberikan petunjuk tentang kemampuan performa perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi dapat menggunakan petunjuk ini untuk menyesuaikan aplikasi agar memiliki tingkat kinerja perangkat yang konsisten dan dapat diprediksi dalam jangka waktu yang lama.

Arsitektur

Aplikasi Android dapat meminta platform untuk memasuki mode kinerja berkelanjutan di mana perangkat Android dapat mempertahankan tingkat kinerja yang konsisten untuk jangka waktu yang lama.

Gambar 1. Arsitektur mode performa berkelanjutan

Penerapan

Untuk mendukung performa berkelanjutan di Android 7.0 dan yang lebih baru, OEM harus:

  • Lakukan perubahan khusus perangkat pada HAL daya untuk mengunci frekuensi CPU/GPU maksimum atau melakukan pengoptimalan lainnya untuk mencegah pelambatan termal.
  • Terapkan petunjuk baru POWER_HINT_SUSTAINED_PERFORMANCE di power HAL.
  • Deklarasikan dukungan dengan mengembalikan TRUE melalui API isSustainedPerformanceModeSupported() .
  • Terapkan Window.setSustainedPerformanceMode .

Dalam implementasi referensi Nexus, petunjuk daya membatasi frekuensi maksimum CPU dan GPU pada tingkat tertinggi yang berkelanjutan. Ingatlah bahwa menurunkan bilah MAX pada frekuensi CPU/GPU akan menurunkan kecepatan bingkai, namun kecepatan yang lebih rendah ini lebih disukai dalam mode ini karena keberlanjutannya. Misalnya, perangkat yang menggunakan jam maksimal normal mungkin dapat merender pada 60 FPS selama beberapa menit, namun setelah perangkat memanas, perangkat mungkin akan melambat hingga 30 FPS pada akhir 30 menit. Saat menggunakan mode berkelanjutan, perangkat dapat, misalnya, merender secara konsisten pada 45 FPS selama 30 menit penuh. Tujuannya adalah frame rate saat menggunakan mode yang sama tinggi (atau lebih tinggi) dibandingkan frame rate saat tidak menggunakan mode, dan konsisten dari waktu ke waktu sehingga pengembang tidak perlu mengejar target bergerak.

Kami sangat menyarankan penerapan mode berkelanjutan sehingga perangkat mencapai kinerja berkelanjutan setinggi mungkin—bukan hanya nilai minimum yang diperlukan untuk lulus pengujian (misalnya, pilih batas frekuensi MAX setinggi mungkin yang tidak menyebabkan perangkat mengalami throttle termal seiring waktu).

Catatan : Membatasi kecepatan jam MAX tidak diperlukan untuk menerapkan mode berkelanjutan.

Validasi

OEM dapat menggunakan pengujian CTS (Android 7.0 dan yang lebih baru) untuk memverifikasi penerapan API performa berkelanjutan. Pengujian ini menjalankan beban kerja selama sekitar 30 menit dan mengukur kinerja dengan atau tanpa mengaktifkan mode berkelanjutan:

  • Dengan mengaktifkan mode berkelanjutan, kecepatan bingkai harus tetap relatif konstan (pengujian mengukur persentase perubahan kecepatan bingkai dari waktu ke waktu dan memerlukan perubahan <5%).
  • Dengan mengaktifkan mode berkelanjutan, kecepatan bingkai tidak boleh lebih rendah dari kecepatan bingkai pada akhir 30 menit dengan mode dinonaktifkan.

Selain itu, Anda dapat menguji penerapan Anda secara manual dengan beberapa beban kerja intensif CPU dan GPU untuk memastikan perangkat tidak mengalami pembatasan termal setelah penggunaan selama 30 menit. Dalam pengujian internal, kami menggunakan sampel beban kerja termasuk game dan aplikasi benchmarking (misalnya gfxbench ).

Inti eksklusif

Untuk beban kerja yang intensif CPU dan sensitif terhadap waktu, didahului oleh thread lain dapat menjadi pembeda dalam menentukan tenggat waktu frame atau tidak. Untuk aplikasi yang memiliki persyaratan latensi dan kecepatan bingkai yang ketat (seperti aplikasi audio atau realitas virtual), memiliki inti CPU eksklusif dapat menjamin tingkat kinerja yang dapat diterima.

Perangkat yang menjalankan Android 7.0 atau lebih baru kini dapat mencadangkan satu inti secara eksplisit untuk aplikasi latar depan teratas, sehingga meningkatkan kinerja semua aplikasi latar depan dan memberi aplikasi dengan beban kerja intensitas tinggi kontrol lebih besar atas bagaimana pekerjaannya dialokasikan di seluruh inti CPU.

Untuk mendukung inti eksklusif pada perangkat:

  • Aktifkan cpusets dan konfigurasikan cpuset yang hanya berisi aplikasi latar depan teratas.
  • Pastikan satu inti (ini adalah inti eksklusif) dicadangkan untuk thread dari cpuset ini.
  • Terapkan API getExclusiveCores untuk mengembalikan nomor inti dari inti eksklusif.

Untuk menentukan proses mana yang dijadwalkan pada inti mana, gunakan systrace saat menjalankan beban kerja apa pun dan pastikan tidak ada thread ruang pengguna dari aplikasi selain aplikasi latar depan teratas yang dijadwalkan pada inti eksklusif.

Untuk melihat implementasi referensi Nexus 6P, lihat android//device/huawei/angler/power/power.c .