perfetto

perfetto est un outil qui vous permet de collecter des informations sur les performances des appareils Android via Android Debug Bridge (ADB). Appelez l'outil perfetto à l'aide de la commande adb shell perfetto .... perfetto utilise différentes sources pour collecter des traces de performance sur votre appareil, par exemple :

  • ftrace pour les informations du noyau
  • atrace pour l'annotation de l'espace utilisateur dans les services et les applications
  • heapprofd pour les informations sur l'utilisation de la mémoire native des services et des applications

Cette page explique comment appeler perfetto et le configurer pour générer la sortie souhaitée. Pour en savoir plus, consultez la documentation sur perfetto.

Syntaxe

Cette section explique comment utiliser ADB pour appeler perfetto pour différents modes et comment générer une trace.

Sélection d'une source de données

perfetto inclut les deux modes suivants qui déterminent les sources de données utilisées pour enregistrer votre trace :

  • Light mode (Mode clair) : ne peut sélectionner qu'un sous-ensemble de sources de données, en particulier atrace et ftrace. Cependant, il offre une interface semblable à systrace.
  • Normal mode (Mode normal) : récupère sa configuration dans un tampon de protocole et vous permet de tirer pleinement parti des fonctionnalités de perfetto en utilisant des sources de données autres qu'atrace et ftrace.

Options générales

Le tableau suivant indique les options disponibles lorsque vous utilisez perfetto dans les deux modes :

Tableau 1. Liste des options générales disponibles pour les outils Perfetto

Option Description
--background |
-d
perfetto quitte immédiatement l'interface de ligne de commande et continue à enregistrer la trace en arrière-plan.
--background-wait | -D Semblable à --background, mais attend (jusqu'à 30 s) que toutes les sources de données démarrent avant de se fermer. Le code de sortie est zéro en cas de confirmation reçue, ou non nul dans les autres circonstances (en cas d'erreur ou de délai d'inactivité).
--alert-id ID de l'alerte ayant déclenché cette trace.
--config-id ID de la configuration de déclenchement.
--config-uid UID de l'application qui a enregistré la configuration.
--subscription-id ID de l'abonnement qui a déclenché cette trace.
--out OUT_FILE |
-o OUT_FILE

Indique le chemin d'accès souhaité au fichier de suivi de sortie, ou - pour stdout. perfetto écrit la sortie dans le fichier décrit dans les options précédentes. Le format de sortie est compilé dans le format défini dans AOSP trace.proto.

Remarque : Vous devez spécifier le chemin d'accès complet du fichier de sortie. En règle générale, les fichiers doivent être écrits dans le dossier /data/misc/perfetto-traces.

--upload Une fois l'opération terminée, la trace est transmise au package spécifié par le message IncidentReportConfig dans la configuration de la trace proto.
--no-guardrails Désactive les protections contre une utilisation excessive des ressources quand l'option --upload est activée lors des tests.
--reset-guardrails Réinitialise l'état persistant des garde-fous et des sorties (à des fins de test).
--rsave-for-bugreport Si une trace pour laquelle bugreport_score est supérieur à 0 est en cours d'exécution, elle est enregistrée dans un fichier. Affiche le chemin d'accès une fois l'opération terminée.
--query Interroge l'état du service et l'affiche sous forme de texte lisible.
--query-raw Semblable à --query, mais affiche les octets bruts encodés en proto de tracing_service_state.proto..
--help | -h Affiche le texte d'aide de l'outil perfetto.

Mode clair

La syntaxe générale d'utilisation de perfetto en mode clair est la suivante :

 adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ]
             [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]...
             --out FILE

Le tableau suivant indique les options disponibles lors de l'utilisation de perfetto en mode clair.

Tableau 2. Liste des options de l'outil perfetto disponibles en mode clair

Option Description
--time TIME[s|m|h] |
-t TIME[s|m|h]
Indique la durée de la trace en secondes, minutes ou heures. Par exemple, --time 1m spécifie une durée de trace d'une minute. La durée par défaut est de 10 secondes.
--buffer SIZE[mb|gb] |
-b SIZE[mb|gb]
Indique la taille de la mémoire tampon de l'anneau, en mégaoctets (Mo) ou en gigaoctets (Go). Le paramètre par défaut est --buffer 32mb.
--size SIZE[mb|gb] |
-s SIZE[mb|gb]
Indique la taille maximale du fichier en mégaoctets (Mo) ou en gigaoctets (Go). Par défaut, perfetto n'utilise que la mémoire tampon de l'anneau en mémoire.
--app | -a Nom de l'application Android (atrace)

Ces options sont suivies d'une liste de spécificateurs d'événements :

Tableau 3. Liste des spécificateurs d'événements pour le mode clair

Étape Description
ATRACE_CAT Spécifie les catégories atrace pour lesquelles vous souhaitez enregistrer une trace. Par exemple, la commande suivante procède au suivi du gestionnaire de fenêtres à l'aide de atrace :
    adb shell perfetto --out FILE wm
    

Pour enregistrer d'autres catégories, consultez la liste des catégories atrace.

FTRACE_GROUP/FTRACE_NAME Spécifie les événements ftrace pour lesquels vous souhaitez enregistrer une trace. Par exemple, la commande suivante permet de suivre les événements sched/sched_switch :
      adb shell perfetto --out FILE sched/sched_switch
      

Mode normal

La syntaxe générale de l'utilisation de perfetto en mode normal est la suivante :

 adb shell perfetto [ --txt ] --config CONFIG_FILE --out FILE

Le tableau suivant indique les options disponibles lors de l'utilisation de perfetto en mode normal.

Tableau 4. Liste des options de l'outil perfetto disponibles en mode normal

Option Description
--config CONFIG_FILE | -c CONFIG_FILE Indique le chemin d'accès à un fichier de configuration. En mode normal, certaines configurations peuvent être encodées dans un tampon de protocole de configuration. Ce fichier doit être conforme au schéma de tampon de protocole défini dans AOSP trace_config.proto.

Sélectionnez et configurez les sources de données à l'aide du membre DataSourceConfig de TraceConfig, tel que défini dans AOSP data_source_config.proto.

--txt Ordonne à perfetto d'analyser le fichier de configuration au format pbtxt. Cette option est réservée aux tests locaux. Il est déconseillé de l'activer en production.

Sources de données prises en charge

Cette section décrit les différentes sources que perfetto utilise pour générer votre trace.

ftrace

La source de données ftrace permet à perfetto d'obtenir les événements du noyau.

Pour activer cette source, définissez ftrace_config dans DataSourceConfig.

Vous pouvez activer les événements suivants :

  • Activité de planification :

    • sched/sched_switch
    • sched/sched_wakeup
    • sched/sched_wakeup_new
    • sched/sched_process_exec
    • sched/sched_process_exit
    • sched/sched_process_fork
    • sched/sched_process_free
    • sched/sched_process_hang
    • sched/sched_process_wait
  • Événements du système de fichiers :

  • Événements atrace

Selon votre appareil, la version de l'OS ou le noyau, d'autres événements peuvent être disponibles. Pour en savoir plus, consultez les fichiers proto de configuration.

Statistiques de traitement

La source de données de statistiques de traitement vous permet d'interroger des compteurs sur le système et des processus individuels.

Pour activer cette source, définissez process_stats_config et sys_stats_config dans DataSourceConfig.

Les données générées par perfetto incluent :

Selon votre appareil, la version de l'OS et le noyau, d'autres événements peuvent être disponibles. Pour en savoir plus, reportez-vous aux protos de configuration pour sys_stats et process_stats.

heapprofd

heapprofd vous permet d'identifier les causes d'utilisation de la mémoire native.

Pour activer cette source, définissez heapprofd_config dans DataSourceConfig. Ce paramètre génère ProfilePackets, y compris les frames Java de la pile d'appels.

Pour en savoir plus sur l'utilisation de heapprofd, consultez perfetto.dev.

Autres sources

Selon votre appareil, la version de l'OS et le noyau, d'autres sources de données peuvent être disponibles. Pour en savoir plus, reportez-vous aux fichiers proto de configuration des sources de données.

Vous trouverez des informations supplémentaires sur perfetto sur perfetto.dev.