Zbieranie i wyświetlanie śladów

Ta strona zawiera 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.

Ślady Perfetto można zbierać na wiele sposobów, ale metody opisane na tej stronie obejmują 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 zużycia energii przez procesor i GPU różnią się w zależności od urządzenia.

Urządzenie Minimalne wymagania dotyczące kompilacji: szacowanie zużycia energii przez procesor Minimalne wymagania dotyczące kompilacji: szacowanie zużycia energii przez GPU
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
Pixel 10 25Q2 Nieobsługiwane
Galaxy XR (SXR2230P) Brak minimalnych wymagań dotyczących kompilacji Nieobsługiwane

Zbieranie śladów 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 rozpocznij śledzenie, tworząc na urządzeniu plik konfiguracji Perfetto. Przykładową konfigurację znajdziesz w drzewie źródłowym w pliku wattson.cfg.

    Minimalna 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 Wattsona, czyli znacznik osadzony w śladzie Perfetto, który wskazuje początek rejestrowania. Ten znacznik zwiększa dokładność pomiaru Wattsona.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. Uruchom interesujący Cię zbiór zadań.

  5. (Opcjonalnie) Włącz zdarzenie śledzenia ftrace/print, aby ustawić koniec okna Wattsona:

    # 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 śladów Perfetto za pomocą interfejsu Perfetto

Aby zbierać ślady za pomocą interfejsu Perfetto , musisz włączyć określone ustawienia Wattsona. Podczas rejestrowania nowego śladu w interfejsie Perfetto włącz przełączniki Szczegóły planowania i Częstotliwość procesora i stany bezczynności:

Szczegóły harmonogramu oraz przełączniki częstotliwości procesora i stanów bezczynności

Rysunek 1. Przełączniki Szczegóły planowania i Częstotliwość procesora i stany bezczynności.

W przypadku urządzeń Pixel 9 w ustawieniach Ftrace zaznacz pole wyboru devfreq , aby włączyć zbieranie częstotliwości urządzenia:

Włącz ograniczenie liczby wyświetleń na urządzeniu

Rysunek 2. Włącz częstotliwość urządzenia.

Wyświetlanie podziału według kolumn bocznych

Za pomocą Perfetto możesz analizować szacunki zużycia energii przez Wattsona, wybierając zakres czasu, aby wyświetlić statystyki dotyczące poszczególnych szyn, lub włączając określone konfiguracje śledzenia, aby przypisać zużycie energii na poziomie wątku, procesu lub pakietu.

Aby korzystać z Wattsona w Perfetto:

  1. Otwórz ślad w Perfetto.

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

    Wyświetlanie śladów Wattson w Perfetto

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

  2. Kliknij Wattson , aby rozwinąć i wyświetlić podział według szyn wirtualnych:

    • Wszystkie wykresy szyn są automatycznie skalowane do tej samej wartości, aby pokazać proporcje między szynami.

    • Statystyki są generowane dla każdego regionu wybranego (lub oznaczonego) przez użytkownika.

    • Tabelę statystyk można sortować, klikając dowolną nazwę kolumny.

    • Szacunkowe sumy są wyświetlane bezpośrednio pod tytułami kolumn.

    Szacunki dotyczące kolei

    Rysunek 4. Szacunki dotyczące szyn.

Wyświetlanie przypisań śladów do wątków, procesów lub pakietów

Jeśli masz włączone ślady harmonogramu i widzisz w Perfetto wycinki wątków, możesz też uzyskać przypisanie zużycia energii na poziomie wątku lub procesu:

  1. W Perfetto wybierz region wycinków wątków.
  2. Wyświetl podział według wątku, procesu lub pakietu.

Podobnie jak w przypadku statystyk śledzenia według szyn, możesz kliknąć dowolną nazwę kolumny, aby posortować dane według tej kolumny.

Analizowanie podziału według wątków

Oprócz spełnienia minimalnych wymagań dotyczących podstawowego szacowania zużycia energii musisz dodać tę konfigurację do sekcji linux.ftrace w pliku wattson.cfg, aby przypisać zużycie energii na poziomie wątku:

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
        }
    }
}

Szczegółowe informacje na poziomie wątku

Rysunek 5. Podziały według wątków.

Podział według procesów

Przypisanie na poziomie procesu wymaga process_states włączenia opcji w danych zebranych w śladzie Perfetto. Włącz to źródło danych w pliku konfiguracji wattson.cfg:

data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

Według zestawienia procesów

Rysunek 6. Zestawienie według procesów.

Podział według pakietów

Przypisanie na poziomie pakietu wymaga włączenia opcji android.packages_list w danych zebranych w śladzie Perfetto. Włącz to źródło danych w pliku konfiguracji wattson.cfg:

data_sources {
  config {
    name: "android.packages_list"
    target_buffer: 1
  }
}

Podobnie jak w przypadku przypisania na poziomie wątku i procesu, gdy wybierzesz zakres wycinków wątków, sprawdź podział według pakietów.

Zestawienie na poziomie wątku

Rysunek 7. Podział według wątków.

Szacowanie zużycia energii przez GPU

Szacowanie zużycia energii przez GPU jest obsługiwane na Pixelu 6, 6 Pro i 6a. Aby włączyć szacowanie zużycia energii przez GPU, włącz to źródło danych w pliku konfiguracji wattson.cfg:

data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "mali/gpu_power_state"
      ftrace_events: "power/gpu_frequency"

      # [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
      ftrace_events: "power/gpu_work_period"
    }
  }
}

W przypadku danego wyboru szacunki zużycia energii przez GPU w Wattsonie pojawiają się w interfejsie Perfetto na karcie Szacunki Wattsona.

Szacowanie mocy GPU

Rysunek 8. Szacowanie zużycia energii przez GPU.

Najczęstsze pytania

Oto kilka najczęstszych pytań dotyczących Wattsona.

Czy Wattson ma pasować do danych wyjściowych sprzętu do pomiaru zużycia energii w laboratorium?

W przypadku większości zbiorów zadań szacunki Wattsona są zgodne z pomiarami sprzętu do pomiaru zużycia energii w laboratorium. Nie zawsze tak jest i nie jest to celem Wattsona.

Wattson ma na celu weryfikowanie ulepszeń w zakresie zużycia energii lub wykrywanie regresji zużycia energii bez zakłóceń spowodowanych czynnikami środowiskowymi (temperaturą), różnicami między jednostkami w zakresie wycieku układu (ten sam SoC może mieć inny wyciek w zależności od jednostki basis), lub różnicami w kalibracji między sprzętem do pomiaru zużycia energii w laboratorium.

Dlaczego Wattson jest bardziej przydatny niż sprawdzanie czasu procesora lub cykli procesora?

Czas procesora i cykle nie uwzględniają różnic w zużyciu energii między częstotliwościami procesora i typami procesora (mały, średni, duży).

Podwojenie częstotliwości procesora nie zawsze powoduje podwojenie zużycia energii przez procesor ani podwojenie wydajności.

Czy Wattson jest dokładny w porównaniu z rozwiązaniami sprzętowymi?

Porównaliśmy Wattsona ze sprzętem do pomiaru zużycia energii w laboratorium w wielu przypadkach użycia dostarczonych przez różne zespoły. Średni błąd Wattsona wynosi 1 punkt procentowy, a odchylenie standardowe – 1,5 punktu procentowego. Ten poziom korelacji jest utrzymywany w testach trwających od 10 sekund do 4 godzin. Nie występuje więc narastanie ani maskowanie błędów, które zależą od czasu.

Eksperymenty z konfiguracją jądra Pixela 6

Oto kilka podstawowych eksperymentów z typowymi podziałami Wattsona na Pixelu 6:

Wattson.cfg

W tej sekcji znajdziesz typową konfigurację umożliwiającą korzystanie z 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"
          }
      }
  }