Na tej stronie znajdziesz szczegółowe instrukcje dotyczące zbierania śladów Perfetto do użycia z Wattsonem oraz analizowania uzyskanych danych o zużyciu energii w interfejsie Perfetto.
Ślad Perfetto można uzyskać na wiele sposobów, ale metody opisane na tej stronie zawierają konkretne wymagania i procesy generowania śladu zgodnego z Wattsonem.
.Minimalne wymagania dotyczące kompilacji
Aby sprawdzić, czy Wattson ma wymagane metadane do prawidłowego działania, musisz zebrać ślady z urządzenia z najnowszą kompilacją. Minimalne wersje kompilacji do szacowania mocy procesora i GPU różnią się w zależności od urządzenia.
Urządzenie | Minimalne wymagania dotyczące kompilacji: szacowanie wykorzystania procesora | Minimalne wymagania dotyczące kompilacji: szacowanie wykorzystania procesora graficznego |
---|---|---|
Pixel Watch 2 | Brak minimalnych wymagań dotyczących kompilacji | Nieobsługiwane |
Pixel Watch 3 | 25Q2 | Nieobsługiwane |
Pixel 6 | Brak minimalnych wymagań dotyczących kompilacji | 25Q2 |
Pixel 9 | 25Q2 | Nieobsługiwane |
Zbieranie śladu Perfetto z wiersza poleceń
W tej sekcji znajdziesz przykładowy proces zbierania śladów Perfetto do użycia z Wattsonem. Wszystkie polecenia wymienione w kolejnych krokach należy wydać z hosta Android Debug Bridge (adb).
Skonfiguruj i uruchom śledzenie, tworząc na urządzeniu plik konfiguracji Perfetto. Przykładową konfigurację znajdziesz w drzewie źródłowym w folderze
wattson.cfg
.Konfiguracja musi obejmować te zdarzenia śledzenia:
# 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" } } }
Aby włączyć szacowanie zużycia energii przez pamięć podręczną L3, włącz zdarzenie
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
(Opcjonalnie) Ustaw początek okna Wattson, czyli znacznika osadzonego w śladzie Perfetto, który wskazuje początek nagrywania. Ten znacznik zwiększa dokładność pomiaru Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
Uruchom interesujące Cię zadanie.
(Opcjonalnie) Włącz zdarzenie śledzenia
ftrace/print
, aby ustawić koniec okna Wattson:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
Opróżnij bufory śledzenia i pobierz plik śledzenia Perfetto:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Zbieranie śladu Perfetto za pomocą interfejsu Perfetto
Aby zbierać ślady za pomocą Perfetto UI, musisz włączyć określone ustawienia Wattsona. Podczas rejestrowania nowego śladu w interfejsie Perfetto włącz przełączniki Szczegóły harmonogramu i Częstotliwość procesora i stany bezczynności:
Rysunek 1. Szczegóły harmonogramu oraz przełączniki częstotliwości procesora i stanów bezczynności.
W przypadku urządzeń Pixel 9 w sekcji ustawień Ftrace zaznacz pole wyboru devfreq, aby włączyć zbieranie danych o częstotliwości urządzenia:
Rysunek 2. Włącz częstotliwość na urządzeniu.
Korzystanie z interfejsu Wattson
Za pomocą Perfetto możesz analizować szacunki mocy Wattson, wybierając zakres czasu, aby wyświetlić statystyki dotyczące poszczególnych szyn, lub włączyć określone konfiguracje śledzenia, aby przypisać zużycie energii na poziomie wątku, procesu lub pakietu.
Wyświetlanie podziału według szyny
Aby korzystać z Wattsona w Perfetto:
Otwórz ślad w Perfetto.
Jeśli Twoje urządzenie jest obsługiwane przez Wattson, ślady Wattson są automatycznie wyświetlane:
Rysunek 3. Wyświetlanie śladów Wattson w Perfetto.
Kliknij Wattson, aby rozwinąć i wyświetlić zestawienie według wirtualnej szyny:
Wszystkie wykresy są automatycznie skalowane do tej samej wartości, aby pokazać proporcje między nimi.
Statystyki są generowane dla każdego regionu wybranego (lub oznaczonego) przez użytkownika.
Tabelę statystyk można posortować, klikając dowolną nazwę kolumny.
Szacunkowe sumy są wyświetlane bezpośrednio pod tytułami kolumn.
Rysunek 4. Szacunkowe dane dotyczące kolei.
Wyświetlanie logu czasu według wątku, procesu lub atrybucji pakietu
Jeśli masz włączone ślady harmonogramu i widzisz w Perfetto wycinki wątków, możesz też uzyskać atrybucję mocy lub energii na poziomie wątku lub procesu:
- W Perfetto wybierz region wycinków wątków.
- Wyświetl podział wątku, procesu lub pakietu.
Podobnie jak w przypadku statystyk ścieżek możesz kliknąć dowolną nazwę kolumny, aby posortować dane według tej kolumny.
Analizowanie podziału na poziomie wątku
Oprócz minimalnych wymagań dotyczących podstawowego szacowania zużycia energii musisz dodać do sekcji linux.ftrace
w pliku wattson.cfg
tę konfigurację, aby przypisywać zużycie energii do poszczególnych wątków:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
Rysunek 5. Szczegółowe informacje na poziomie wątku.
Podział na poziomie procesu
Atrybucja na poziomie procesu wymaga włączenia process_states
w przypadku danych zebranych w śladzie Perfetto. Włącz to źródło danych w pliku konfiguracyjnym wattson.cfg
:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
Rysunek 6. według podziału na procesy.
Zestawienie na poziomie pakietu
Atrybucja na poziomie pakietu wymaga włączenia android.packages_list
w przypadku danych zebranych w śladzie Perfetto. Włącz to źródło danych w pliku konfiguracyjnym wattson.cfg
:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
Podobnie jak w przypadku atrybucji na poziomie wątku i procesu, gdy wybierzesz zakres wycinków wątków, sprawdź podział na poziomie pakietu.
Rysunek 7. Podział na poziomie wątku.
Najczęstsze pytania
Oto odpowiedzi na najczęstsze pytania dotyczące Wattsona.
Czy Wattson powinien odpowiadać wynikom pomiarów mocy uzyskiwanym przez sprzęt laboratoryjny?
W przypadku większości zbiorów zadań szacunki Wattson są zgodne z pomiarami sprzętu laboratoryjnego. Nie zawsze tak jest i nie jest to zamierzone działanie Wattsona.
Wattson ma na celu weryfikację poprawy zużycia energii lub wykrywanie regresji zużycia energii bez zakłóceń spowodowanych czynnikami środowiskowymi (temperaturą), różnicami między poszczególnymi urządzeniami w zakresie wycieku prądu z układu (ten sam układ SoC może mieć różny wyciek prądu w poszczególnych urządzeniach) lub różnicami w kalibracji między sprzętem laboratoryjnym do pomiaru mocy.
Dlaczego Wattson jest bardziej przydatny niż sprawdzanie czasu procesora lub cykli procesora?
Czas procesora i cykle nie uwzględniają różnicy w mocy ani zużyciu energii między częstotliwościami procesora a typami procesora (mały, średni i duży).
Podwojenie częstotliwości procesora nie zawsze oznacza podwojenie jego mocy ani wydajności.
Czy Wattson jest dokładny w porównaniu z rozwiązaniami sprzętowymi?
Porównaliśmy Wattsona z laboratoryjnym sprzętem do pomiaru mocy w wielu przypadkach użycia dostarczonych przez różne zespoły. Średni błąd w przypadku Wattsona wynosi 1 punkt procentowy, a odchylenie standardowe – 1,5 punktu procentowego. Ten poziom korelacji jest utrzymywany w przypadku testów trwających od 10 sekund do 4 godzin. Nie ma więc żadnych błędów ani maskowania błędów, które zależą od czasu.
Eksperymenty z konfiguracją jądra Pixela 6
Oto kilka podstawowych eksperymentów z typami podziału danych w Wattson na przykładzie Pixela 6:
Wattson.cfg
W tej sekcji znajdziesz typową konfigurację włączania Wattsona w 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"
}
}
}