Auf dieser Seite finden Sie eine detaillierte Anleitung zum Erfassen von Perfetto-Traces zur Verwendung mit Wattson und zum Analysieren der resultierenden Leistungsdaten in der Perfetto-Benutzeroberfläche.
Es gibt viele Möglichkeiten, einen Perfetto-Trace zu erfassen. Die Methoden auf dieser Seite enthalten jedoch die spezifischen Anforderungen und Arbeitsabläufe zum Generieren eines mit Wattson kompatiblen Trace.
Mindestanforderungen für das Interaktionsmodell „Entwicklung“
Damit Wattson ordnungsgemäß funktioniert, müssen Sie Traces von einem Gerät mit einem aktuellen Build erfassen. Die Mindest-Build-Versionen für die Schätzung der CPU- und GPU-Leistung variieren je nach Gerät.
Gerät | Mindestanforderungen an den Build: CPU-Schätzung | Mindestanforderungen an Builds: GPU-Schätzung |
---|---|---|
Pixel Watch 2 | Keine Mindestanforderung an Builds | Nicht unterstützt |
Pixel Watch 3 | 25Q2 | Nicht unterstützt |
Pixel 6 | Keine Mindestanforderung an Builds | 25Q2 |
Pixel 9 | 25Q2 | Nicht unterstützt |
Perfetto-Trace über die Befehlszeile erfassen
In diesem Abschnitt wird ein Beispiel-Workflow zum Erfassen von Perfetto-Traces für die Verwendung mit Wattson beschrieben. Alle in den folgenden Schritten aufgeführten Befehle müssen vom Android Debug Bridge (adb)-Host aus ausgeführt werden.
Konfigurieren und starten Sie den Trace, indem Sie eine Perfetto-Konfigurationsdatei auf dem Gerät erstellen. Eine Beispielkonfiguration finden Sie im Quellbaum unter
wattson.cfg
.Ihre Konfiguration muss die folgenden Trace-Ereignisse enthalten:
# Polls CPU freq/idle state at the start of trace data_sources: { config { name: "linux.sys_stats" sys_stats_config { # Large period so polling doesn't happen continuously # Intent is just to poll once upfront cpufreq_period_ms: 100000000 cpuidle_period_ms: 100000000 } } } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "devfreq/devfreq_frequency" ftrace_events: "cpuhp/cpuhp_enter" ftrace_events: "cpuhp/cpuhp_exit" ftrace_events: "cpuhp/cpuhp_multi_enter" ftrace_events: "power/cpu_frequency" ftrace_events: "power/cpu_idle" ftrace_events: "power/suspend_resume" } } }
Wenn Sie Schätzungen zum Energieverbrauch des L3-Cache aktivieren möchten, aktivieren Sie das Ereignis
fttrace/print
:adb shell perfetto --txt -c /data/misc/perfetto-configs/wattson.cfg --background-wait -o /data/misc/perfetto-traces/trace # Optional adb shell simpleperf stat -a -e arm_dsu_0/l3d_cache/,arm_dsu_0/bus_access/ --interval 10
Optional: Legen Sie den Beginn des Wattson-Fensters fest. Das ist eine Markierung, die in den Perfetto-Trace eingebettet ist und den Beginn der Aufzeichnung angibt. Diese Markierung erhöht die Genauigkeit der Wattson-Messung.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
Führen Sie die gewünschte Arbeitslast aus.
Optional: Aktivieren Sie das
ftrace/print
-Trace-Ereignis, um das Ende des Wattson-Fensters festzulegen:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
Leeren Sie die Trace-Puffer und rufen Sie die Perfetto-Trace-Datei ab:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Perfetto-Trace mit der Perfetto-Benutzeroberfläche erfassen
Wenn Sie Traces mit der Perfetto-Benutzeroberfläche erfassen möchten, müssen Sie bestimmte Einstellungen für Wattson aktivieren. Wenn Sie in der Perfetto-Benutzeroberfläche einen neuen Trace aufzeichnen, aktivieren Sie die Ein/Aus-Schaltflächen Scheduling details (Planungsdetails) und CPU frequency and idle states (CPU-Frequenz und Leerlaufstatus):
Abbildung 1: Ein/Aus-Schaltflächen für Planungsdetails, CPU-Frequenz und Leerlaufstatus.
Wählen Sie für Pixel 9-Geräte unter den Ftrace-Einstellungen das Kästchen devfreq aus, um die Erfassung der Gerätefrequenz zu aktivieren:
Abbildung 2: Aktivieren Sie die Häufigkeit pro Gerät.
Wattson-Benutzeroberfläche verwenden
Mit Perfetto können Sie die Leistungsschätzungen von Wattson analysieren, indem Sie einen Zeitraum auswählen, um Statistiken für die einzelnen Rails aufzurufen. Sie können auch bestimmte Trace-Konfigurationen aktivieren, um den Stromverbrauch auf Thread-, Prozess- oder Paketebene zuzuordnen.
Aufschlüsselung nach Schiene ansehen
So interagieren Sie mit Wattson in Perfetto:
Öffnen Sie einen Trace in Perfetto.
Wenn Ihr Gerät von Wattson unterstützt wird, werden die Wattson-Traces automatisch aufgeführt:
Abbildung 3: Wattson-Traces in Perfetto ansehen
Klicken Sie auf Wattson, um die Aufschlüsselung nach virtueller Schiene zu maximieren und anzusehen:
Alle Rail-Diagramme werden automatisch auf denselben Wert skaliert, um das Verhältnis zwischen den Rails darzustellen.
Statistiken werden für jede vom Nutzer ausgewählte oder markierte Region generiert.
Die Statistiktabellen können durch Klicken auf einen beliebigen Spaltennamen sortiert werden.
Die geschätzten Gesamtsummen werden direkt unter den Spaltentiteln angezeigt.
Abbildung 4: Schätzungen für Bahnfahrten.
Trace nach Thread, Prozess oder Paketattributen ansehen
Wenn Sie Scheduler-Traces aktiviert haben und Thread-Slices in Perfetto sehen können, können Sie auch die Leistungs- oder Energiezuteilung auf Thread- oder Prozessebene abrufen:
- Wählen Sie in Perfetto einen Bereich mit Thread-Slices aus.
- Sehen Sie sich die Aufschlüsselung für den Thread, Prozess oder das Paket an.
Wie bei den Statistiken für einzelne Tracks können Sie auf einen beliebigen Spaltennamen klicken, um nach dieser Spalte zu sortieren.
Aufschlüsselung auf Thread-Ebene analysieren
Zusätzlich zu den Mindestanforderungen für die grundlegende Schätzung des Stromverbrauchs müssen Sie der linux.ftrace
-Konfiguration in der wattson.cfg
die folgende Konfiguration für die Zuordnung des Stromverbrauchs auf Thread-Ebene hinzufügen:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
Abbildung 5: Aufschlüsselungen auf Unterhaltungsebene.
Aufschlüsselung auf Prozessebene
Für die Zuordnung auf Prozessebene muss process_states
für die in Perfetto-Traces erfassten Daten aktiviert sein. Aktivieren Sie die folgende Datenquelle in der Konfigurationsdatei wattson.cfg
:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
Abbildung 6 Nach Prozess aufgeschlüsselt.
Aufschlüsselung auf Paketebene
Für die Attribution auf Paketebene muss android.packages_list
für die in Perfetto-Traces erfassten Daten aktiviert sein. Aktivieren Sie die folgende Datenquelle in Ihrer Konfigurationsdatei wattson.cfg
:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
Ähnlich wie bei der Zuordnung auf Thread- und Prozessebene sollten Sie sich bei der Auswahl eines Bereichs von Thread-Abschnitten die Aufschlüsselung auf Paketebene ansehen.
Abbildung 7. Aufschlüsselung auf Thread-Ebene.
Häufig gestellte Fragen
Hier findest du einige häufig gestellte Fragen zu Wattson.
Sollte die Ausgabe von Wattson mit der Hardware zur Leistungsmessung im Labor übereinstimmen?
Bei den meisten Arbeitslasten stimmt die Wattson-Schätzung mit den Hardwaremessungen des Labors überein. Das ist jedoch nicht immer der Fall und auch nicht die Absicht von Wattson.
Wattson soll Leistungsverbesserungen validieren oder Leistungsregressionen ohne Rauschen durch Umweltfaktoren (Temperatur), Unterschiede zwischen den Einheiten beim Chip-Leckstrom (dasselbe SoC kann je nach Einheit unterschiedliche Leckströme aufweisen) oder Kalibrierungsunterschiede zwischen der Hardware für die Leistungsmessung im Labor erkennen.
Warum ist Wattson nützlicher als die CPU-Zeit oder CPU-Zyklen?
CPU-Zeit und ‑Zyklen berücksichtigen nicht den Unterschied im Strom- oder Energieverbrauch zwischen CPU-Frequenzen und CPU-Typen (klein, mittel, groß).
Eine verdoppelte CPU-Frequenz führt nicht immer zu einer verdoppelten CPU-Leistung oder einer verdoppelten Leistung.
Ist Wattson im Vergleich zu Hardwarelösungen genau?
Wir haben Wattson mit Hardware zur Leistungsmessung im Labor in verschiedenen Anwendungsfällen verglichen, die von mehreren Teams bereitgestellt wurden. Der durchschnittliche Fehler in Wattson beträgt 1 Prozentpunkt und die Standardabweichung 1,5 Prozentpunkte. Dieser Grad der Korrelation bleibt bei Tests mit einer Dauer von 10 Sekunden bis zu 4 Stunden gleich. Es gibt also keine Fehler, die sich mit der Zeit häufen oder verbergen.
Kernelkonfigurationsexperimente für das Pixel 6
Hier sind einige grundlegende Tests typischer Wattson-Aufschlüsselungen mit dem Pixel 6:
Wattson.cfg
In diesem Abschnitt wird die typische Konfiguration für die Aktivierung von Wattson in Perfetto beschrieben:
write_into_file: true
flush_period_ms: 30000
file_write_period_ms: 30000
buffers: {
size_kb: 2048
fill_policy: RING_BUFFER
}
buffers: {
size_kb: 200000
fill_policy: RING_BUFFER
}
# Needed for process level power attribution
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 0
process_stats_config {
scan_all_processes_on_start: true
}
}
}
# Needed for package level power attribution
data_sources: {
config {
name: "android.packages_list"
target_buffer: 0
}
}
# Needed for determining CPU freq/idle initial state
data_sources: {
config {
name: "linux.sys_stats"
sys_stats_config {
cpufreq_period_ms: 100000000
cpuidle_period_ms: 100000000
}
}
}
# Needed for estimating power and thread level power attribution
data_sources: {
config {
name: "linux.ftrace"
target_buffer: 1
ftrace_config {
# Minimum data sources for estimating power
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "cpuhp/cpuhp_enter"
ftrace_events: "cpuhp/cpuhp_exit"
ftrace_events: "cpuhp/cpuhp_multi_enter"
ftrace_events: "devfreq/devfreq_frequency"
# Needed for Wattson start/stop markers
ftrace_events: "ftrace/print"
# Needed for thread level power attribution
ftrace_events: "sched/sched_switch"
# Needed for process level power attribution
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
}
}
}