Android 11 atau yang lebih baru mendukung pembuatan profil image booting, yang merangkum informasi tentang kode berbagai komponen tingkat sistem seperti server sistem dan classpath booting. Android Runtime (ART) menggunakan informasi ini untuk melakukan pengoptimalan di seluruh sistem, yang sebagian di antaranya penting untuk performa Android dan memengaruhi eksekusi semua kode non-native (tingkat sistem atau aplikasi). Dalam beberapa kasus, profil boot image dapat memengaruhi performa eksekusi dan penggunaan memori dengan persentase dua digit.
Mendapatkan informasi profil booting
Profil boot image berasal dari profil aplikasi yang dieksekusi selama perjalanan penting pengguna (CUJ). Dalam konfigurasi perangkat tertentu, ART mengambil
(sebagai bagian dari profil JIT) metode dan class classpath booting yang digunakan oleh
aplikasi, lalu mencatat informasi tersebut dalam profil aplikasi (misalnya,
/data/misc/profiles/cur/0/com.android.chrome/primary.prof), yang
diindeks oleh file Dalvik EXecutable (DEX) classpath booting (lihat Format profil
ART).
Tinjau profil aplikasi yang direkam selama CUJ untuk menentukan bagian classpath booting mana yang paling sering digunakan dan paling penting untuk dioptimalkan (misalnya, lihat Format profil ART). Menyertakan semua metode atau class akan memengaruhi performa secara negatif, jadi fokuslah pada jalur kode yang paling umum digunakan. Misalnya, jika metode dari classpath booting digunakan oleh satu aplikasi, metode tersebut tidak boleh menjadi bagian dari profil booting. Setiap perangkat harus mengonfigurasi pemilihan metode/class berdasarkan pemilihan CUJ dan jumlah data yang dihasilkan oleh pengujian.
Untuk menggabungkan informasi classpath booting dari semua profil aplikasi individual di perangkat, jalankan perintah adb shell cmd package snapshot-profile android. Anda dapat menggunakan informasi gabungan sebagai dasar untuk pemrosesan dan pemilihan metode/class tanpa menggabungkan profil individual secara manual (meskipun Anda dapat melakukannya jika diinginkan).
Gambar 1. Proses untuk mendapatkan profil boot image
Data profil boot image
Profil image booting mencakup file dan data berikut.
Profil untuk classpath booting (
frameworks/base/config/boot-image-profile.txt. Menentukan metode mana dari classpath booting yang dioptimalkan dan class mana yang disertakan dalam image booting.art.Daftar class yang dimuat sebelumnya. Menentukan class mana yang dimuat sebelumnya di Zygote.
Profil untuk komponen server sistem (
frameworks/base/services/art-profile). Menentukan metode mana dari server sistem yang dioptimalkan/dikompilasi, class mana yang disertakan dalam image booting.art, dan bagaimana tata letak file DEX yang sesuai.
Format profil ART
Profil ART mengambil informasi dari setiap file DEX yang dimuat, termasuk informasi tentang metode yang layak dioptimalkan dan class yang digunakan selama startup. Saat pembuatan profil image booting diaktifkan, ART juga menyertakan file JAR server sistem dan classpath booting dalam profil dan menganotasi setiap file DEX dengan nama paket yang menggunakannya.
Misalnya, buang profil image booting mentah dengan perintah berikut:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.profTindakan ini akan menghasilkan output yang mirip dengan:
=== Dex files ===
=== profile ===
ProfileInfo [012]
core-oj.jar:com.google.android.ext.services [index=0] [checksum=e4e3979a]
hot methods: 520[], 611[] …
startup methods: …
classes: …
...
core-oj.jar:com.android.systemui [index=94] [checksum=e4e3979a]
hot methods: 520[], 521[]…
startup methods: …
classes: …
Pada contoh di atas:
core-oj.jardigunakan olehcom.google.android.ext.servicesdancom.android.systemui. Setiap entri mencantumkan dua paket yang digunakan daricore-oj.jar.Kedua proses menggunakan metode dengan indeks DEX 520, tetapi hanya proses
systemuiyang menggunakan metode dengan indeks DEX 521. Alasan yang sama berlaku untuk bagian profil lainnya (misalnya, class startup).
Selama pemrosesan data, filter metode/class berdasarkan penggunaan, dengan memprioritaskan proses tingkat sistem (misalnya, server sistem atau systemui) atau metode yang mungkin tidak umum digunakan tetapi tetap penting (misalnya, metode yang digunakan oleh aplikasi kamera).
Format profil secara internal menganotasi setiap metode dengan beberapa flag (startup, pasca-startup, hotness, abi), yang lebih banyak daripada yang ditampilkan dalam format dump-only. Untuk memanfaatkan semua sinyal, ubah skrip yang tersedia.
Rekomendasi
Gunakan panduan berikut untuk mendapatkan hasil terbaik.
Deploy konfigurasi untuk membuat profil boot image ke beberapa perangkat pengujian dan gabungkan hasilnya sebelum membuat profil boot image akhir. Alat
profmanmendukung penggabungan dan pemilihan beberapa profil image booting, tetapi hanya berfungsi dengan versi image booting yang sama (classpath booting yang sama).Berikan prioritas pemilihan ke metode/class yang digunakan oleh proses sistem. Metode/class ini mungkin menggunakan kode yang tidak sering digunakan oleh aplikasi lain, tetapi tetap penting untuk dioptimalkan.
Bentuk data dari satu kali menjalankan perangkat terlihat sangat berbeda dibandingkan dengan perangkat pengujian yang menjalankan CUJ dunia nyata. Jika Anda tidak memiliki banyak perangkat pengujian, gunakan perangkat yang sama untuk menjalankan beberapa CUJ guna meningkatkan keyakinan bahwa pengoptimalan profil boot image akan berfungsi dengan baik dalam produksi (skenario ini dijelaskan di bawah).
Mengonfigurasi perangkat
Untuk mengaktifkan konfigurasi profil booting melalui properti sistem, gunakan salah satu metode berikut.
Opsi 1: Menyiapkan properti secara manual (berfungsi hingga reboot):
adb rootadb shell stopadb shell setprop dalvik.vm.profilebootclasspath trueadb shell setprop dalvik.vm.profilesystemserver trueadb shell startOpsi 2: Menggunakan
local.prop(efek permanen hingga file dihapus). Untuk melakukannya:Buat file
local.propdengan konten:dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=trueJalankan perintah berikut:
adb push local.prop /data/adb shell chmod 0750 /data/local.propadb reboot
Opsi 3: Menggunakan konfigurasi perangkat untuk menetapkan properti sisi server berikut:
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
Membuat profil boot image
Gunakan petunjuk berikut untuk membuat profil boot image dasar menggunakan pengujian pada satu perangkat.
Siapkan perangkat.
Konfigurasi perangkat seperti yang dijelaskan dalam Mengonfigurasi perangkat.
(Opsional) Diperlukan waktu agar format profil baru dapat membersihkan dan mengganti profil lainnya. Untuk mempercepat pengumpulan profil, reset semua profil di perangkat.
adb shell stopadb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"adb shell startJalankan CUJ di perangkat.
Ambil profil menggunakan perintah berikut:
adb shell cmd package snapshot-profile androidEkstrak profil menggunakan perintah berikut:
adb pull /data/misc/profman/android.profBuka file JAR classpath booting menggunakan perintah berikut:
m distls $ANDROID_PRODUCT_OUT/boot.zipBuat profil boot image menggunakan perintah
profmanberikut.profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...Dengan menggunakan data, sesuaikan perintah
profmanmenggunakan flag nilai minimum pemilihan yang tersedia.--method-threshold--class-threshold--clean-class-threshold--preloaded-class-threshold--upgrade-startup-to-hot--special-package
Untuk melihat daftar lengkapnya, lihat halaman bantuan atau kode sumber
profman.