Android 11 veya sonraki sürümler, sistem sunucusu ve başlatma sınıfı yolu gibi sistem düzeyindeki çeşitli bileşenlerin koduyla ilgili bilgileri içeren başlatma görüntüsü profilleri oluşturmayı destekler. Android Runtime (ART) bu bilgileri sistem genelinde optimizasyonlar yapmak için kullanır. Bu optimizasyonlardan bazıları Android'in performansı için son derece önemlidir ve yerel 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.
Başlatma profili bilgilerini al
Başlatma 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, 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).
Başlatma sınıf yolunun en çok hangi bölümünün kullanıldığını ve optimize edilmesi en önemli kısmını belirlemek için CUJ'ler sırasında kaydedilen uygulama profillerini inceleyin (örneğ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, başlatma sınıf yolundan bir yöntem tek bir uygulama tarafından kullanılıyorsa bu yöntem, başlatma profillerinin bir parçası olmamalıdır. Her cihaz, CUJ seçimine ve test ile üretilen veri miktarına göre yöntem/sınıf seçimini 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. Ayrı ayrı 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
Başlatma 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, ş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ş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. Aynı gerekçe diğer profil bölümleri (örneğin, startup sınıfları) için de geçerlidir.
Veri işleme sırasında yöntemleri/sınıfları kullanıma göre filtreleyerek sistem düzeyindeki süreçlere (örneğin, sistem sunucusu veya systemui
) ya da yaygın olarak kullanılmayan ancak yine de önemli olan yöntemlere (örneğin, kamera uygulamasının kullandığı yöntemler) öncelik verin.
Profil biçimi, her yönteme dahili olarak birden çok işaret (başlangıç, başlatma sonrası, çalışır durumda olma, abi) ekler. Bu işaretler, yalnızca döküm biçiminde 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 için aşağıdaki yönergeleri kullanın.
Başlatma görüntüsü profilleri oluşturmaya yönelik yapılandırmayı çeşitli test cihazlarına dağıtın ve nihai başlatma görüntüsü 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ık 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 üzerinden 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 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
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 ederek temel bir başlatma görüntüsü profili oluşturmak için aşağıdaki talimatları uygulayı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 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.
Şu 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 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, mevcut seçim eşiği işaretlerinden yararlanarak
profman
komutunda ince ayar yapı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.