Perfetto

perfetto ist ein Tool, mit dem Sie Leistungsinformationen von Android-Geräten über die Android Debug Bridge (ADB) erfassen können. Rufen Sie das perfetto-Tool mit dem Befehl adb shell perfetto ... auf. perfetto verwendet verschiedene Quellen, um Leistungs-Traces von Ihrem Gerät zu erfassen, z. B.:

  • ftrace für Informationen vom Kernel
  • atrace für Anmerkungen zum Nutzerbereich in Diensten und Apps
  • heapprofd für Informationen zur Nutzung des nativen Arbeitsspeichers von Diensten und Apps

Auf dieser Seite wird beschrieben, wie Sie perfetto aufrufen und so konfigurieren, dass die gewünschte Ausgabe generiert wird. Weitere Informationen finden Sie in der Dokumentation zu perfetto.

Syntax

In diesem Abschnitt wird beschrieben, wie Sie ADB verwenden, um perfetto für verschiedene Modi aufzurufen und einen Trace zu generieren.

Auswahl der Datenquelle

perfetto enthält die folgenden zwei Modi, die die Datenquellen bestimmen, die zum Aufzeichnen des Trace verwendet werden:

  • Heller Modus: Sie können nur einen Teil der Datenquellen auswählen, insbesondere atrace und ftrace. Dieser Modus bietet jedoch eine ähnliche Schnittstelle wie systrace.
  • Normaler Modus: Die Konfiguration erfolgt in einem Protokollpuffer. Sie können dann mehr Funktionen von perfetto nutzen, wenn Sie andere Datenquellen als atrace und ftrace verwenden.

Allgemeine Optionen

In der folgenden Tabelle sind die verfügbaren Optionen aufgeführt, wenn perfetto in einem der beiden Modi verwendet wird:

Tabelle 1 Liste der verfügbaren allgemeinen Perfetto-Tools.

Option Beschreibung
--background |
-d
perfetto beendet sofort die Befehlszeile und fährt mit der Aufzeichnung des Trace im Hintergrund fort.
--background-wait | -D Wie --background, wird jedoch mit einer Wartezeit von bis zu 30 Sekunden beendet, bis alle Datenquellen gestartet sind. Der Exit-Code ist null, wenn eine erfolgreiche Bestätigung empfangen wird, und andernfalls nicht null (Fehler oder Zeitlimit).
--alert-id ID der Benachrichtigung, die dieses Trace ausgelöst hat.
--config-id ID der Triggerkonfiguration.
--config-uid UID der App, über die die Konfiguration registriert wurde.
--subscription-id ID des Abos, das dieses Trace ausgelöst hat.
--out OUT_FILE |
-o OUT_FILE

Gibt den gewünschten Pfad zur Trace-Ausgabedatei oder - für stdout an. perfetto schreibt die Ausgabe in die Datei, die in den vorherigen Flags beschrieben wurde. Das Ausgabeformat wird mit dem in AOSP trace.proto definierten Format kompiliert.

Hinweis: Sie müssen den vollständigen Pfadnamen der Ausgabedatei angeben. Normalerweise sollten die Dateien in den Ordner /data/misc/perfetto-traces geschrieben werden.

--upload Übergibt den Trace nach Abschluss an das in der IncidentReportConfig-Nachricht in der Proto-Trace-Konfiguration angegebene Paket.
--no-guardrails Deaktiviert den Schutz vor übermäßiger Ressourcennutzung, wenn das Flag --upload während des Tests aktiviert wird.
--reset-guardrails Setzt den dauerhaften Status der Schutzmaßnahmen und Exits zu Testzwecken zurück.
--rsave-for-bugreport Wird ein Trace mit bugreport_score > 0 ausgeführt, wird der Trace in einer Datei gespeichert. Gibt den Pfad aus, wenn der Vorgang abgeschlossen ist.
--query Fragt den Dienststatus ab und gibt ihn als menschenlesbaren Text aus.
--query-raw Ähnlich wie --query, gibt aber proto-codierte Rohbyte von tracing_service_state.proto. aus
--help | -h Gibt Hilfetext für das perfetto-Tool aus.

Heller Modus

Die allgemeine Syntax für die Verwendung von perfetto im hellen Modus lautet:

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

In der folgenden Tabelle sind die verfügbaren Optionen aufgeführt, wenn perfetto im hellen Modus verwendet wird:

Tabelle 2 Liste der verfügbaren perfetto-Tool-Optionen im hellen Modus.

Option Beschreibung
--time TIME[s|m|h] |
-t TIME[s|m|h]
Gibt die Trace-Dauer in Sekunden, Minuten oder Stunden an. Zum Beispiel gibt --time 1m eine Trace-Dauer von 1 Minute an. Die Standarddauer beträgt 10 Sekunden.
--buffer SIZE[mb|gb] |
-b SIZE[mb|gb]
Gibt die Größe des Ringpuffers in Megabyte (MB) oder Gigabyte (GB) an. Der Standardparameter ist --buffer 32mb.
--size SIZE[mb|gb] |
-s SIZE[mb|gb]
Gibt die maximale Dateigröße in Megabyte (MB) oder Gigabyte (GB) an. Standardmäßig verwendet perfetto nur Ringzwischenspeicher im Arbeitsspeicher.
--app | -a Name der Android-App (atrace)

Auf diese Optionen folgt eine Liste der Ereignisspezifizierer:

Tabelle 3 Liste der Ereignisspezifizierer für den hellen Modus.

Veranstaltung Beschreibung
ATRACE_CAT Gibt die atrace-Kategorien an, für die Sie ein Trace aufzeichnen möchten. Der folgende Befehl verfolgt beispielsweise den Fenstermanager mit atrace:
    adb shell perfetto --out FILE wm
    

Informationen zum Erfassen weiterer Kategorien finden Sie in dieser Liste der atrace-Kategorien.

FTRACE_GROUP/FTRACE_NAME Gibt die ftrace-Ereignisse an, für die Sie ein Trace aufzeichnen möchten. Der folgende Befehl verfolgt beispielsweise sched/sched_switch-Ereignisse:
      adb shell perfetto --out FILE sched/sched_switch
      

Normaler Modus

Die allgemeine Syntax für die Verwendung von perfetto im normalen Modus sieht so aus:

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

In der folgenden Tabelle sind die verfügbaren Optionen aufgeführt, wenn perfetto im Normalmodus verwendet wird:

Tabelle 4 Liste der verfügbaren perfetto-Tool-Optionen im normalen Modus.

Option Beschreibung
--config CONFIG_FILE | -c CONFIG_FILE Gibt den Pfad zu einer Konfigurationsdatei an. Im normalen Modus können einige Konfigurationen in einem Konfigurationsprotokollpuffer codiert sein. Diese Datei muss dem Protokollpufferschema entsprechen, das in AOSP trace_config.proto definiert ist.

Wählen und konfigurieren Sie die Datenquellen mit dem DataSourceConfig-Mitglied der TraceConfig, wie in AOSP data_source_config.proto definiert.

--txt Weist perfetto an, die Konfigurationsdatei als pbtxt zu parsen. Dieses Flag ist nur für lokale Tests vorgesehen und sollte nicht für die Produktion aktiviert werden.

Unterstützte Datenquellen

In diesem Abschnitt werden die verschiedenen Quellen beschrieben, die perfetto zum Generieren des Trace verwendet.

Ftrace

Mit der Datenquelle ftrace kann perfetto Ereignisse aus dem Kernel abrufen.

Aktivieren Sie diese Quelle, indem Sie ftrace_config in der DataSourceConfig festlegen.

Folgende Ereignisse können aktiviert werden:

  • Aktivität planen:

    • 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
  • Dateisystemereignisse:

  • atrace Ereignisse

Je nach Gerät, Betriebssystemversion oder Kernel sind möglicherweise weitere Ereignisse verfügbar. Weitere Informationen finden Sie unter config protos.

Prozessstatistiken

Mit der Datenquelle für Prozessstatistiken können Sie abgefragte Zähler zum System und zu einzelnen Prozessen abrufen.

Aktivieren Sie diese Quelle, indem Sie process_stats_config und sys_stats_config in der DataSourceConfig festlegen.

Zu den von perfetto generierten Daten gehören:

  • Systemweit

    • /proc/meminfo
    • /proc/vmstat
    • /proc/stat
  • Pro Prozess

    • /proc/\<pid\>/status
    • /proc/\<pid\>/oom_score_adj

Je nach Gerät, Betriebssystemversion und Kernel sind möglicherweise weitere Ereignisse verfügbar. Weitere Informationen finden Sie in den Konfigurationsprotos für sys_stats und process_stats.

heapprofd

Mit heapprofd können Sie die Ursachen der nativen Arbeitsspeichernutzung ermitteln.

Aktivieren Sie diese Quelle, indem Sie heapprofd_config in der DataSourceConfig festlegen. Mit dieser Einstellung wird ProfilePackets erstellt, einschließlich der Java-Frames des Aufrufstacks.

Weitere Informationen zur Verwendung von heapprofd finden Sie unter perfetto.dev.

Andere Quellen

Je nach Gerät, Betriebssystemversion und Kernel sind möglicherweise weitere Datenquellen verfügbar. Weitere Informationen finden Sie unter Konfigurationsprotokolle für Datenquellen.

Weitere Informationen zu perfetto finden Sie unter perfetto.dev.