Natywna usługa watchdog zapisuje dane o wydajności operacji wejścia/wyjścia 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ść gromadzenia danych
Częstotliwość gromadzenia danych o skuteczności zależy od typu kompilacji.
- 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.
- W przypadku kompilacji użytkownika Watchdog zbiera dane o wydajności co 20 sekund podczas uruchamiania systemu i raz na 2 minuty po zakończeniu uruchamiania.
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: wygenerowane w okresie przesuwającym się o 30 minut.
- Zdarzenia uruchamiania: generowane po uruchomieniu.
- Zdarzenia zmiany użytkownika: są generowane po zainicjowaniu zmiany użytkownika.
- Zdarzenia niestandardowe dotyczące zbierania danych: możesz określić okres odpytywania i maksymalny czas trwania oraz 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ą podanego niżej polecenia dumpsys, aby wygenerować zrzut zebranych danych o wydajności. Szczegółowe informacje o tym raporcie znajdziesz w sekcji Interpretowanie raportu o danych dotyczących 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ć usługi natywnej Watchdog do niestandardowego zbierania danych o skuteczności na potrzeby debugowania. Na przykład, aby poznać sposób korzystania z wejść/wyjść przez aplikację lub usługę, dostawcy mogą przeprowadzić niestandardowe zbieranie danych o wydajności, które profiluje sposób korzystania z wejść/wyjść przez określoną listę pakietów lub cały system.
Rozpocznij sesję kolekcji niestandardowej
Poniżej znajduje się polecenie do rozpoczęcia niestandardowej sesji zbierania 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 sesję niestandardowego gromadzenia 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 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 trwania to 30 minut.--filter_packages <package_name>,<package_name>...
Określa listę nazw pakietów do profilowania, rozdzielonych przecinkami. W przypadku podania tych informacji gromadzenie danych o skutecznoś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 niestandardowe zbieranie 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.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
Zatrzymywanie i przerywanie sesji niestandardowego zbioru danych
Po zarejestrowaniu wykorzystania wejść i wyjść w aplikacji lub usłudze, dostawcy powinni przerwać sesję niestandardowego zbierania danych o wydajności, aby zapisać zebrane dane. To polecenie zatrzymuje zbieranie danych o wydajności niestandardowej i zgrywa zebrane dane do pliku:/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 w formacie proto
Opcjonalnie dane dumpsys można zapisać 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%
Gdy tworzysz raport o błędach, uruchamiasz polecenie Watchdog dumpsys bez argumentów lub zatrzymujesz niestandardową sesję gromadzenia danych, natywny system Watchdog generuje raport danych o wydajności podobny do powyższego.
Raport zawiera dane zebrane podczas uruchamiania systemu i w ostatnich N minutach przed wygenerowaniem raportu.
Produkt | Opis |
---|---|
Informacje o gromadzeniu danych podczas uruchamiania | Zawiera informacje o sesji zbierania danych o wydajności na etapie rozruchu. |
Informacje o zbieraniu danych dotyczących aktywacji | Zawiera informacje o sesji zbierania danych o wydajności po wybudzeniu, gdy system wybudza się z trybu zawieszenia. |
Informacje o zbieraniu danych dotyczących przełączania użytkowników | Zawiera informacje o sesji gromadzenia danych o wydajności po przełączeniu użytkownika, gdy nastąpiło takie przełączenie. |
Informacje o okresowym gromadzeniu danych | Zawiera informacje o okresowej sesji zbierania danych o skuteczności, która rozpoczyna się po zakończeniu rozruchu. |
Raport o wydajnoś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 skuteczności zebrane podczas budzenia. Te dane są przechowywane w pamięci do momentu wyłączenia systemu, więc są dostępne we wszystkich raportach. |
Raport Skuteczność przełączania użytkowników | Zawiera dane o wydajności zebrane podczas przełączania użytkowników. Dane te są przechowywane w pamięci do czasu wyłączenia systemu, więc są uwzględniane 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 | Łączny czas zbierania danych o skuteczności. |
Liczba kolekcji | Łączna liczba kolekcji zgłoszonych w pojedynczym raporcie. |
Każda kolekcja uwzględniona w raporcie może zawierać wszystkie lub niektóre z tych sekcji. Statystyki podawane w ramach każdej kolekcji to różnica w stosunku do ostatniej kolekcji, z wyjątkiem statystyk, które są natychmiastowe (np. nie są agregowane od momentu uruchomienia systemu).
Produkt | Opis |
---|---|
Czas oczekiwania na operacje wejścia/wyjścia procesora/procent | Bezwzględny czas pracy procesora i odsetek łącznego czasu pracy procesora spędzonego na przełączaniu kontekstu lub oczekiwaniu 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 pracy procesora w stanie bezczynności. |
Czas oczekiwania procesora na operacje wejścia/wyjścia | Łączny czas pracy procesora poświęcony na oczekiwanie na operacje wejścia-wyjścia. |
Liczba zmian kontekstu | Liczba przełączeń procesora z jednego procesu lub wątku na inny. |
Liczba zablokowanych procesów we/wy (w procentach) | Łączna liczba procesów zablokowanych na operacjach wejścia-wyjścia oraz odsetek takich procesów od ostatniego zbioru danych. |
Najdłuższe czasy wykonywania przez procesor |
Najważniejsze pakiety, które zużyły najwięcej czasu procesora od ostatniego zebrania danych:
|
Najczęstsze odczyty I/O z miejsca na dane |
Najważniejsze N pakietów, 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 |
Najczęstsze zapisy I/O w miejscu na dane | Najważniejsze pakiety, które od ostatniego zebrania zapisały najwięcej danych na dysk. Każdy wiersz zawiera pola podobne do tych w sekcji Najczęściej czytane. |
Najważniejsze identyfikatory UID oczekujące na wejście lub wyjście | N najczęstszych pakietów z największą liczbą oczekujących zadań związanych z operacjami wejścia-wyjścia.
|
Najpoważniejsze błędy stron | Najważniejsze N pakietów z największą liczbą znaczących błędów strony od czasu ostatniego zebrania danych. |