Zbieranie danych o skuteczności

Usługa Watchdog rejestruje dane o wydajności wejścia/wyjścia od wczesnej inicjalizacji podczas uruchamiania systemu. Usługa natywna umieszcza zebrane dane o wydajności w raporcie o błędach. Dostawcy mogą wysyłać do usługi natywnej zapytania za pomocą polecenia dumpsys, aby zrzucać zebrane dane lub rozpocząć niestandardową sesję zbierania danych na potrzeby debugowania.

Częstotliwość zbierania danych

Częstotliwość zbierania danych o skuteczności zależy od typu kompilacji.

  • W przypadku kompilacji userdebug lub eng usługa Watchdog zbiera dane o wydajności raz na sekundę podczas uruchamiania systemu i raz na minutę po zakończeniu uruchamiania.
  • W przypadku kompilacji użytkownika usługa Watchdog zbiera dane o wydajności co 20 sekund podczas uruchamiania systemu i co 2 minuty po zakończeniu uruchamiania.

Zdarzenia zbierania danych

Profilowanie oparte na próbkach jest przeprowadzane podczas różnych zdarzeń systemowych (takich jak uruchomienie systemu, wybudzenie systemu i przełączanie użytkowników) oraz w ciągu ostatnich N minut.

  • Zdarzenia z ostatnich N minut przed wygenerowaniem raportu o błędzie: generowane w 30-minutowym oknie przesuwnym.
  • Zdarzenia czasu rozruchu: generowane po uruchomieniu.
  • Zdarzenia przełączania użytkownika: generowane po zainicjowaniu przełączenia użytkownika.
  • Zdarzenia zbierania niestandardowego: można określić okres odpytywania i maksymalny czas trwania oraz filtrować według pakietów.

Zrzucanie danych o skuteczności

Gdy zostanie utworzony raport o błędzie, natywna usługa Watchdog zapisuje w nim zebrane dane o wydajności. Dostawcy mogą wysyłać zapytania do usługi natywnej za pomocą poniższego polecenia dumpsys, aby zrzucać zebrane dane o wydajności. Szczegółowe informacje o raporcie znajdziesz w sekcji Interpretowanie raportu danych o skuteczności.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txt

Zbieranie danych o skuteczności na potrzeby debugowania

Dostawcy mogą używać natywnej usługi Watchdog do niestandardowego zbierania danych o skuteczności na potrzeby debugowania. Aby na przykład poznać wykorzystanie wejścia/wyjścia przez aplikację lub usługę, dostawcy mogą przeprowadzić niestandardowe zbieranie danych o wydajności, które profiluje wykorzystanie wejścia/wyjścia przez określoną listę pakietów lub cały system.

Rozpoczynanie sesji kolekcji niestandardowej

Poniżej znajdziesz polecenie, które umożliwia rozpoczęcie sesji zbierania niestandardowych danych o wydajności:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf Rozpoczyna niestandardową sesję zbierania danych o wydajności.
  • --interval <seconds> Określa interwał profilowania. Domyślnie interwał wynosi 30 sekund.
  • --max_duration <seconds> Określa maksymalny czas trwania sesji zbierania niestandardowych danych o skuteczności. Jeśli sesja nie zostanie zatrzymana ręcznie, po upływie tego czasu zostanie zatrzymana, a zebrane dane zostaną odrzucone. Domyślny maksymalny czas trwania to 30 minut.
  • --filter_packages <package_name>,<package_name>... Określa rozdzielaną przecinkami listę nazw pakietów do profilowania. Jeśli podasz te informacje, zbieranie danych o skuteczności będzie ograniczone do tych pakietów. W przeciwnym razie zbieranie danych o wydajności będzie odbywać się w przypadku wszystkich pakietów w systemie.

Na przykład poniższe polecenie rozpoczyna zbieranie niestandardowych danych o wydajności z interwałem profilowania wynoszącym 10 sekund, maksymalnym czasem zbierania wynoszącym 1 godzinę i ogranicza profilowanie do pakietów com.google.android.car.kitchensinkcom.google.android.apps.maps.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf --interval 10 --max_duration 3600 --filter_packages com.google.android.car.kitchensink,com.google.android.apps.maps

Zatrzymywanie i zrzucanie sesji zbierania niestandardowego

Po zarejestrowaniu wykorzystania wejścia/wyjścia przez interesującą aplikację lub usługę dostawcy powinni zakończyć sesję zbierania niestandardowych danych o wydajności, aby zrzucić zebrane dane. To polecenie zatrzymuje zbieranie niestandardowych danych o wydajności i zrzuca zebrane dane do /tmp/carwatchdog_dump.txt:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --stop-perf > /tmp/carwatchdog_custom_dump.txt

Pomoc dotycząca dumpsys

Aby uzyskać pomoc dotyczącą dumpsys:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --help

Zrzut do formatu proto

Opcjonalnie dane dumpsys można zrzucać w formacie proto:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --proto

Interpretowanie raportu danych o skuteczności

Więcej informacji znajdziesz w tym przykładowym raporcie danych o skuteczności:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default

---------------------------------
WatchdogPerfService report:
---------------------------------
Boot-time collection information:
=================================
Event polling interval: 1 second

Wake-up collection information:
===============================
Event polling interval: 1 second

User-switch collection information:
===================================
Event polling interval: 1 second

Periodic collection information:
================================
Event polling interval: 60 seconds
---------------------------------------------------------------------------
Boot-time performance report:
=================================
No collection recorded
---------------------------------------------------------------------------
Wake-up performance report:
===========================
No collection recorded
---------------------------------------------------------------------------
User-switch events performance report:
======================================
No collection recorded
---------------------------------------------------------------------------
Last N minutes performance report:
======================================
Collection duration: 10800 seconds
Number of collections: 181

Collection 0: <Mon Oct  2 18:36:06 2023 GMT>
=============================================
Total CPU time (ms): 473210
Total CPU cycles: 39553152000
Total idle CPU time (ms)/percent: 435860 / 92.11%
CPU I/O wait time (ms)/percent: 0 / 0.00%
Number of context switches: 13723415093
Number of I/O blocked processes/percent: 0 / 0.00%

Top N CPU Times:
----------------
Android User ID, Package Name, CPU Time (ms), Percentage of total CPU time, CPU Cycles
    Command, CPU Time (ms), Percentage of UID's CPU Time, CPU Cycles
10, com.google.android.carassistant, 13357, 2.82%, 16409088000
    assistant:interactor, 13360, 100.02%, 16409088000
0, system, 9097, 1.92%, 9640512000
    sensors@1.0-ser, 3790, 41.66%, 3773184000
    system_server, 2760, 30.34%, 3135936000
    com.android.car, 1150, 12.64%, 1099584000
    binder:621_4, 1000, 10.99%, 1281024000
    surfaceflinger, 230, 2.53%, 245376000
0, audioserver, 4383, 0.93%, 4597248000
    Main, 2690, 61.37%, 2980416000
    binder:916_2, 950, 21.67%, 925056000
    audioserver, 720, 16.43%, 691776000
0, root, 4357, 0.92%, 3727872000
    irq/311-iam2068, 2630, 60.36%, 2471616000
    irq/26-90b6400., 370, 8.49%, 561024000
    kworker/u16:4-bwmon_wq, 290, 6.66%, 48960000
    kworker/u16:1-memlat_wq, 270, 6.20%, 0
    ipcdaemon, 220, 5.05%, 218304000
10, com.google.android.apps.geo.automotive.adas, 1509, 0.32%, 1756416000
    adas:publishing, 1490, 98.74%, 1735680000
    as:clientparams, 10, 0.66%, 20736000
0, com.android.vending, 796, 0.17%, 765504000
    android.vending, 790, 99.25%, 765504000
0, shared:com.google.uid.shared, 581, 0.12%, 481152000
    google.android.gms, 340, 58.52%, 237312000
    .gms.persistent, 190, 32.70%, 184512000
    process.gservices, 50, 8.61%, 59328000
0, gps, 507, 0.11%, 659136000
    binder:920_2, 500, 98.62%, 659136000
10, com.android.vending, 489, 0.10%, 372288000
    android.vending, 480, 98.16%, 372288000
0, shared:android.uid.systemui, 438, 0.09%, 449856000
    android.systemui, 440, 100.46%, 449856000

Top N Storage I/O Reads:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 56123392, 81.95%, 1, 100.00%, 0, 0.00%, 0, 0.00%
0, system, 12333056, 18.01%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N Storage I/O Writes:
-------------------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 45056, 4.01%, 0, 0.00%
0, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 36864, 3.28%, 2, 4.76%
0, logd, 24576, 40.00%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, root, 20480, 33.33%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, system, 16384, 26.67%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N I/O waiting UIDs:
-----------------------
Android User ID, Package Name, Number of owned tasks waiting for I/O, Percentage of owned tasks waiting for I/O
    Command, Number of I/O waiting tasks, Percentage of UID's tasks waiting for I/O
0, root, 2, 0.39%
    dp_hdcp2p2, 1, 50.00%
    hdcp_2x, 1, 50.00%

Top N major page faults:
------------------------
Android User ID, Package Name, Number of major page faults, Percentage of total major page faults
    Command, Number of major page faults, Percentage of UID's major page faults
0, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
10, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
0, shared:com.google.uid.shared, 4, 1.88%
    .gms.persistent, 4, 100.00%
10, shared:com.google.uid.shared, 1, 0.47%
    .gms.persistent, 1, 100.00%
Number of major page faults since last collection: 213
Percentage of change in major page faults since last collection: 0.00%

Podczas rejestrowania raportu o błędach, uruchamiania polecenia dumpsys Watchdog bez argumentów lub zatrzymywania niestandardowej sesji zbierania danych natywna usługa Watchdog zrzuca raport o danych dotyczących wydajności podobny do powyższego.

Raport zawiera dane zebrane podczas uruchamiania systemu i w ciągu ostatnich N minut przed wygenerowaniem raportu.

Produkt Opis
Informacje o zbieraniu danych podczas uruchamiania Zawiera informacje o sesji zbierania danych o wydajności podczas rozruchu.
Informacje o zbieraniu danych po wybudzeniu Zawiera informacje o sesji zbierania danych o wydajności wybudzania, gdy system wybudza się z trybu zawieszenia.
Informacje o zbieraniu danych po przełączeniu użytkownika Zawiera informacje o sesji zbierania danych o wydajności przełączania użytkowników, gdy następuje przełączenie użytkownika.
Informacje o okresowym zbieraniu danych Zawiera informacje o sesji okresowego zbierania danych o skuteczności, która rozpoczyna się po zakończeniu rozruchu.
Raport skuteczności podczas uruchamiania Zawiera dane o wydajności zebrane podczas uruchamiania systemu. Dane te pozostają w pamięci do momentu wyłączenia systemu, więc są uwzględniane we wszystkich raportach.
Raport skuteczności wybudzania Zawiera dane o skuteczności zebrane podczas wybudzania. Te dane są przechowywane w pamięci do momentu wyłączenia systemu, więc są zapisywane we wszystkich raportach.
Raport skuteczności przełączania użytkowników Zawiera dane o wydajności zebrane podczas przełączania użytkowników. Dane te pozostają w pamięci do momentu wyłączenia systemu, dlatego są uwzględniane we wszystkich raportach.
Raport skuteczności operacji wejścia/wyjścia z ostatnich N minut Zawiera dane o skuteczności zebrane (podczas okresowej sesji zbierania danych) w ciągu ostatnich N minut przed wygenerowaniem raportu.
Czas trwania zbierania Łączny czas zbierania danych o skuteczności.
Liczba kolekcji Łączna liczba kolekcji zgłoszonych w jednym raporcie.

Każda kolekcja podana w raporcie może zawierać wszystkie lub niektóre z tych sekcji. Statystyki podawane w każdym zbiorze to różnica od ostatniego zbioru, z wyjątkiem statystyk natychmiastowych (np. niezagregowanych od uruchomienia systemu).

Produkt Opis
Czas oczekiwania procesora na operacje wejścia/wyjścia lub jego procent Bezwzględny czas pracy procesora i odsetek całkowitego czasu pracy procesora poświęconego na przełączanie kontekstu lub oczekiwanie z powodu operacji wejścia-wyjścia od ostatniego zebrania danych.
Łączny czas pracy procesora Łączny czas pracy procesora w milisekundach.
Łączny czas bezczynności procesora Łączny czas pracy procesora w stanie bezczynności.
Czas oczekiwania procesora na operacje wejścia/wyjścia Łączny czas oczekiwania procesora na operacje wejścia-wyjścia.
Liczba przełączeń kontekstu Liczba przełączeń procesora z jednego procesu lub wątku na inny.
Liczba zablokowanych procesów wejścia/wyjścia/procent Łączna liczba procesów zablokowanych w oczekiwaniu na operacje wejścia/wyjścia oraz odsetek procesów zablokowanych w oczekiwaniu na operacje wejścia/wyjścia od ostatniego zebrania danych.
Najwyższe czasy procesora N

Najpopularniejsze N pakietów, które od ostatniego zebrania danych zużyły najwięcej czasu procesora:

  • Każdy wiersz najwyższego poziomu zawiera identyfikator użytkownika, nazwę pakietu, czas procesora, procent całkowitego czasu procesora i cykle procesora.
  • Wiersze wewnętrzne zawierają polecenie, czas pracy procesora, procent czasu pracy procesora UID i cykle procesora.
Najczęstsze odczyty wejścia/wyjścia pamięci

N pakietów, które od ostatniego zebrania danych odczytały z dysku najwięcej danych.

Każdy wiersz zawiera identyfikator użytkownika, nazwę pakietu, łączną liczbę bajtów odczytanych w trybie pierwszego planu i w trybie tła, odsetek bajtów odczytanych w trybie pierwszego planu i w trybie tła w systemie, łączną liczbę wywołań fsync w trybie pierwszego planu i w trybie tła oraz odsetek wywołań fsync w trybie pierwszego planu i w trybie tła w systemie.fsync

Najczęstsze operacje zapisu I/O w pamięci N pakietów, które od ostatniego zbierania danych zapisały na dysku najwięcej danych. Każdy wiersz zawiera pola podobne do tych w sekcji Najpopularniejsze artykuły.
Identyfikatory UID z największą liczbą operacji wejścia/wyjścia w stanie oczekiwania

N najpopularniejszych pakietów z największą liczbą zadań oczekujących na operacje wejścia/wyjścia.

  • Każdy wiersz najwyższego poziomu zawiera identyfikator użytkownika, nazwy pakietów, liczbę i procent zadań należących do pakietu, które oczekują na operacje wejścia/wyjścia.
  • Wiersze wewnętrzne zawierają informacje o oczekiwaniu na wejście/wyjście w przypadku najważniejszych procesów należących do pakietu.
N najczęstszych błędów strony N pakietów z największą liczbą poważnych błędów strony od czasu ostatniego zebrania danych.