Android 11 veya sonraki sürümler, sistem sunucusu ve önyükleme sınıf yolu gibi çeşitli sistem düzeyindeki bileşenlerin koduyla ilgili bilgileri kapsayan önyükleme resmi profilleri oluşturmayı destekler. Android Runtime (ART), sistem genelinde optimizasyonlar yapmak için bu bilgileri kullanır. Bu optimizasyonlardan bazıları Android'in performansı için kritiktir ve doğal olmayan tüm kodların (sistem veya uygulama düzeyinde) yürütülmesini etkiler. Bazı durumlarda, önyükleme resmi profilleri yürütme performansını ve bellek tüketimini iki haneli yüzdelerle etkileyebilir.
Önyükleme profili bilgilerini alma
Önyükleme resmi profilleri, kritik kullanıcı işlemleri (CUJ'ler) sırasında çalıştırılan 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, ardından bu bilgileri uygulama profiline (örneğin, /data/misc/profiles/cur/0/com.android.chrome/primary.prof
) kaydeder. Burada, önyükleme sınıf yolu Dalvik yürütülebilir (DEX) dosyası tarafından dizine eklenir (ART profil biçimine bakın).
Önyükleme sınıf yolu klasörünün en çok kullanılan ve optimize edilmesi en önemli bölümünü belirlemek için CUJ'ler sırasında kaydedilen uygulama profillerini inceleyin (ö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 yolu içindeki bir yöntem tek bir uygulama tarafından kullanılıyorsa önyükleme profillerinin bir parçası olmamalıdır. Her cihaz, yöntem/sınıf seçimini CUJ seçimine ve test tarafından üretilen veri miktarına göre yapılandırmalıdır.
Cihazdaki tüm uygulama profillerinden önyükleme sınıf yolu bilgilerini toplamak için adb shell cmd package snapshot-profile android
komutunu çalıştırın. Bireysel profilleri manuel olarak toplamadan, toplanmış bilgileri işleme ve yöntem/sınıf seçimi için temel olarak kullanabilirsiniz (isterseniz bunu yapabilirsiniz).
Şekil 1. Önyükleme resmi profillerini alma süreci
Önyükleme görüntüsü profil verileri
Önyükleme resmi profilleri aşağıdaki dosyaları ve verileri içerir.
Açılış sınıf yolu (
frameworks/base/config/boot-image-profile.txt
) profili. Açılış sınıf yolundaki hangi yöntemlerin optimize edileceğini, hangi sınıfın açılış.art
resmine dahil edileceğini ve ilgili DEX dosyalarının nasıl düzenleneceğini belirler.Önceden yüklenmiş sınıfların listesi. Zygote'a hangi sınıfların önceden yükleneceğini belirler.
Sistem sunucusu bileşenlerinin profili (
frameworks/base/services/art-profile
). Sistem sunucusunda hangi yöntemlerin optimize edildiğini/derlendiğini, önyükleme.art
resmine hangi sınıfın dahil edildiğini ve ilgili DEX dosyalarının nasıl düzenlendiğini belirler.
ART profili biçimi
ART profili, optimize etmeye değer yöntemler ve başlatma sırasında kullanılan sınıflar hakkındaki bilgiler de dahil olmak üzere, yüklenen her DEX dosyasından bilgi alır. Önyükleme resmi profil oluşturma etkinleştirildiğinde ART, önyükleme sınıf yolu ve sistem sunucusu JAR dosyalarını da profile ekler ve her DEX dosyasına, dosyayı kullanan paketin adını ekler.
Örneğin, aşağıdaki komutla ham önyükleme resmi profilini dökün:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof
Bu işlem sonucunda şuna benzer bir çıkış elde edilir:
=== 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şte,core-oj.jar
kaynağından kullanılan iki paket listelenir.Her iki işlem de DEX dizini 520 ile yöntemi kullanır ancak yalnızca
systemui
işlemi DEX dizini 521 ile yöntemi kullanır. Diğer profil bölümleri (ör. başlangıç sınıfları) için de aynı gerekçe geçerlidir.
Veri işleme sırasında, sistem düzeyindeki işlemlere (ö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 yöntemleri/sınıfları kullanıma göre filtreleyin.
Profil biçimi, her yöntemi dahili olarak birden fazla işaretle (başlangıç, başlangıç sonrası, sıcaklık, abi) ekler. Bu, yalnızca dökümü içeren biçimde 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 resmi profilleri oluşturma yapılandırmasını birkaç test cihazına dağıtın ve nihai önyükleme resmi profilini oluşturmadan önce sonuçları toplayın.
profman
aracı, birden fazla önyükleme resmi profilinin toplanmasını ve seçilmesini destekler ancak yalnızca önyükleme resminin 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 yine de optimize edilmesi kritik olan kodlar kullanabilir.
Tek bir cihazda çalıştırılan testin veri şekli, gerçek CUJ'leri çalıştıran test cihazlarına kıyasla çok farklı görünür. Çok sayıda test cihazınız yoksa önyükleme resmi profili optimizasyonlarının üretimde 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 önyükleme profili yapılandırmasını etkinleştirmek için aşağıdaki yöntemlerden birini kullanın.
1. Seçenek: Sahne öğelerini manuel olarak ayarlayın (yeniden başlatma işlemine 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
kullanın (dosya silinene kadar kalıcı etki). Bunu yapmak için:Aşağıdaki iç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
3. Seçenek: Aşağıdaki sunucu tarafı özellikleri 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 resmi profilleri oluşturma
Tek bir cihazda test kullanarak temel bir önyükleme resmi profili oluşturmak için aşağıdaki talimatları uygulayın.
Cihazı kurun.
Cihazı Cihazları yapılandırma bölümünde açıklandığı gibi yapılandırın.
(İsteğe bağlı) Yeni profil biçiminin diğer profilleri temizlemesi ve 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
CUJ'leri cihazda ç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 ayıklayı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 resmi 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 işaretlerini kullanarak
profman
komutunu değiştirin.--method-threshold
--class-threshold
--clean-class-threshold
--preloaded-class-threshold
--upgrade-startup-to-hot
--special-package
Listenin tamamını görüntülemek için
profman
yardım sayfasına veya kaynak koduna bakın.