Profil gambar boot

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

Dapatkan informasi profil boot

Profil gambar boot berasal dari profil aplikasi yang dijalankan selama perjalanan pengguna kritis (CUJ). Dalam konfigurasi perangkat tertentu, ART menangkap (sebagai bagian dari profil JIT) metode dan kelas jalur kelas boot yang digunakan oleh aplikasi, lalu mencatat informasi tersebut di profil aplikasi (misalnya, /data/misc/profiles/cur/0/com.android.chrome/primary.prof ), yang diindeks oleh file boot classpath Dalvik EXecutable (DEX) (lihat format profil ART ).

Tinjau profil aplikasi yang direkam selama CUJ untuk menentukan bagian mana dari jalur kelas boot yang paling banyak digunakan dan paling penting untuk dioptimalkan (misalnya, lihat format profil ART ). Menyertakan semua metode atau kelas berdampak negatif terhadap kinerja, jadi fokuslah pada jalur kode yang paling umum digunakan. Misalnya, jika suatu metode dari jalur kelas boot digunakan oleh satu aplikasi, metode tersebut tidak boleh menjadi bagian dari profil boot. Setiap perangkat harus mengonfigurasi pemilihan metode/kelas berdasarkan pilihan CUJ dan jumlah data yang dihasilkan oleh pengujian.

Untuk mengumpulkan informasi classpath boot dari semua profil aplikasi individual pada perangkat, jalankan perintah adb shell cmd package snapshot-profile android . Anda dapat menggunakan informasi agregat sebagai dasar pemrosesan dan pemilihan metode/kelas tanpa menggabungkan profil individual secara manual (walaupun Anda dapat melakukannya jika diinginkan).

Profil gambar boot

Gambar 1. Proses untuk mendapatkan profil image boot

Data profil gambar boot

Profil gambar boot mencakup file dan data berikut.

  • Profil untuk classpath boot ( frameworks/base/config/boot-image-profile.txt ). Menentukan metode mana dari jalur kelas boot yang dioptimalkan, kelas mana yang disertakan dalam gambar boot .art , dan bagaimana file DEX yang sesuai ditata.

  • Daftar kelas yang dimuat sebelumnya . Menentukan kelas 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, kelas mana yang disertakan dalam image boot .art , dan bagaimana file DEX yang sesuai ditata.

Format profil SENI

Profil ART menangkap informasi dari setiap file DEX yang dimuat, termasuk informasi tentang metode yang perlu dioptimalkan dan kelas yang digunakan selama startup. Ketika pembuatan profil gambar boot diaktifkan, ART juga menyertakan jalur kelas boot dan file JAR server sistem dalam profil dan memberi anotasi pada setiap file DEX dengan nama paket yang menggunakannya.

Misalnya, buang profil image boot mentah dengan perintah berikut:

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

Ini menghasilkan keluaran 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, namun hanya proses systemui yang menggunakan metode dengan indeks DEX 521. Alasan yang sama berlaku untuk bagian profil lainnya (misalnya, kelas startup).

Selama pemrosesan data, memfilter metode/kelas berdasarkan penggunaan, memberikan prioritas pada proses tingkat sistem (misalnya, server sistem atau systemui ) atau 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 dump-only. Untuk memanfaatkan semua sinyal, modifikasi skrip yang tersedia.

Rekomendasi

Gunakan panduan berikut untuk hasil terbaik.

  • Terapkan konfigurasi untuk menghasilkan profil gambar booting ke beberapa perangkat pengujian dan gabungkan hasilnya sebelum membuat profil gambar boot akhir. Alat profman mendukung penggabungan dan pemilihan beberapa profil gambar boot, tetapi hanya berfungsi dengan versi gambar boot yang sama (jalur kelas boot yang sama).

  • Berikan prioritas pemilihan pada metode/kelas yang digunakan oleh proses sistem. Metode/kelas ini mungkin menggunakan kode yang jarang digunakan oleh aplikasi lain namun tetap penting untuk pengoptimalan.

  • Bentuk data dari satu perangkat yang dijalankan terlihat sangat berbeda dibandingkan dengan perangkat pengujian yang menjalankan CUJ di dunia nyata. Jika Anda tidak memiliki armada perangkat pengujian yang besar, gunakan perangkat yang sama untuk menjalankan beberapa CUJ guna meningkatkan keyakinan bahwa pengoptimalan profil gambar boot akan berfungsi dengan baik dalam produksi (skenario ini dijelaskan di bawah).

Konfigurasikan perangkat

Untuk mengaktifkan konfigurasi profil boot melalui properti sistem, gunakan salah satu metode berikut.

  • Opsi 1: Menyiapkan alat peraga secara manual (berfungsi hingga reboot):

    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 mengatur properti sisi server berikut:

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

Hasilkan profil gambar boot

Gunakan petunjuk berikut untuk membuat profil image booting 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, setel ulang 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. Tangkap 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. Navigasikan ke file JAR jalur kelas boot menggunakan perintah berikut:

    m dist
    ls $ANDROID_PRODUCT_OUT/boot.zip
    
  5. Hasilkan profil gambar boot 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 tanda ambang batas pilihan yang tersedia.

    • --method-threshold
    • --class-threshold
    • --clean-class-threshold
    • --preloaded-class-threshold
    • --upgrade-startup-to-hot
    • --special-package

    Untuk melihat daftar selengkapnya, lihat halaman bantuan profman atau kode sumber.