Android 11 ou version ultérieure prend en charge la génération de profils d'image de démarrage, qui encapsulent des informations sur le code de divers composants au niveau du système, tels que le serveur système et le classpath de démarrage. Android Runtime (ART) utilise ces informations pour effectuer des optimisations à l'échelle du système, dont certaines sont essentielles aux performances d'Android et ont un impact sur l'exécution de tout le code non natif (au niveau du système ou de l'application). Dans certains cas, les profils d'image de démarrage peuvent affecter les performances d'exécution et la consommation de mémoire de pourcentages à deux chiffres.
Obtenir des informations sur le profil de démarrage
Les profils d'image de démarrage sont dérivés des profils des applications exécutées lors des parcours utilisateur critiques. Dans une configuration d'appareil spécifique, ART capture (dans les profils JIT) les méthodes et classes de classpath de démarrage utilisées par les applications, puis enregistre ces informations dans le profil d'application (par exemple, /data/misc/profiles/cur/0/com.android.chrome/primary.prof
), où elles sont indexées par le fichier DEX (Classpath de démarrage) (voir Format de profil ART).
Examinez les profils d'application enregistrés pendant les parcours utilisateur critiques pour déterminer quelle partie du chemin d'accès au démarrage est la plus utilisée et la plus importante à optimiser (voir Format de profil ART pour en savoir plus). L'inclusion de toutes les méthodes ou classes a un impact négatif sur les performances. Concentrez-vous donc sur les chemins de code les plus couramment utilisés. Par exemple, si une méthode du chemin d'accès au chemin d'accès de démarrage est utilisée par une seule application, elle ne doit pas faire partie des profils de démarrage. Chaque appareil doit configurer la sélection de la méthode/classe en fonction de la sélection de la CUJ et de la quantité de données produites par les tests.
Pour agréger les informations de chemin d'accès au chemin d'accès au démarrage de tous les profils d'application individuels sur l'appareil, exécutez la commande adb shell cmd package snapshot-profile android
. Vous pouvez utiliser les informations agrégées comme base pour le traitement et la sélection de la méthode/classe sans agréger manuellement les profils individuels (bien que vous puissiez le faire si vous le souhaitez).
Figure 1 : Procédure d'obtention des profils d'image de démarrage
Données de profil de l'image de démarrage
Les profils d'image de démarrage incluent les fichiers et données suivants.
Profil pour le classpath de démarrage (
frameworks/base/config/boot-image-profile.txt
). Détermine les méthodes du classpath de démarrage à optimiser, la classe incluse dans l'image.art
de démarrage et la disposition des fichiers DEX correspondants.Liste des classes préchargées Détermine quelles classes sont préchargées dans Zygote.
Profil des composants du serveur système (
frameworks/base/services/art-profile
). Détermine les méthodes du serveur système qui sont optimisées/compilées, la classe incluse dans l'image.art
de démarrage et la mise en page des fichiers DEX correspondants.
Format du profil ART
Le profil ART capture des informations sur chacun des fichiers DEX chargés, y compris des informations sur les méthodes à optimiser et les classes utilisées au démarrage. Lorsque le profilage de l'image de démarrage est activé, ART inclut également le chemin de classe de démarrage et les fichiers JAR du serveur système dans le profil, et annote chaque fichier DEX avec le nom du package qui l'utilise.
Par exemple, videz le profil de l'image de démarrage brute à l'aide de la commande suivante:
adb shell profman --dump-only --profile-file=/data/misc/profman/android.prof
Vous obtenez un résultat semblable à celui-ci :
=== 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: …
Dans l'exemple ci-dessus:
core-oj.jar
est utilisé parcom.google.android.ext.services
etcom.android.systemui
. Chaque entrée liste les deux packages utilisés à partir decore-oj.jar
.Les deux processus utilisent la méthode avec l'indice DEX 520, mais seul le processus
systemui
l'utilise avec l'indice DEX 521. Le même raisonnement s'applique aux autres sections de profil (par exemple, les classes de démarrage).
Pendant le traitement des données, filtrez les méthodes/classes en fonction de l'utilisation, en donnant la priorité aux processus au niveau du système (par exemple, le serveur système ou systemui
) ou aux méthodes qui ne sont pas couramment utilisées, mais qui sont toujours importantes (par exemple, celles utilisées par l'application d'appareil photo).
Le format de profil annote en interne chaque méthode avec plusieurs indicateurs (démarrage, post-démarrage, hotness, abi), ce qui est plus que ce qui est affiché dans le format de vidage uniquement. Pour utiliser tous les signaux, modifiez les scripts disponibles.
Recommandations
Pour obtenir de meilleurs résultats, suivez les consignes ci-dessous.
Déployez la configuration de génération de profils d'image de démarrage sur plusieurs appareils de test et agrégez les résultats avant de générer le profil d'image de démarrage final. L'outil
profman
permet d'agréger et de sélectionner plusieurs profils d'image de démarrage, mais il ne fonctionne qu'avec la même version de l'image de démarrage (même chemin d'accès au classpath de démarrage).Accordez la priorité de la sélection aux méthodes/classes utilisées par les processus système. Ces méthodes/classes peuvent utiliser du code rarement employé par d'autres applications, mais qui reste essentiel pour l'optimisation.
La forme des données lors de l'exécution d'un seul appareil est très différente de celle des appareils de test qui exécutent des CUJ réels. Si vous ne disposez pas d'un vaste parc d'appareils de test, utilisez le même appareil pour exécuter plusieurs CUJ afin de vous assurer que les optimisations du profil d'image de démarrage fonctionneront bien en production (ce scénario est décrit ci-dessous).
Configurer les appareils
Pour activer la configuration du profil de démarrage via les propriétés système, utilisez l'une des méthodes suivantes.
Option 1:configurer manuellement les accessoires (fonctionne pour le redémarrage):
adb root
adb shell stop
adb shell setprop dalvik.vm.profilebootclasspath true
adb shell setprop dalvik.vm.profilesystemserver true
adb shell start
Option 2:utilisez un
local.prop
(effet permanent jusqu'à la suppression du fichier). Pour ce faire :Créez un fichier
local.prop
avec le contenu suivant :dalvik.vm.profilebootclasspath=true dalvik.vm.profilesystemserver=true
Exécutez les commandes suivantes :
adb push local.prop /data/
adb shell chmod 0750 /data/local.prop
adb reboot
Option 3:Utilisez la configuration de l'appareil pour définir les propriétés suivantes côté serveur:
persist.device_config.runtime_native_boot.profilesystemserver persist.device_config.runtime_native_boot.profilebootclasspath`
Générer des profils d'images de démarrage
Suivez les instructions ci-dessous pour générer un profil d'image de démarrage de base à l'aide de tests sur un seul appareil.
Configurez l'appareil.
Configurez l'appareil comme décrit dans la section Configurer des appareils.
(Facultatif) Le nouveau format de profil prend du temps à nettoyer et à remplacer les autres profils. Pour accélérer la collecte de profils, réinitialisez tous les profils de l'appareil.
adb shell stop
adb shell find "/data/misc/profiles -name *.prof -exec truncate -s 0 {} \;"
adb shell start
Exécutez les CUJ sur l'appareil.
Capturez le profil à l'aide de la commande suivante :
adb shell cmd package snapshot-profile android
Extrayez le profil à l'aide de la commande suivante :
adb pull /data/misc/profman/android.prof
Accédez aux fichiers JAR de classpath de démarrage à l'aide des commandes suivantes:
m dist
ls $ANDROID_PRODUCT_OUT/boot.zip
Générez le profil d'image de démarrage à l'aide de la commande
profman
suivante.profman --generate-boot-image-profile --profile-file=android.prof --out-profile-path=... --out-preloaded-classes-path=...
À l'aide de données, ajustez la commande
profman
à l'aide des options de seuil de sélection disponibles.--method-threshold
--class-threshold
--clean-class-threshold
--preloaded-class-threshold
--upgrade-startup-to-hot
--special-package
Pour obtenir la liste complète, consultez la page d'aide ou le code source de
profman
.