Zbieranie i wyświetlanie śladów

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).

  1. 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"
          }
       }
    }
    
  2. 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
    
  3. (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"
    
  4. Uruchom interesujące Cię zadanie.

  5. (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"
    
  6. 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 harmonogramuCzęstotliwość procesora i stany bezczynności:

Szczegóły harmonogramu oraz przełączniki częstotliwości procesora i stanów 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:

Włączanie częstotliwości na urządzeniu

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:

  1. Otwórz ślad w Perfetto.

    Jeśli Twoje urządzenie jest obsługiwane przez Wattson, ślady Wattson są automatycznie wyświetlane:

    Wyświetlanie śladów Wattson w Perfetto

    Rysunek 3. Wyświetlanie śladów Wattson w Perfetto.

  2. 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.

    Szacunki dotyczące kolei

    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:

  1. W Perfetto wybierz region wycinków wątków.
  2. 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"
        }
    }
}

Podział na poziomie wątku

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
        }
    }
}

Według podziału na procesy

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.

Podział na poziomie wątku

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"
          }
      }
  }