Perfetto

perfetto to narzędzie, które umożliwia zbieranie informacji o wydajności z urządzeń z Androidem za pomocą Android Debug Bridge (ADB). Wywołaj narzędzie perfetto za pomocą polecenia adb shell perfetto .... perfetto korzysta z różnych źródeł do zbierania danych na temat wydajności z Twojego urządzenia, np.:

  • ftrace – informacje z jądra
  • atrace na potrzeby adnotacji dotyczących przestrzeni użytkownika w usługach i aplikacjach
  • heapprofd na potrzeby informacji o wykorzystaniu pamięci natywnej przez usługi i aplikacje

Na tej stronie opisujemy, jak wywołać funkcję perfetto i skonfigurować ją pod kątem generowania oczekiwanych danych wyjściowych. Więcej informacji znajdziesz w dokumentacji usługi perfetto.

Składnia

W tej sekcji opisujemy, jak za pomocą ADB wywoływać metodę perfetto w różnych trybach i generować log czasu.

Wybór źródła danych

perfetto oferuje 2 tryby określające źródła danych używane do rejestrowania logu czasu:

  • tryb jasny: umożliwia wybranie tylko podzbioru źródeł danych, w szczególności atrace i ftrace. Ten tryb udostępnia jednak interfejs podobny do systrace.
  • tryb normalny: pobiera konfigurację w buforze protokołu i pozwala na wykorzystanie większej liczby funkcji perfetto przez używanie źródeł danych innych niż atrace i ftrace.

Opcje ogólne

W tabeli poniżej znajdziesz listę opcji, które są dostępne, gdy używasz metody perfetto w jednym z trybów:

Tabela 1. i lista dostępnych ogólnych opcji narzędzi do działania.

Opcja Opis
--background |
-d
perfetto natychmiast zamyka interfejs wiersza poleceń i kontynuuje rejestrowanie logu czasu w tle.
--background-wait | -D Podobnie jak --background, ale czeka (do 30 s) na uruchomienie wszystkich źródeł danych przed zakończeniem. Kod wyjścia ma wartość zero w przypadku pomyślnego potwierdzenia. W przeciwnym razie ma wartość inną niż zero (błąd lub czas oczekiwania).
--alert-id Identyfikator alertu, który aktywował ten log czasu.
--config-id Identyfikator konfiguracji aktywatora.
--config-uid Identyfikator UID aplikacji, która zarejestrowała konfigurację.
--subscription-id Identyfikator subskrypcji, która aktywowała ten log czasu.
--out OUT_FILE |
-o OUT_FILE

Określa żądaną ścieżkę do wyjściowego pliku śledzenia lub - dla stdout. perfetto zapisuje dane wyjściowe w pliku opisanym we wcześniejszych flagach. Format wyjściowy jest kompilowany z formatem zdefiniowanym w AOSP trace.proto.

Uwaga: musisz podać pełną nazwę ścieżki pliku wyjściowego. Zwykle pliki powinny być zapisane w folderze /data/misc/perfetto-traces.

--upload Po zakończeniu przekazuje log czasu do pakietu określonego przez komunikat IncidentReportConfig w konfiguracji logu czasu.
--no-guardrails Włączenie flagi --upload podczas testowania wyłącza zabezpieczenia przed nadmiernym wykorzystaniem zasobów.
--reset-guardrails Resetuje stały stan barier i wyjść na potrzeby testowania.
--rsave-for-bugreport Jeśli uruchomiony jest log czasu z wartością bugreport_score > 0, zapisuje go w pliku. Po zakończeniu zwraca ścieżkę.
--query Wysyła zapytanie o stan usługi i drukuje go w postaci tekstu zrozumiałego dla człowieka.
--query-raw Element podobny do --query, ale wyświetla nieprzetworzone bajty zakodowane protokonie: tracing_service_state.proto.
--help | -h Drukuje tekst pomocy dla narzędzia perfetto.

Tryb jasny

Ogólna składnia polecenia perfetto w trybie jasnym wygląda tak:

 adb shell perfetto [ --time TIMESPEC ] [ --buffer SIZE ] [ --size SIZE ]
             [ ATRACE_CAT | FTRACE_GROUP/FTRACE_NAME | FTRACE_GROUP/* ]...
             --out FILE

W tabeli poniżej znajdziesz listę opcji dostępnych w przypadku korzystania z funkcji perfetto w trybie jasnym:

Tabela 2. Lista narzędzi perfetto dostępnych w trybie jasnym.

Opcja Opis
--time TIME[s|m|h] |
-t TIME[s|m|h]
Określa czas trwania logu czasu w sekundach, minutach lub godzinach. Na przykład --time 1m określa czas trwania logu czasu wynoszący 1 minutę. Domyślny czas trwania to 10 sekund.
--buffer SIZE[mb|gb] |
-b SIZE[mb|gb]
Określa rozmiar bufora pierścienia w megabajtach (MB) lub gigabajtach (GB). Domyślny parametr to --buffer 32mb.
--size SIZE[mb|gb] |
-s SIZE[mb|gb]
Określa maksymalny rozmiar pliku w megabajtach (MB) lub gigabajtach (GB). Domyślnie perfetto używa tylko bufora pierścieniowego w pamięci.
--app | -a Nazwa aplikacji na Androida (atrace)

Po tych opcjach wyświetla się lista specyfikatorów zdarzeń:

Tabela 3. Lista specyfikatorów zdarzeń w trybie jasnym.

Wydarzenie Opis
ATRACE_CAT Określa kategorie atrace, dla których chcesz zarejestrować log czasu. Na przykład to polecenie śledzi śledzenie Menedżera okien za pomocą funkcji atrace:
    adb shell perfetto --out FILE wm
    

Aby rejestrować inne kategorie, zobacz listę kategorii (atrace).

FTRACE_GROUP/FTRACE_NAME Określa zdarzenia ftrace, dla których chcesz zarejestrować log czasu. Na przykład to polecenie śledzi zdarzenia sched/sched_switch:
      adb shell perfetto --out FILE sched/sched_switch
      

Tryb normalny

Ogólna składnia polecenia perfetto w trybie normalnym to:

 adb shell perfetto [ --txt ] --config CONFIG_FILE --out FILE

W tabeli poniżej znajdziesz listę opcji, które są dostępne, gdy używasz funkcji perfetto w trybie normalnym:

Tabela 4. Lista narzędzi perfetto dostępnych w trybie normalnym.

Opcja Opis
--config CONFIG_FILE | -c CONFIG_FILE Określa ścieżkę do pliku konfiguracji. W trybie normalnym niektóre konfiguracje mogą być zakodowane w buforze protokołu konfiguracji. Ten plik musi być zgodny ze schematem bufora protokołu określonym w AOSP trace_config.proto.

Wybierz i skonfiguruj źródła danych za pomocą elementu DataSourceConfig TraceConfig, zgodnie z definicją w AOSP data_source_config.proto.

--txt Instruuje perfetto, aby analizował plik konfiguracyjny jako pbtxt. Ta flaga jest przeznaczona tylko do testów lokalnych i nie zalecamy jej włączania w środowisku produkcyjnym.

Obsługiwane źródła danych

W tej sekcji opisujemy różne źródła, których perfetto używa do generowania logu czasu.

Ftrace

Źródło danych ftrace umożliwia perfetto pobieranie zdarzeń z jądra.

Włącz to źródło, ustawiając w DataSourceConfig wartość ftrace_config.

Zdarzenia, które można włączyć, to:

  • Planowanie aktywności:

    • sched/sched_switch
    • sched/sched_wakeup
    • sched/sched_wakeup_new
    • sched/sched_process_exec
    • sched/sched_process_exit
    • sched/sched_process_fork
    • sched/sched_process_free
    • sched/sched_process_hang
    • sched/sched_process_wait
  • Zdarzenia systemu plików:

  • atrace zdarzeń

W zależności od urządzenia, wersji systemu operacyjnego lub jądra może być dostępnych więcej zdarzeń. Więcej informacji znajdziesz w sekcji config protos.

Statystyki procesów

Źródło danych statystyk procesów umożliwia uzyskiwanie liczników odpytań dotyczących systemu i poszczególnych procesów.

Włącz to źródło, ustawiając wartości process_stats_config i sys_stats_config w DataSourceConfig.

Dane generowane przez perfetto obejmują:

W zależności od urządzenia, wersji systemu operacyjnego i jądra może być dostępnych więcej zdarzeń. Więcej informacji znajdziesz w protokołach konfiguracji sys_stats i process_stats.

heapprofd

heapprofd umożliwia próbkowanie przyczyn użycia pamięci natywnej.

Włącz to źródło, ustawiając heapprofd_config w DataSourceConfig. To ustawienie tworzy ProfilePackets, w tym ramki Java stosu wywołań.

Dodatkowe informacje o korzystaniu z heapprofd znajdziesz na stronie perfetto.dev.

Inne źródła

W zależności od urządzenia, wersji systemu operacyjnego i jądra może być dostępnych więcej źródeł danych. Więcej informacji znajdziesz w opisie konfiguracji źródła danych.

Dodatkowe informacje na temat właściwości perfetto znajdziesz na stronie perfetto.dev.