Cette page fournit des instructions détaillées pour collecter des traces Perfetto à utiliser avec Wattson et pour analyser les données de puissance résultantes dans l'UI Perfetto.
Bien qu'il existe de nombreuses façons de collecter une trace Perfetto, les méthodes présentées sur cette page incluent les exigences et les workflows spécifiques pour générer une trace compatible avec Wattson.
Exigences minimales concernant la version
Pour vérifier que Wattson dispose des métadonnées requises pour fonctionner correctement, vous devez collecter des traces à partir d'un appareil exécutant une version récente. Les versions minimales de compilation pour l'estimation de la puissance du processeur et du GPU varient selon l'appareil.
Appareil | Exigences minimales concernant la compilation : estimation du processeur | Configuration minimale requise : estimation du GPU |
---|---|---|
Pixel Watch 2 | Aucune version minimale requise | Non disponible |
Pixel Watch 3 | 25Q2 | Non disponible |
Pixel 6 | Aucune version minimale requise | 25Q2 |
Pixel 9 | 25Q2 | Non disponible |
Collecter une trace Perfetto à partir de la ligne de commande
Cette section présente un exemple de workflow pour collecter des traces Perfetto à utiliser avec Wattson. Toutes les commandes listées dans les étapes suivantes doivent être émises à partir de l'hôte Android Debug Bridge (adb).
Configurez et démarrez le traçage en créant un fichier de configuration Perfetto sur l'appareil. Vous trouverez un exemple de configuration à l'adresse
wattson.cfg
dans l'arborescence source.Votre configuration doit inclure les événements de trace suivants :
# 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" } } }
Pour activer les estimations de la consommation d'énergie du cache L3, activez l'événement
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
(Facultatif) Définissez le début de la fenêtre Wattson, un repère intégré à la trace Perfetto qui indique le début de l'enregistrement. Ce marqueur améliore la précision de la mesure Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
Exécutez la charge de travail qui vous intéresse.
(Facultatif) Activez l'événement de trace
ftrace/print
pour définir la fin de la fenêtre Wattson :# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
Videz les tampons de trace et récupérez le fichier de trace Perfetto :
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Collecter une trace Perfetto à l'aide de l'UI Perfetto
Pour collecter des traces à l'aide de l'interface utilisateur Perfetto, vous devez activer des paramètres spécifiques pour Wattson. Lorsque vous enregistrez une nouvelle trace dans l'interface utilisateur Perfetto, activez les options Détails de la planification et Fréquence du processeur et états inactifs :
Figure 1 : Boutons bascule pour les détails de planification, la fréquence du processeur et les états d'inactivité.
Pour les appareils Pixel 9, sous les paramètres Ftrace, cochez la case devfreq pour activer la collecte de la fréquence de l'appareil :
Figure 2. Activez la fréquence par appareil.
Utiliser l'UI Wattson
Avec Perfetto, analysez les estimations de puissance Wattson en sélectionnant une plage de temps pour afficher les statistiques par rail, ou activez des configurations de trace spécifiques pour attribuer la consommation d'énergie au niveau du thread, du processus ou du package.
Afficher la répartition par rail
Pour interagir avec Wattson dans Perfetto :
Ouvrez une trace dans Perfetto.
Si votre appareil est compatible avec Wattson, les traces Wattson sont automatiquement listées :
Figure 3. Affichez les traces Wattson dans Perfetto.
Cliquez sur Wattson pour développer la section et afficher la répartition par rail virtuel :
Tous les graphiques de rails sont automatiquement mis à l'échelle sur la même valeur pour afficher la proportion entre les rails.
Des statistiques sont générées pour chaque région sélectionnée (ou marquée) par l'utilisateur.
Vous pouvez trier le tableau de statistiques en cliquant sur le nom d'une colonne.
Les totaux des estimations sont affichés directement sous les titres des colonnes.
Figure 4. Estimations pour les trajets en train.
Afficher les attributions de trace par thread, processus ou package
Si vous avez activé les traces du planificateur et que vous pouvez voir les tranches de threads dans Perfetto, vous pouvez également obtenir l'attribution de la puissance ou de l'énergie au niveau du thread ou du processus :
- Dans Perfetto, sélectionnez une région de tranches de threads.
- Affichez la répartition du thread, du processus ou du package.
Comme pour les statistiques sur les pistes par rail, vous pouvez cliquer sur n'importe quel nom de colonne pour trier les données en fonction de cette colonne.
Analyser la répartition au niveau des threads
En plus des exigences minimales pour l'estimation de base de la puissance, vous devez ajouter la configuration suivante à la section linux.ftrace
du fichier wattson.cfg
pour l'attribution de la puissance au niveau de chaque thread :
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
Figure 5. Répartition au niveau du fil de discussion.
Répartition au niveau du processus
L'attribution au niveau du processus nécessite l'activation de process_states
sur les données collectées dans la trace Perfetto. Activez la source de données suivante dans votre fichier de configuration wattson.cfg
:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
Figure 6. Par répartition du processus.
Répartition au niveau du package
L'attribution au niveau du package nécessite que android.packages_list
soit activé sur les données collectées dans la trace Perfetto. Activez la source de données suivante dans votre fichier de configuration wattson.cfg
:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
Comme pour l'attribution au niveau du thread et du processus, lorsque vous sélectionnez une plage de tranches de thread, examinez la répartition au niveau du package.
Figure 7. Répartition au niveau du fil de discussion.
Questions fréquentes
Voici quelques questions fréquentes sur Wattson.
Wattson est-il censé correspondre à la sortie du matériel de mesure de la puissance en laboratoire ?
Pour la plupart des charges de travail, l'estimation Wattson correspond aux mesures matérielles de l'alimentation du laboratoire. Toutefois, ce n'est pas toujours le cas et ce n'est pas l'objectif de Wattson.
Wattson est conçu pour valider les améliorations de la consommation électrique ou détecter les régressions de la consommation électrique sans bruit provenant de facteurs environnementaux (température), des variations d'unité à unité dans les fuites de puce (le même SoC peut avoir des fuites différentes par unité) ou des différences de calibration entre les équipements de mesure de la consommation électrique en laboratoire.
En quoi Wattson est-il plus utile que le temps de processeur ou les cycles de processeur ?
Le temps et les cycles de processeur ne tiennent pas compte de la différence de consommation d'énergie entre les fréquences et les types de processeur (petit, moyen ou grand).
Une fréquence de processeur doublée n'entraîne pas toujours une puissance ou des performances doublées.
Wattson est-il précis par rapport aux solutions matérielles ?
Nous avons comparé Wattson à du matériel de mesure de la puissance en laboratoire dans plusieurs cas d'utilisation fournis par différentes équipes. L'erreur moyenne dans Wattson est de 1 point de pourcentage et l'écart-type est de 1,5 point de pourcentage. Ce niveau de corrélation est maintenu pour les tests de 10 secondes à ceux de 4 heures. Il n'y a donc pas d'augmentation ni de masquage des erreurs en fonction du temps.
Expériences de configuration du noyau Pixel 6
Voici quelques expériences de base de répartition Wattson typiques utilisant le Pixel 6 :
Wattson.cfg
Cette section fournit la configuration typique pour activer Wattson sur Perfetto :
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"
}
}
}