Zbieranie danych o skuteczności

Natywna usługa watchdog rejestruje dane o wydajności wejścia-wyjścia od momentu jego wczesnego uruchomienia podczas uruchamiania systemu. Usługa natywna zapisuje zebrane dane o wydajności w raporcie o błędzie. Dostawcy mogą wysyłać zapytania do usługi natywnej za pomocą dumpsys, aby wykonać zrzut zebranych danych lub rozpocząć niestandardową sesję zbierania danych na potrzeby debugowania.

Częstotliwość zbierania danych

Częstotliwość zbierania danych o wydajności różni się w zależności od typu kompilacji.

  • Podczas debugowania użytkownika i kompilacji angielskiej Watchdog zbiera dane o wydajności co 1 sekundę podczas uruchamiania systemu i co 1 (1) minutę po uruchomieniu.
  • W przypadku kompilacji przez użytkownika Watchdog zbiera dane o wydajności co 20 sekund podczas uruchamiania systemu oraz co 2 (2) minuty po jego zakończeniu.

Zdarzenia gromadzenia danych

Profilowanie oparte na próbkach jest wykonywane podczas różnych zdarzeń systemowych (takich jak uruchamianie systemu, wybudzanie systemu czy zmiana użytkownika) oraz w ciągu ostatnich N minut.

  • Zdarzenia z ostatnich N minut przed wygenerowaniem raportu o błędzie: generowany w ciągu 30 minut.
  • Zdarzenia czasu uruchamiania: generowane po uruchomieniu.
  • Zdarzenia przełączania użytkowników: generowane po zainicjowaniu przeniesienia użytkownika.
  • Niestandardowe zdarzenia kolekcji: mogą określać okres odpytywania i maksymalny czas trwania oraz filtrować według pakietów.

Zrzut danych o wydajności

Po wygenerowaniu raportu o błędzie usługa natywna Watchdog zapisuje w nim zebrane dane o wydajności. Aby pobrać zebrane dane o wydajności, dostawcy mogą wysyłać zapytania do usługi natywnej za pomocą poniższego polecenia dumpsys. Szczegółowe informacje o tym raporcie znajdziesz w sekcji Interpretowanie raportu z danymi o skuteczności.

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

Zbieranie danych o wydajności na potrzeby debugowania

Dostawcy mogą używać natywnej usługi Watchdog do zbierania niestandardowych danych o wydajności na potrzeby debugowania. Aby na przykład zrozumieć wykorzystanie wejścia-wyjścia aplikacji lub usługi, dostawcy mogą utworzyć niestandardowe zbieranie danych o wydajności, które obejmuje profilowanie wykorzystania wejścia-wyjścia konkretnej listy pakietów lub całego systemu.

Rozpocznij niestandardową sesję zbierania danych

Poniżej widać polecenie uruchomienia niestandardowej sesji zbierania danych o skutecznoś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 skuteczności.
  • --interval <seconds> Określa interwał profilowania. Domyślnie jest to 30 sekund.
  • --max_duration <seconds> Określa maksymalny czas trwania niestandardowej sesji zbierania danych o skuteczności. Jeśli sesja nie zostanie zatrzymana ręcznie, po tym czasie 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 dane o wydajności zostaną podane, zbieranie danych o wydajności będzie ograniczone do tych pakietów. W przeciwnym razie dane o wydajności będą zbierane w przypadku wszystkich pakietów w systemie.

Na przykład poniższe polecenie uruchamia niestandardowe zbieranie danych o wydajności z interwałem profilowania wynoszącym 10 sekund, maksymalnym czasem trwania zbierania danych wynoszącym 1 godzinę i ogranicza profilowanie do pakietów com.google.android.car.kitchensink i com.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

Zatrzymaj i skopiuj niestandardową sesję zbierania danych

Po zarejestrowaniu wejścia/wyjścia wybranej aplikacji lub usługi dostawcy powinni zatrzymać sesję zbierania danych o niestandardowej wydajności, aby przesłać te dane do kosza. To polecenie zatrzymuje zbieranie niestandardowych danych o skuteczności i umieszcza 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 mogą zostać skopiowane w formacie proto:

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

Interpretowanie raportu z danymi o skuteczności

Więcej informacji znajdziesz w tym przykładowym raporcie z danymi 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łędzie, wykonywania polecenia watchdog dumpsys bez żadnych argumentów lub zatrzymywania niestandardowej sesji zbierania danych, usługa natywna Watchdog zapisuje raport z danymi o skuteczności podobny do tego powyżej.

Raport zawiera dane zebrane podczas uruchamiania systemu i ostatnie N minut przed jego wygenerowaniem.

Produkt Opis
Informacje o zbieraniu danych podczas uruchamiania Zawiera informacje o sesji zbierania danych o wydajności podczas uruchamiania.
Informacje o kolekcji po wybudzeniu Udostępnia informacje o sesji zbierania danych o wydajności wybudzania, gdy system jest wybudzony ze stanu zawieszenia.
Informacje o kolekcji polegające na zmianie przez użytkownika Udostępnia informacje o sesji zbierania danych o wydajności przełączania użytkowników, gdy występuje przełącznik użytkownika.
Informacje o zbieraniu danych okresowych Zawiera informacje o okresowej sesji zbierania danych o wydajnoś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 będą przechowywane w pamięci do momentu wyłączenia systemu, więc są zapisywane we wszystkich raportach.
Raport skuteczności wybudzenia Zawiera dane o wydajności zebrane podczas wybudzania. Dane te pozostają 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 zmiany użytkownika. Dane te będą przechowywane w pamięci do momentu wyłączenia systemu, więc są zapisywane we wszystkich raportach.
Raport skuteczności I/O za ostatnie N minuty Zawiera dane o skuteczności zebrane (przez okresową sesję zbierania danych) w ciągu ostatnich N minut przed wygenerowaniem raportu.
Czas trwania zbierania danych Łączny czas zbierania danych o skuteczności.
Liczba kolekcji Łączna liczba kolekcji zgłoszonych w jednym raporcie.

Każda kolekcja widoczna w raporcie może zawierać wszystkie lub niektóre z poniższych sekcji. Statystyki raportowane w każdej kolekcji to wartości delta od ostatniego zbioru, z wyjątkiem statystyk, które są natychmiastowe (np. nie zagregowane od momentu uruchomienia systemu).

Produkt Opis
Czas oczekiwania/procent oczekiwania na operacje wejścia-wyjścia procesora Bezwzględny czas pracy procesora i odsetek łącznego czasu procesora na przełączanie kontekstu lub oczekiwanie z powodu operacji wejścia-wyjścia od ostatniego zbierania danych.
Łączny czas pracy procesora Łączny czas pracy procesora w milisekundach.
Łączny czas bezczynności procesora Łączny czas pracy procesora podczas bezczynności.
Czas oczekiwania na operacje wejścia-wyjścia procesora Łączny czas oczekiwania procesora na operacje wejścia-wyjścia.
Liczba przełączników kontekstu Liczba przełączeń procesora z jednego procesu lub wątku na inny.
Liczba procesów zablokowanych we/wy/procent Łączna liczba procesów zablokowanych na operację wejścia-wyjścia i odsetek procesów zablokowanych w oczekiwaniu na wejścia/wyjścia od ostatniego zbierania.
N największych czasów pracy procesora

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

  • Każdy wiersz najwyższego poziomu zawiera identyfikator użytkownika, nazwę pakietu, czas pracy procesora, procentowy całkowity czas pracy procesora oraz cykle pracy procesora.
  • Wiersze na poziomie wewnętrznym zawierają polecenie, czas pracy procesora, procentowy czas pracy procesora przez UID oraz cykle procesora.
N największych odczytów I/O w pamięci masowej

N najpopularniejszych pakietów, które odczytują najwięcej danych z dysku od ostatniego zbierania.

Każdy wiersz zawiera identyfikator użytkownika, nazwę pakietu, łączną liczbę bajtów odczytanych w trybie na pierwszym planie w porównaniu z trybem w tle, odsetek bajtów we wszystkich odczytach w trybie na pierwszym planie w porównaniu do odczytów w tle w systemie, łączną liczbę wywołań funkcji fsync w trybie na pierwszym planie w porównaniu do trybu w tle oraz odsetek wywołań funkcji fsync we wszystkich trybach na pierwszym planie w porównaniu ze wszystkimi wywołaniami trybu w tle w systemie.fsync

N największych zapisów I/O w pamięci masowej N najważniejszych pakietów, które zapisały na dysku najwięcej danych od czasu ostatniego zbierania. Każdy wiersz zawiera pola podobne do tych z N najczęstszych odczytów.
Najlepsze N I/O oczekujące UID

N pakietów z największą liczbą oczekujących zadań I/O.

  • Każdy wiersz najwyższego poziomu zawiera identyfikator użytkownika, nazwy pakietów, liczbę i odsetek zadań należących do pakietu oczekującego na I/O.
  • Wiersze na poziomie wewnętrznym zawierają informacje o oczekiwaniach wejścia-wyjścia dla głównych procesów należących do pakietu.
N najczęstszych błędów strony N pakietów z największą liczbą głównych błędów stron od czasu ostatniego zbierania danych.