Android 11 veya sonraki sürümlerde, sistem sunucusu ve başlatma sınıf yolu gibi çeşitli sistem düzeyindeki bileşenlerin koduyla ilgili bilgileri kapsayan başlatma resmi profilleri oluşturulabilir. Android Runtime (ART), bu bilgileri sistem genelinde optimizasyonlar yapmak için kullanır. Bu optimizasyonlardan bazıları Android'in performansı açısından kritik öneme sahiptir ve yerel olmayan tüm kodların (sistem veya uygulama düzeyinde) yürütülmesini etkiler. 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 alma
Önyükleme görüntüsü profilleri, kritik kullanıcı işlemleri (CUJ'ler) sırasında yürütülen uygulamaların profillerinden elde edilir. 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, ardından bu bilgileri önyükleme sınıf yolu Dalvik EXecutable (DEX) dosyası tarafından dizine eklendiği uygulama profilinde (örneğin, /data/misc/profiles/cur/0/com.android.chrome/primary.prof
) kaydeder (bkz. ART profil biçimi).
CUJ'ler sırasında kaydedilen uygulama profillerini inceleyerek önyükleme sınıf yolunun hangi bölümünün en çok kullanıldığını ve optimize etmek için en önemli olduğunu belirleyin (örnek için ART profil biçimi bölümüne bakın). Tüm yöntemleri veya sınıfları dahil etmek performansı olumsuz 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 bir parçası olmamalıdır. Her cihaz, CUJ seçimine ve testle üretilen veri miktarına göre yöntem/sınıf seçimini yapılandırmalıdır.
Cihazdaki tüm uygulama profillerinden başlatma sınıf yolu bilgilerini toplamak için adb shell cmd package snapshot-profile android
komutunu çalıştırın. Toplanan bilgileri, tek tek profilleri manuel olarak toplamanıza gerek kalmadan (isterseniz yapabilirsiniz) işleme ve yöntem/sınıf seçimi için temel olarak kullanabilirsiniz.
1.şekil Başlatma görüntüsü profillerini alma süreci
Başlatma görüntüsü profil verileri
Önyükleme görüntüsü profilleri aşağıdaki dosya ve verileri içerir.
Önyükleme sınıf yolu için profil (
frameworks/base/config/boot-image-profile.txt
. Önyükleme sınıf yolundaki hangi yöntemlerin optimize edileceğini ve hangi sınıfın önyükleme.art
görüntüsüne dahil edileceğini belirler.Önceden yüklenmiş sınıfların listesi. Zygote'ta hangi sınıfların önceden yükleneceğini belirler.
Sistem sunucusu bileşenleri için profil (
frameworks/base/services/art-profile
). Sistem sunucusundaki hangi yöntemlerin optimize edileceğini/derleneceğini, hangi sınıfın önyükleme.art
görüntüsüne dahil edileceğini ve ilgili DEX dosyalarının nasıl düzenleneceğini belirler.
ART profili biçimi
ART profili, yüklenen her DEX dosyasından bilgi alır. Bu bilgiler arasında, optimizasyona değer yöntemler ve başlatma sırasında kullanılan sınıflarla ilgili bilgiler yer alır. Önyükleme görüntüsü profili oluşturma etkinleştirildiğinde ART, profilde önyükleme sınıf yolu ve sistem sunucusu JAR dosyalarını da içerir ve her DEX dosyasını, onu kullanan paketin adıyla notlandırır.
Örneğin, aşağıdaki komutla ham önyükleme görüntüsü profilini boşaltın:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof
Bu, şuna benzer bir çıkış ü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ıyor. Her girişte,core-oj.jar
tarihinden itibaren kullanılan iki paket listelenir.Her iki işlem de DEX dizini 520 olan yöntemi kullanır ancak yalnızca
systemui
işlemi, DEX dizini 521 olan yöntemi kullanır. Aynı mantık, diğer profil bölümleri (ör. başlangıç sınıfları) için de geçerlidir.
Veri işleme sırasında, kullanım durumuna göre filtre yöntemleri/sınıfları, sistem düzeyindeki süreçlere (ör. sistem sunucusu veya systemui
) ya da yaygın olarak kullanılmayabilecek ancak yine de önemli olan yöntemlere (ör. kamera uygulaması tarafından kullanılan yöntemler) öncelik vererek filtreleyin.
Profil biçimi, her yöntemi dahili olarak birden fazla işaretle (başlangıç, başlangıç sonrası, sıcaklık, abi) açıklama ekler. Bu, yalnızca döküm biçiminde gösterilenden daha fazladır. Tüm sinyallerden yararlanmak için mevcut komut dosyalarını değiştirin.
Öneriler
En iyi sonuçlar için aşağıdaki yönergeleri kullanın.
Önyükleme görüntüsü profili oluşturma yapılandırmasını birkaç test cihazına dağıtın ve nihai önyükleme görüntüsü profilini oluşturmadan önce sonuçları toplayın.
profman
aracı, birden fazla önyükleme görüntüsü profilinin toplanmasını ve seçilmesini destekler ancak yalnızca aynı önyükleme görüntüsü sürümüyle (aynı önyükleme sınıf yolu) çalışır.Sistem süreçleri 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 yine de optimizasyon için kritik olan kodlar kullanabilir.
Tek bir cihaz çalıştırmasından elde edilen veri şekli, gerçek dünyadaki CUJ'leri yürüten test cihazlarına kıyasla çok farklı görünür. Çok sayıda test cihazınız yoksa önyükleme görüntüsü profili optimizasyonlarının üretimde iyi çalışacağından emin olmak için aynı cihazı kullanarak çeşitli CUJ'ler çalıştırın (bu senaryo aşağıda açıklanmıştır).
Cihazları yapılandırma
Sistem özellikleri aracılığıyla başlatma profili yapılandırmasını etkinleştirmek için aşağıdaki yöntemlerden birini kullanın.
1. seçenek: Sahne öğelerini manuel olarak ayarlama (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
2. seçenek:
local.prop
(dosya silinene kadar kalıcı efekt) kullanın. Bunu yapmak için:Aşağıdaki içeriğe sahip 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
3. seçenek: Aşağıdaki sunucu tarafı özelliklerini ayarlamak için cihaz yapılandırmasını kullanın:
adb shell device_config put runtime_native_boot profilebootclasspath true adb shell device_config put runtime_native_boot profilesystemserver true
Önyükleme görüntüsü profilleri oluşturma
Tek bir cihazda test yaparak 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 biçiminin diğer profilleri temizleyip değiştirmesi zaman alır. Profil toplama işlemini 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
Cihazda 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
profman
komutunu, kullanılabilir seçim eşiği işaretlerini kullanarak ayarlayın.--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.