Android 11 veya üzeri, sistem sunucusu ve önyükleme sınıf yolu gibi çeşitli sistem düzeyindeki bileşenlerin koduyla ilgili bilgileri kapsayan önyükleme görüntü profilleri oluşturmayı destekler. Android Runtime (ART), bazıları Android'in performansı açısından kritik olan ve tüm yerel olmayan kodların (sistem veya uygulama düzeyi) yürütülmesini etkileyen sistem çapında optimizasyonlar gerçekleştirmek için bu bilgileri kullanır. Bazı durumlarda, önyükleme görüntüsü profilleri yürütme performansını ve bellek tüketimini çift haneli yüzdelerle etkileyebilir.
Önyükleme profili bilgilerini alın
Önyükleme görüntüsü profilleri, kritik kullanıcı yolculukları (CUJ'ler) sırasında yürütülen uygulamaların profillerinden türetilir. Belirli bir cihaz yapılandırmasında ART, uygulamalar tarafından kullanılan önyükleme sınıf yolu yöntemlerini ve sınıflarını (JIT profillerinin bir parçası olarak) yakalar ve ardından bu bilgileri uygulama profiline kaydeder (örneğin, /data/misc/profiles/cur/0/com.android.chrome/primary.prof
), burada önyükleme sınıf yolu Dalvik EXecutable (DEX) dosyası tarafından indekslenir (bkz. ART profil formatı ).
Önyükleme sınıf yolunun hangi kısmının en çok kullanıldığını ve optimize edilmesinin en önemli olduğunu belirlemek için CUJ'ler sırasında kaydedilen uygulama profillerini inceleyin (örneğin, bkz . ART profil formatı ). Tüm yöntemlerin veya sınıfların dahil edilmesi performansı olumsuz yönde etkiler; bu nedenle en sık kullanılan kod yollarına odaklanın. Örneğin, önyükleme sınıf yolundaki bir yöntem tek bir uygulama tarafından kullanılıyorsa, önyükleme profillerinin parçası olmamalıdır. Her cihazın, CUJ seçimine ve test tarafından üretilen veri miktarına göre yöntem/sınıf seçimini yapılandırması gerekir.
Cihazdaki tüm bireysel uygulama profillerinden önyükleme sınıf yolu bilgilerini toplamak için adb shell cmd package snapshot-profile android
komutunu çalıştırın. Toplu bilgileri, tek tek profilleri manuel olarak toplamadan, işleme ve yöntem/sınıf seçimi için temel olarak kullanabilirsiniz (ancak istenirse bunu yapabilirsiniz).
Şekil 1. Önyükleme görüntüsü profillerini alma işlemi
Önyükleme görüntüsü profil verileri
Önyükleme görüntüsü profilleri aşağıdaki dosyaları ve verileri içerir.
Önyükleme sınıf yolu profili (
frameworks/base/config/boot-image-profile.txt
). Önyükleme sınıf yolundan hangi yöntemlerin optimize edileceğini, önyükleme.art
görüntüsüne hangi sınıfın dahil edileceğini ve karşılık gelen DEX dosyalarının nasıl düzenlendiğini belirler.Önceden yüklenmiş sınıfların listesi. Zygote'ta hangi sınıfların önceden yüklendiğini belirler.
Sistem sunucusu bileşenlerinin profili (
frameworks/base/services/art-profile
). Sistem sunucusundaki hangi yöntemlerin optimize edileceğini/derleneceğini, önyükleme.art
görüntüsüne hangi sınıfın dahil edileceğini ve karşılık gelen DEX dosyalarının nasıl düzenlendiğini belirler.
ART profil formatı
ART profili, optimize edilmeye değer yöntemler ve başlatma sırasında kullanılan sınıflar hakkında bilgiler de dahil olmak üzere, yüklenen DEX dosyalarının her birinden bilgi yakalar. Önyükleme görüntüsü profili oluşturma etkinleştirildiğinde, ART ayrıca profile önyükleme sınıf yolunu ve sistem sunucusu JAR dosyalarını da dahil eder ve her DEX dosyasına onu kullanan paketin adını ekler.
Örneğin, ham önyükleme görüntüsü profilini aşağıdaki komutla boşaltın:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof
Bu şuna benzer bir çıktı üretir:
=== 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: …
Yukarıdaki örnekte:
core-oj.jar
com.google.android.ext.services
vecom.android.systemui
tarafından kullanılır. Her girişcore-oj.jar
kullanılan iki paketi listeler.Her iki işlem de DEX indeksi 520'ye sahip yöntemi kullanır, ancak yalnızca
systemui
işlemi DEX indeksi 521'e sahip yöntemi kullanır. Aynı mantık diğer profil bölümleri (örneğin başlangıç sınıfları) için de geçerlidir.
Veri işleme sırasında, sistem düzeyindeki işlemlere (örneğin, sistem sunucusu veya systemui
) veya yaygın olarak kullanılmayan ancak yine de önemli olan yöntemlere (örneğin, sunucu tarafından kullanılan yöntemler) öncelik vererek, kullanıma dayalı yöntemleri/sınıfları filtreleyin. kamera uygulaması).
Profil formatı, her yönteme birden fazla bayrakla (başlangıç, başlangıç sonrası, hotness, abi) dahili olarak açıklama ekler; bu, salt döküm formatında görüntülenenden daha fazladır. Tüm sinyallerden yararlanmak için mevcut komut dosyalarını değiştirin.
Öneriler
En iyi sonuçları elde etmek için aşağıdaki yönergeleri kullanın.
Önyükleme görüntü profilleri oluşturmaya yönelik yapılandırmayı birkaç test cihazına dağıtın ve son önyükleme görüntü profilini oluşturmadan önce sonuçları toplayın.
profman
aracı birden çok önyükleme görüntüsü profilinin toplanmasını ve seçilmesini destekler, ancak yalnızca önyükleme görüntüsünün aynı sürümüyle (aynı önyükleme sınıf yolu) çalışır.Sistem işlemleri tarafından kullanılan yöntemlere/sınıflara seçim önceliği verin. Bu yöntemler/sınıflar, diğer uygulamalar tarafından sıklıkla kullanılmayan ancak optimize edilmesi yine de kritik olan kodları kullanabilir.
Tek bir cihaz çalıştırmasından elde edilen veri şekli, gerçek dünyadaki CUJ'leri çalıştıran test cihazlarıyla karşılaştırıldığında çok farklı görünüyor. Geniş bir test cihazı filonuz yoksa, önyükleme görüntüsü profili optimizasyonlarının üretimde iyi çalışacağına dair güveni artırmak için aynı cihazı birkaç CUJ çalıştırmak için kullanın (bu senaryo aşağıda açıklanmıştır).
Cihazları yapılandırma
Sistem özellikleri aracılığıyla önyükleme profili yapılandırmasını etkinleştirmek için aşağıdaki yöntemlerden birini kullanın.
Seçenek 1: Donanımları manuel olarak ayarlayın (yeniden başlatmaya kadar çalışır):
adb root
adb shell stop
adb shell setprop dalvik.vm.profilebootclasspath true
adb shell setprop dalvik.vm.profilesystemserver true
adb shell start
Seçenek 2:
local.prop
kullanın (dosya silinene kadar kalıcı etki). Böyle yaparak:İçeriği içeren bir
local.prop
dosyası oluşturun:dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=true
Aşağıdaki komutları çalıştırın:
adb push local.prop /data/
adb shell chmod 0750 /data/local.prop
adb reboot
Seçenek 3: Aşağıdaki sunucu tarafı özelliklerini ayarlamak için cihaz yapılandırmasını kullanın:
persist.device_config.runtime_native_boot.profilesystemserver persist.device_config.runtime_native_boot.profilebootclasspath`
Önyükleme görüntüsü profilleri oluşturun
Tek bir cihazda test kullanarak temel bir önyükleme görüntüsü profili oluşturmak için aşağıdaki talimatları kullanın.
Cihazı kurun.
Cihazı, Cihazları yapılandırma bölümünde açıklandığı şekilde yapılandırın.
(İsteğe bağlı) Yeni profil formatının diğer profilleri temizlemesi ve değiştirmesi zaman alır. Profil toplamayı hızlandırmak için cihazdaki tüm profilleri sıfırlayın.
adb shell stop
adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
adb shell start
Cihazdaki CUJ'leri çalıştırın.
Aşağıdaki komutu kullanarak profili yakalayın:
adb shell cmd package snapshot-profile android
Aşağıdaki komutu kullanarak profili çıkarın:
adb pull /data/misc/profman/android.prof
Aşağıdaki komutları kullanarak önyükleme sınıf yolu JAR dosyalarına gidin:
m dist
ls $ANDROID_PRODUCT_OUT/boot.zip
Aşağıdaki
profman
komutunu kullanarak önyükleme görüntüsü profilini oluşturun.profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
Verileri kullanarak, mevcut seçim eşiği bayraklarını kullanarak
profman
komutunu değiştirin.-
--method-threshold
-
--class-threshold
-
--clean-class-threshold
-
--preloaded-class-threshold
-
--upgrade-startup-to-hot
-
--special-package
Tam listeyi görüntülemek için
profman
yardım sayfasına veya kaynak koduna bakın.-