Başlatma görüntüsü profilleri

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).

Başlatma görüntüsü profili

Ş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 ve com.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:

    1. Aşağıdaki içeriği içeren bir local.prop dosyası oluşturun:

      dalvik.vm.profilebootclasspath=true
      dalvik.vm.profilesystemserver=true
      
    2. 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.

  1. Cihazı kurun.

    1. Cihazı, Cihazları yapılandırma bölümünde açıklandığı şekilde yapılandırın.

    2. (İ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
      
    3. CUJ'leri cihazda çalıştırın.

  2. Şu komutu kullanarak profili yakalayın:

    adb shell cmd package snapshot-profile android
    
  3. Aşağıdaki komutu kullanarak profili çıkarın:

    adb pull /data/misc/profman/android.prof
    
  4. Aşağıdaki komutları kullanarak önyükleme sınıf yolu JAR dosyalarına gidin:

    m dist
    ls $ANDROID_PRODUCT_OUT/boot.zip
    
  5. 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=...
    
  6. 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.