Profil booting image

Android 11 atau yang lebih tinggi mendukung pembuatan profil image booting, yang mengenkapsulasi informasi tentang kode berbagai komponen tingkat sistem seperti server sistem dan classpath booting. Android Runtime (ART) menggunakan informasi ini untuk melakukan pengoptimalan seluruh sistem, beberapa di antaranya sangat penting untuk performa Android dan memengaruhi eksekusi semua kode non-native (tingkat sistem atau aplikasi). Dalam beberapa kasus, profil image booting dapat memengaruhi performa eksekusi dan konsumsi memori dengan persentase dua digit.

Mendapatkan informasi profil booting

Profil image booting berasal dari profil aplikasi yang dijalankan 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 di profil aplikasi (misalnya, /data/misc/profiles/cur/0/com.android.chrome/primary.prof), tempat informasi tersebut diindeks oleh file Dalvik EXecutable (DEX) classpath booting (lihat format profil ART).

Tinjau profil aplikasi yang direkam selama CUJ untuk menentukan bagian dari classpath boot yang paling sering digunakan dan paling penting untuk dioptimalkan (untuk contoh, lihat format profil ART). Menyertakan semua metode atau class akan berdampak negatif pada performa, 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 setiap profil secara manual (meskipun Anda dapat melakukannya jika diinginkan).

Profil image booting

Gambar 1. Proses untuk mendapatkan profil booting image

Data profil image booting

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, class mana yang disertakan dalam image .art booting, dan cara file DEX yang sesuai ditata.

  • Daftar class pramuat. Menentukan class mana yang dipramuat di Zygote.

  • Profil untuk komponen server sistem (frameworks/base/services/art-profile). Menentukan metode dari server sistem mana yang dioptimalkan/dikompilasi, class mana yang disertakan dalam image .art booting, dan cara file DEX terkait ditata.

Format profil ART

Profil ART mengambil informasi dari setiap file DEX yang dimuat, termasuk informasi tentang metode yang perlu dioptimalkan dan class yang digunakan selama startup. Jika pembuatan profil image booting diaktifkan, ART juga akan menyertakan file classpath booting dan file JAR server sistem dalam profil serta menganotasi setiap file DEX dengan nama paket yang menggunakannya.

Misalnya, dump profil image booting mentah dengan perintah berikut:

adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof

Tindakan 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: …

Dalam contoh di atas:

  • core-oj.jar digunakan oleh com.google.android.ext.services dan com.android.systemui. Setiap entri mencantumkan dua paket yang digunakan dari core-oj.jar.

  • Kedua proses tersebut menggunakan metode dengan indeks DEX 520, tetapi hanya proses systemui yang 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 memberikan prioritas ke proses tingkat sistem (misalnya, server sistem atau systemui) atau ke metode yang mungkin tidak umum digunakan, tetapi masih 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 dari yang ditampilkan dalam format khusus dump. 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 booting, tetapi hanya berfungsi pada versi booting image 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 masih penting untuk dioptimalkan.

  • Bentuk data dari satu perangkat yang dijalankan terlihat sangat berbeda dibandingkan dengan perangkat pengujian yang menjalankan CUJ dunia nyata. Jika Anda tidak memiliki perangkat pengujian dalam jumlah besar, gunakan perangkat yang sama untuk menjalankan beberapa CUJ guna meningkatkan keyakinan bahwa pengoptimalan profil 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 memulai 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:

    1. Buat file local.prop dengan konten:

      dalvik.vm.profilebootclasspath=true
      dalvik.vm.profilesystemserver=true
      
    2. Jalankan perintah berikut:

      adb push local.prop /data/
      adb shell chmod 0750 /data/local.prop
      adb reboot
      
  • Opsi 3: Gunakan konfigurasi perangkat untuk menetapkan properti sisi server berikut:

    persist.device_config.runtime_native_boot.profilesystemserver
    persist.device_config.runtime_native_boot.profilebootclasspath`
    

Membuat profil boot image

Gunakan petunjuk berikut untuk membuat profil boot image dasar menggunakan pengujian pada satu perangkat.

  1. Siapkan perangkat.

    1. Konfigurasikan perangkat seperti yang dijelaskan dalam Mengonfigurasi perangkat.

    2. (Opsional) Format profil baru memerlukan waktu untuk membersihkan dan mengganti 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
      
    3. Jalankan CUJ di perangkat.

  2. Ambil foto profil menggunakan perintah berikut:

    adb shell cmd package snapshot-profile android
    
  3. Ekstrak profil menggunakan perintah berikut:

    adb pull /data/misc/profman/android.prof
    
  4. Buka file JAR classpath booting menggunakan perintah berikut:

    m dist
    ls $ANDROID_PRODUCT_OUT/boot.zip
    
  5. Buat profil booting image menggunakan perintah profman berikut.

    profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
    
  6. 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.