Android 11 veya sonraki sürümlerde, sistem sunucusu ve önyükleme sınıf yolu gibi çeşitli sistem düzeyindeki bileşenlerin koduyla ilgili bilgileri kapsayan başlatma görüntüsü profilleri oluşturulabilir. Android Çalışma Zamanı (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, başlatma görüntüsü profilleri, yürütme performansını ve bellek tüketimini çift haneli yüzdelerle etkileyebilir.
Önyükleme profili bilgilerini alma
Başlatma görüntüsü profilleri, kritik kullanıcı yolculukları (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 uygulama profilinde (ör. /data/misc/profiles/cur/0/com.android.chrome/primary.prof) kaydeder. Bu bilgiler, önyükleme sınıf yolu Dalvik EXecutable (DEX) dosyası tarafından dizine eklenir (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çimine 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 bağımsız 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 bunu yapabilirsiniz) işleme ve yöntem/sınıf seçimi için temel olarak kullanabilirsiniz.
Şekil 1. Başlatma görüntüsü profillerini alma süreci
Başlatma görüntüsü profil verileri
Başlatma 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.artgö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.artgö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ıflar hakkında bilgiler yer alır. Başlatma görüntüsü profili oluşturma etkinleştirildiğinde ART, önyükleme sınıf yolu ve sistem sunucusu JAR dosyalarını da profile dahil eder ve her DEX dosyasını, onu kullanan paketin adıyla ek açıklamalı hale getirir.
Örneğin, aşağıdaki komutla ham önyükleme görüntüsü profilini dökün:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.profBu, ş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.servicesvecom.android.systemuitarafından kullanılıyor. Her girişte,core-oj.jartarihinden itibaren kullanılan iki paket listelenir.Her iki işlemde de DEX dizini 520 olan yöntem kullanılır ancak yalnızca
systemuiiş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, filtre yöntemlerine/sınıflarına kullanım durumuna göre öncelik verin. Sistem düzeyindeki süreçlere (ör. sistem sunucusu veya systemui) ya da en çok tercih edilen olmayabilecek ancak yine de önemli olan yöntemlere (ör. kamera uygulaması tarafından kullanılan yöntemler) öncelik verin.
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.
Başlatma görüntüsü profili oluşturma yapılandırmasını birkaç test cihazına dağıtın ve nihai başlatma görüntüsü profilini oluşturmadan önce sonuçları toplayın.
profmanaracı, birden fazla başlatma görüntüsü profilinin toplanmasını ve seçilmesini destekler ancak yalnızca aynı başlatma 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ık 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 başlatma görüntüsü profili optimizasyonlarının canlı sürümde iyi çalışacağından emin olmak için aynı cihazı kullanarak birkaç CUJ ç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 donanımlarını manuel olarak ayarlama (yeniden başlatmaya kadar çalışır):
adb rootadb shell stopadb shell setprop dalvik.vm.profilebootclasspath trueadb shell setprop dalvik.vm.profilesystemserver trueadb shell start2. seçenek:
local.propkullanın (dosya silinene kadar kalıcı efekt). Bunu yapmak için:Aşağıdaki içeriğe sahip bir
local.propdosyası oluşturun:dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=trueAşağıdaki komutları çalıştırın:
adb push local.prop /data/adb shell chmod 0750 /data/local.propadb 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
Başlatma görüntüsü profilleri oluşturma
Tek bir cihazda test yaparak temel bir başlatma 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 stopadb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"adb shell startCihazda CUJ'leri çalıştırın.
Aşağıdaki komutu kullanarak profili yakalayın:
adb shell cmd package snapshot-profile androidAşağıdaki komutu kullanarak profili çıkarın:
adb pull /data/misc/profman/android.profAşağıdaki komutları kullanarak önyükleme sınıf yolu JAR dosyalarına gidin:
m distls $ANDROID_PRODUCT_OUT/boot.zipAşağıdaki
profmankomutunu kullanarak başlatma 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, kullanılabilir seçim eşiği işaretlerini kullanarak
profmankomutunu 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
profmanyardım sayfasına veya kaynak koduna bakın.