Zbieranie danych o skuteczności

Natywna usługa Watchdog rejestruje dane o wydajności wejść/wyjść od wczesnej fazy inicjalizacji podczas uruchamiania systemu. Natywna usługa zapisuje zebrane dane o wydajności w raporcie o błędach. Dostawcy mogą wysyłać zapytania do usługi natywnej za pomocą dumpsys, aby wygenerować 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 kompilacji typu.

  • W przypadku kompilacji userdebug lub eng Watchdog zbiera dane o wydajności co 1 sekundę podczas uruchamiania systemu i raz na minutę po zakończeniu uruchamiania.
  • Na podstawie danych tworzonych przez użytkowników Watchdog zbiera dane o skuteczności co 20 sekund. podczas uruchamiania systemu oraz co dwie (2) minuty po jego zakończeniu.

Zdarzenia zbierania danych

Profilowanie na podstawie próbek jest wykonywane podczas różnych zdarzeń systemowych (takich jak uruchamianie systemu, budzenie 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 podczas 30-minutowe okno ruchome.
  • Zdarzenia uruchamiania: generowane po uruchomieniu.
  • Zdarzenia przełączania użytkowników: generowane po zainicjowaniu przeniesienia użytkownika.
  • Zdarzenia niestandardowe dotyczące zbierania danych: możesz określić okres odpytywania, maksymalny czas trwania i filtrować według pakietów.

Zrzut danych o skuteczności

Gdy zostanie utworzony raport o błędzie, natywny interfejs Watchdog zapisuje zebrane dane o wydajności w raporcie o błędzie. Dostawcy mogą wysyłać zapytania do usługi natywnej za pomocą poniżej polecenia dumpsys, aby pobrać zebrane dane o wydajności. Zobacz sekcji Analiza skuteczności raport danych, aby uzyskać szczegółowe informacje o nim.

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

Zbieranie danych o wydajności na potrzeby debugowania

Dostawcy mogą korzystać z natywnej usługi Watchdog, aby zbierać niestandardowe dane o skuteczności do debugowania. Na przykład, aby poznać sposób korzystania z wejścia/wyjścia przez aplikację lub usługę, dostawcy mogą przeprowadzić niestandardowe zbieranie danych o wydajności, które tworzy profil wykorzystania wejść/wyjść przez określoną listę pakietów lub cały system.

Rozpocznij sesję niestandardowej kolekcji

Poniżej znajduje się polecenie umożliwiające rozpoczęcie niestandardowego zbierania danych o skuteczności sesja:

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 sesji niestandardowego zbierania danych o wydajności. Jeśli sesja nie zostanie zatrzymana ręcznie, zostanie zakończona, a zebrane dane zostaną odrzucone po upływie tego czasu. Domyślny maksymalny czas to 30 minut.
  • --filter_packages <package_name>,<package_name>... Określa rozdzielaną przecinkami listę nazw pakietów do profilowania. Jeśli pole zostanie podane, zbieranie danych o wydajności jest ograniczone do tych pakietów. W przeciwnym razie dane o skuteczności są zbierane dla wszystkich pakietów w systemie.

Na przykład poniższe polecenie uruchamia zbieranie niestandardowych danych o skuteczności z interwałem profilowania wynoszącym 10 sekund, maksymalnym zbieraniem danych trwa 1 godzinę i ogranicza profilowanie do com.google.android.car.kitchensink i Pakiety: 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 interesującej Cię aplikacji lub usługi dostawcy powinni zaprzestać wysyłania niestandardowej sesji zbierania danych o skuteczności, aby pobrać zebrane dane. To polecenie zatrzymuje do niestandardowego zbierania danych dotyczących skuteczności, a następnie przesyła je 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 zapisać 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 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, uruchomienia polecenia Watchdog dumpsys bez użycia argumentów ani zatrzymania. niestandardowej sesji gromadzenia danych, usługa natywna Watchdog zapisuje raport z danymi o skuteczności, podobny do z raportu powyżej.

Raport zawiera dane zebrane podczas uruchamiania systemu i w ciągu ostatnich N minut przed i generowania raportów.

Produkt Opis
Informacje o zbieraniu danych podczas uruchamiania Zawiera informacje o sesji zbierania danych o wydajności podczas uruchamiania.
Informacje o zbieraniu danych dotyczących aktywacji Zawiera informacje o sesji zbierania danych o wydajności po wybudzeniu, gdy system wychodzi z trybu zawieszenia.
Informacje o zbieraniu danych dotyczących przełączania użytkowników Udostępnia informacje o sesji zbierania danych o skuteczności przełączania użytkowników, gdy jest przełącznikiem użytkownika.
Informacje o zbieraniu danych okresowych Zawiera informacje o okresowej sesji 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. Te dane są przechowywane w pamięci do momentu wyłączenia systemu, więc są uwzględniane we wszystkich raportach.
Raport o skuteczności powiadomień o wybudzeniu Zawiera dane o wydajności zebrane podczas wybudzania. Te dane są przechowywane w pamięci do momentu wyłączenia systemu, więc są dostępne we wszystkich raportach.
Raport skuteczności przełączania użytkowników Zawiera dane o wydajności zebrane podczas przełączania użytkowników. Te dane będą przechowywane w pamięci do wyłączenia systemu, więc dane są zapisywane we wszystkich raportach.
Raporty o skuteczności operacji wejścia/wyjścia za ostatnie N minut Zawiera dane o skuteczności zebrane (przez sesję okresowego zbierania danych) w ciągu ostatnich N minut przed wygenerowaniem raportu.
Czas trwania zbierania danych Łączny czas gromadzenia danych o skuteczności.
Liczba kolekcji Łączna liczba kolekcji zgłoszonych w jednym raporcie.

Każda kolekcja uwzględniona w raporcie może zawierać wszystkie lub niektóre z tych sekcji. Statystyki raportowane w każdej kolekcji to delta od ostatniego oprócz statystyk, które są natychmiastowe (np. nie zagregowane od uruchamianie systemu).

Produkt Opis
Czas oczekiwania na operacje wejścia/wyjścia procesora/procent Bezwzględny czas pracy procesora i odsetek łącznego czasu pracy procesora poświęconego na przełączanie kontekstu lub oczekiwanie z powodu operacji wejścia-wyjścia od ostatniego zbioru danych.
Łączny czas pracy procesora Łączny czas pracy procesora w milisekundach.
Łączny czas bezczynności procesora Łączny czas bezczynności procesora.
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 blokujących operacje wejścia/wyjścia / procent Łączna liczba procesów zablokowanych w oczekiwaniu na operacje wejścia-wyjścia oraz odsetek takich procesów od ostatniego zbioru danych.
Najdłuższe czasy wykonywania kodu na CPU

Najważniejsze pakiety, które zużyły najwięcej czasu procesora od ostatniego zebrania danych:

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

Najważniejsze pakiety, które odczytały najwięcej danych z dysku od czasu ostatniego zebrania danych.

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

Najczęstsze zapisy I/O w miejscu na dane Najważniejsze pakiety, które od ostatniego zebrania danych zapisały najwięcej danych na dysk. Każdy wiersz zawiera podobnych do pól najważniejszych (N najważniejszych odczytów).
Najlepsze N I/O oczekujące identyfikatory UID

N największych pakietów z największą liczbą oczekujących zadań związanych z operacjami wejścia-wyjścia.

  • Każdy wiersz najwyższego poziomu zawiera identyfikator użytkownika, nazwy pakietów oraz liczbę i procent zadań należących do pakietu oczekujących na operacje wejścia/wyjścia.
  • Wiersze na poziomie wewnętrznym zawierają informacje o oczekiwaniu na operacje wejścia-wyjścia dla procesów najwyższego poziomu należące 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.