Manajemen Kinerja, 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 kinerja berkelanjutan yang memungkinkan aplikasi mempertahankan kinerja perangkat yang konsisten dan menentukan inti eksklusif untuk meningkatkan kinerja untuk aplikasi latar depan intensif CPU.

Kinerja yang berkelanjutan

Untuk aplikasi yang berjalan lama (game, kamera, RenderScript , pemrosesan audio), kinerja dapat bervariasi secara dramatis karena batas suhu perangkat tercapai dan mesin sistem pada chip (SoC) dibatasi. Pengembang aplikasi yang membuat aplikasi berkinerja tinggi dan berjalan lama terbatas karena kemampuan platform yang mendasarinya adalah target bergerak saat perangkat mulai memanas.

Untuk mengatasi keterbatasan ini, Android 7.0 memperkenalkan dukungan untuk kinerja yang berkelanjutan, memungkinkan OEM untuk memberikan petunjuk tentang kemampuan kinerja perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi dapat menggunakan petunjuk ini untuk menyesuaikan aplikasi untuk 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 kinerja berkelanjutan

Penerapan

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

  • Buat 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 isSustainedPerformanceModeSupported() API.
  • Menerapkan Window.setSustainedPerformanceMode .

Dalam implementasi referensi Nexus, petunjuk daya membatasi frekuensi maksimum CPU dan GPU pada tingkat berkelanjutan tertinggi. Ingatlah bahwa menurunkan bilah MAX dalam frekuensi CPU/GPU akan menurunkan kecepatan bingkai, tetapi kecepatan yang lebih rendah ini lebih disukai dalam mode ini karena keberlanjutannya. Misalnya, perangkat yang menggunakan jam maksimum normal mungkin dapat merender pada 60 FPS selama beberapa menit, tetapi setelah perangkat memanas, perangkat mungkin 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 lebih tinggi (atau lebih tinggi) daripada frame rate saat tidak menggunakan mode, dan konsisten dari waktu ke waktu sehingga developer tidak perlu mengejar target yang bergerak.

Kami sangat menyarankan untuk menerapkan 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 dari waktu ke waktu).

Catatan : Pembatasan 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 kinerja berkelanjutan mereka. Pengujian menjalankan beban kerja selama kurang lebih 30 menit dan membandingkan kinerja dengan dan tanpa mode berkelanjutan diaktifkan:

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

Selain itu, Anda dapat menguji implementasi Anda secara manual dengan beberapa beban kerja intensif CPU dan GPU untuk memastikan perangkat tidak tercekik secara termal setelah 30 menit penggunaan. Dalam pengujian internal, kami menggunakan contoh beban kerja termasuk game dan aplikasi benchmark (misalnya gfxbench ).

Inti eksklusif

Untuk beban kerja CPU-intensif dan peka waktu, didahului oleh utas lain dapat menjadi perbedaan antara membuat tenggat waktu bingkai 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 yang lebih baru sekarang dapat memesan satu inti secara eksplisit untuk aplikasi latar depan teratas, meningkatkan kinerja untuk semua aplikasi latar depan, dan memberi aplikasi dengan beban kerja intensitas tinggi kontrol lebih besar atas bagaimana pekerjaan mereka dialokasikan di seluruh inti CPU.

Untuk mendukung inti eksklusif pada perangkat:

  • Aktifkan cpusets dan konfigurasikan cpuset yang hanya berisi aplikasi latar depan atas.
  • Pastikan satu inti (ini adalah inti eksklusif) dicadangkan untuk utas dari cpuset ini.
  • Terapkan getExclusiveCores API 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 utas ruang pengguna dari aplikasi selain aplikasi latar depan teratas yang dijadwalkan pada inti eksklusif.

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

,

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 kinerja berkelanjutan yang memungkinkan aplikasi mempertahankan kinerja perangkat yang konsisten dan menentukan inti eksklusif untuk meningkatkan kinerja untuk aplikasi latar depan intensif CPU.

Kinerja yang berkelanjutan

Untuk aplikasi yang berjalan lama (game, kamera, RenderScript , pemrosesan audio), kinerja dapat bervariasi secara dramatis karena batas suhu perangkat tercapai dan mesin sistem pada chip (SoC) dibatasi. Pengembang aplikasi yang membuat aplikasi berkinerja tinggi dan berjalan lama terbatas karena kemampuan platform yang mendasarinya adalah target bergerak saat perangkat mulai memanas.

Untuk mengatasi keterbatasan ini, Android 7.0 memperkenalkan dukungan untuk kinerja yang berkelanjutan, memungkinkan OEM untuk memberikan petunjuk tentang kemampuan kinerja perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi dapat menggunakan petunjuk ini untuk menyesuaikan aplikasi untuk 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 kinerja berkelanjutan

Penerapan

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

  • Buat 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 isSustainedPerformanceModeSupported() API.
  • Menerapkan Window.setSustainedPerformanceMode .

Dalam implementasi referensi Nexus, petunjuk daya membatasi frekuensi maksimum CPU dan GPU pada tingkat berkelanjutan tertinggi. Ingatlah bahwa menurunkan bilah MAX dalam frekuensi CPU/GPU akan menurunkan kecepatan bingkai, tetapi kecepatan yang lebih rendah ini lebih disukai dalam mode ini karena keberlanjutannya. Misalnya, perangkat yang menggunakan jam maksimum normal mungkin dapat merender pada 60 FPS selama beberapa menit, tetapi setelah perangkat memanas, perangkat mungkin 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 lebih tinggi (atau lebih tinggi) daripada frame rate saat tidak menggunakan mode, dan konsisten dari waktu ke waktu sehingga developer tidak perlu mengejar target yang bergerak.

Kami sangat menyarankan untuk menerapkan 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 dari waktu ke waktu).

Catatan : Pembatasan 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 kinerja berkelanjutan mereka. Pengujian menjalankan beban kerja selama kurang lebih 30 menit dan membandingkan kinerja dengan dan tanpa mode berkelanjutan diaktifkan:

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

Selain itu, Anda dapat menguji implementasi Anda secara manual dengan beberapa beban kerja intensif CPU dan GPU untuk memastikan perangkat tidak tercekik secara termal setelah 30 menit penggunaan. Dalam pengujian internal, kami menggunakan contoh beban kerja termasuk game dan aplikasi benchmark (misalnya gfxbench ).

Inti eksklusif

Untuk beban kerja CPU-intensif dan peka waktu, didahului oleh utas lain dapat menjadi perbedaan antara membuat tenggat waktu bingkai 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 yang lebih baru sekarang dapat memesan satu inti secara eksplisit untuk aplikasi latar depan teratas, meningkatkan kinerja untuk semua aplikasi latar depan, dan memberi aplikasi dengan beban kerja intensitas tinggi kontrol lebih besar atas bagaimana pekerjaan mereka dialokasikan di seluruh inti CPU.

Untuk mendukung inti eksklusif pada perangkat:

  • Aktifkan cpusets dan konfigurasikan cpuset yang hanya berisi aplikasi latar depan atas.
  • Pastikan satu inti (ini adalah inti eksklusif) dicadangkan untuk utas dari cpuset ini.
  • Terapkan getExclusiveCores API 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 utas ruang pengguna dari aplikasi selain aplikasi latar depan teratas yang dijadwalkan pada inti eksklusif.

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