Android 11 atau yang lebih tinggi 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, beberapa di antaranya penting untuk performa Android dan memengaruhi eksekusi semua kode non-native (tingkat sistem atau aplikasi). Dalam beberapa kasus, profil image boot dapat memengaruhi performa eksekusi dan konsumsi memori hingga persentase dua digit.
Mendapatkan informasi profil booting
Profil image boot berasal dari profil aplikasi yang dijalankan selama
perjalanan pengguna penting (CUJ). Dalam konfigurasi perangkat tertentu, ART merekam
(sebagai bagian dari profil JIT) metode dan class classpath boot 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 boot (lihat format profil ART).
Tinjau profil aplikasi yang direkam selama CUJ untuk menentukan bagian boot classpath yang paling banyak digunakan dan paling penting untuk dioptimalkan (untuk contoh, lihat format profil ART). Menyertakan semua metode atau class akan berdampak negatif pada performa, jadi berfokuslah pada jalur kode yang paling umum digunakan. Misalnya, jika metode dari boot classpath digunakan oleh satu aplikasi, metode tersebut tidak boleh menjadi bagian dari profil booting. Setiap perangkat harus mengonfigurasi pemilihan metode/kelas berdasarkan pilihan CUJ dan jumlah data yang dihasilkan oleh pengujian.
Untuk menggabungkan informasi classpath boot 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/kelas tanpa menggabungkan profil individu secara manual (meskipun Anda dapat melakukannya jika diinginkan).
Gambar 1. Proses untuk mendapatkan profil image booting
Data profil gambar boot
Profil image booting mencakup file dan data berikut.
Profil untuk classpath boot (
frameworks/base/config/boot-image-profile.txt
. Menentukan metode mana dari classpath boot yang dioptimalkan dan class mana yang disertakan dalam image.art
boot.Daftar class yang sudah 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.art
boot, dan cara penataan file DEX yang sesuai.
Format profil ART
Profil ART merekam informasi dari setiap file DEX yang dimuat, termasuk informasi tentang metode yang perlu dioptimalkan dan class yang digunakan selama startup. Jika pembuatan profil image boot diaktifkan, ART juga menyertakan file JAR server sistem dan classpath boot dalam profil dan memberi anotasi pada setiap file DEX dengan nama paket yang menggunakannya.
Misalnya, dump profil image boot mentah dengan perintah berikut:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof
Tindakan ini 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: …
Dalam contoh di atas:
core-oj.jar
digunakan olehcom.google.android.ext.services
dancom.android.systemui
. Setiap entri mencantumkan dua paket yang digunakan daricore-oj.jar
.Kedua proses menggunakan metode dengan indeks DEX 520, tetapi hanya proses
systemui
yang menggunakan metode dengan indeks DEX 521. Rasionalisasi yang sama berlaku untuk bagian profil lainnya (misalnya, class startup).
Selama pemrosesan data, metode/class filter 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 tanda (startup, post-startup, hotness, abi), yang lebih banyak daripada yang ditampilkan dalam format dump saja. Untuk memanfaatkan semua sinyal, ubah skrip yang tersedia.
Rekomendasi
Gunakan panduan berikut untuk mendapatkan hasil terbaik.
Deploy konfigurasi untuk membuat profil image booting ke beberapa perangkat pengujian dan gabungkan hasilnya sebelum membuat profil image booting akhir. Alat
profman
mendukung penggabungan dan pemilihan beberapa profil image boot, tetapi hanya berfungsi dengan versi image boot yang sama (classpath boot yang sama).Berikan prioritas pemilihan ke metode/class yang digunakan oleh proses sistem. Metode/class ini mungkin menggunakan kode yang jarang 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 image booting 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 perangkat dimulai ulang):
adb root
adb shell stop
adb shell setprop dalvik.vm.profilebootclasspath true
adb shell setprop dalvik.vm.profilesystemserver true
adb shell start
Opsi 2: Gunakan
local.prop
(efek permanen hingga file dihapus). Untuk melakukannya:Buat file
local.prop
dengan konten:dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=true
Jalankan perintah berikut:
adb push local.prop /data/
adb shell chmod 0750 /data/local.prop
adb reboot
Opsi 3: Gunakan konfigurasi perangkat untuk menyetel 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 image booting
Gunakan petunjuk berikut untuk membuat profil image boot 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 menggantikan profil lainnya. Untuk mempercepat pengumpulan profil, reset semua profil di perangkat.
adb shell stop
adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
adb shell start
Jalankan CUJ di perangkat.
Ambil profil menggunakan perintah berikut:
adb shell cmd package snapshot-profile android
Ekstrak profil menggunakan perintah berikut:
adb pull /data/misc/profman/android.prof
Buka file JAR classpath boot menggunakan perintah berikut:
m dist
ls $ANDROID_PRODUCT_OUT/boot.zip
Buat profil image booting menggunakan perintah
profman
berikut.profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
Dengan menggunakan data, sesuaikan perintah
profman
menggunakan flag batas 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
.