Statystyki pamięci historycznej zdarzeń MM

Urządzenia uruchamiane w Androidzie 12 i nowszych korzystają z funkcji mm_events, która obejmuje zestaw statystyk związanych z pamięcią i jest okresowo rejestrowany, gdy system odczuwa presję pamięci. mm_events jest zintegrowany z mechanizmami perfetto, a ponieważ jest uruchamiany tylko wtedy, gdy wykryto presję pamięci, jego wpływ na wydajność jest minimalny. Zbieranie statystyk rozpoczyna się, gdy zostaną uruchomione mechanizmy kswapd, direct reclaim, lub compaction jądra. Zbieranie trwa przez określony okres, aby móc rejestrować statystyki w regularnych odstępach czasu.

Zamiast jednorazowego zrzutu stanu pamięci systemu po przesłaniu zgłoszenia błędu mm_events wyświetla krótkie dane historyczne dotyczące statystyk pamięci w okresach obciążenia pamięci. Zbierane statystyki są wymienione w poniższych tabelach.

Pola vmstat

nr_free_pagesnr_slab_reclaimable
nr_slab_unreclaimablenr_active_file
nr_inactive_filenr_active_anon
nr_inactive_anonworkingset_refault
workingset_activatenr_file_pages
pgpginpgpgout
pswpinpswpout
pgsteal_kswapd_dmapgsteal_kswapd_normal
pgsteal_kswapd_movablepgsteal_direct_dma
pgsteal_direct_normalpgsteal_direct_movable
pgscan_kswapd_dmapgscan_kswapd_normal
pgscan_kswapd_movablepgscan_direct_dma
pgscan_direct_normalpgscan_direct_movable
compact_migrate_scannedcompact_free_scanned

Zdarzenia związane z wyszukiwaniem w sieci

vmscan/mm_vmscan_kswapd_wakevmscan/mm_vmscan_kswapd_sleep
vmscan/mm_vmscan_direct_reclaim_beginvmscan/mm_vmscan_direct_reclaim_end
compaction/mm_compaction_begincompaction/mm_compaction_end

Analizowanie danych mm_events

Jeśli mm_events jest włączona, raporty o błędach dotyczące zdarzeń zarejestrowanych wkrótce po tym, jak urządzenie zaczęło odczuwać wysokie obciążenie pamięci, zawierają historyczne statystyki mm_events w postaci skompresowanego raportu w folderze FS/data/misc/perfetto-traces/bugreport/systrace.pftrace..

Zarówno dane vmstat, jak i zdarzenia ftrace można wyświetlać do analizy za pomocą interfejsu Perfectto.

dane vmstat

Prześlij plik systrace.pftrace do interfejsu Perfecto, aby wyświetlić dane vmstat na osi czasu, jak pokazano na rysunku 1.

Dane vmstat przedstawione na wykresie na osi czasu

Rysunek 1. Oś czasu z danymi graficznymi z vmstat.

zdarzenia ftrace.

Przechwycone ftrace mm_events nie są wyświetlane graficznie na osi czasu. Aby je wyświetlić, kliknij kartę Zapytanie SQL, która znajduje się w miejscu pokazanym na rysunku 2.

Odszukaj kartę Zapytanie SQL i kliknij, aby wyświetlić zarejestrowane i wykresowane wartości ftrace i mm_events.

Rysunek 2. Aby uzyskać dostęp, kliknij Zapytanie (SQL).

Włącz mm_events

Aby włączyć mm_events, ustaw parametr sysprop persist.mm_events.enabled=true dostawcy init.rc.

.

Aby ograniczyć wykorzystanie pamięci i procesora przez mm_events, zastosowaliśmy te rozwiązania:

  • Instancja mm-events ftrace używa bufora 4 KB na procesor.
  • Wyzwalacz kmem_activity jest ograniczony do jednej akcji na minutę.
  • W danym momencie może być aktywna tylko 1 sesja mm-events.

Dostosowywanie

mm_events używa pliku konfiguracji perfetto, aby określić, jakie statystyki mają być rejestrowane podczas sesji śledzenia.

W sekcji /vendor/etc/mm_events.cfg możesz podać niestandardową konfigurację śledzenia w Perfetto. Opis dostępnych pól konfiguracji śladu znajdziesz w dokumentacji Perfectto. Przykładową konfigurację śledzenia znajdziesz w tym mm_events.cfgprzykładzie.

W tym fragmencie kodu widać ważne pola, które należy uwzględnić w konfiguracji śledzenia, aby zapewnić jej wywołanie w przypadku naciśnięcia przycisku pamięci:

# Ensures only 1 tracing session with this key can be active
unique_session_name: "perfetto_mm_events_session"

# If a trace with bugreport_score > 0 is running,
# the captured data is made available in the zipped bugreport
# at FS/data/misc/perfetto-traces/bugreport/systrace.pftrace
bugreport_score: 100

trigger_config {
  trigger_mode: START_TRACING
  trigger_timeout_ms: 3600000   # 1 hour
  triggers {
    # kmem_activity trigger gets activated when memory pressure
    # is detected
    name: "kmem_activity"
    stop_delay_ms: 360000       # 6 mins
  }
}

W tej konfiguracji mm_events inicjuje zdarzenie kmem_activity w Perfetto, a sesja śledzenia Perfeto zaczyna rejestrować zdarzenia pamięci vm_statsftrace do końca skonfigurowanego okresu stop_delay_ms, który wynosi 36 tys. ms (6 minut). Czas oczekiwania na uruchomienie jest ustawiony na dużą wartość (w tym przypadku 1 godzinę), a mm_events config jest okresowo ponownie uruchamiany, aby zapewnić, że mm_events jest zawsze włączona. W efekcie generowany jest raport o błędach zawierający dane takie jak na rys. 1rys. 2.