Statistiche sulla memoria storica degli eventi MM

I dispositivi che vengono avviati su Android 12 e versioni successive utilizzano mm_events, un insieme di statistiche relative alla memoria che vengono acquisite periodicamente quando un sistema è sotto pressione di memoria. mm_events è integrato con i meccanismi di monitoraggio di perfetto e, poiché viene attivato solo quando viene rilevata una pressione sulla memoria, il sovraccarico delle prestazioni aggiuntivo è minimo. La raccolta delle statistiche inizia quando vengono attivati i meccanismi kswapd, direct reclaim, o compaction del kernel e rimane attiva per un periodo di tempo configurabile per acquisire le statistiche a intervalli regolari.

Anziché fornire uno snapshot una tantum dello stato della memoria di sistema quando viene inviato un report di bug, mm_events mostra una breve visualizzazione storica delle statistiche della memoria durante i periodi di pressione della memoria. Le statistiche acquisite sono elencate nelle tabelle seguenti.

Campi 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

Eventi di traccia relativi a mm

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

Analizza i dati di mm_events

Se il criterio mm_events viene attivato, le segnalazioni di bug per gli eventi che vengono acquisiti subito dopo che un dispositivo inizia a registrare un uso intensivo della memoria forniscono le statistiche storiche di mm_events, sotto forma di report compresso in FS/data/misc/perfetto-traces/bugreport/systrace.pftrace..

Sia i dati vmstat che gli eventi ftrace possono essere visualizzati per l'analisi utilizzando l'interfaccia utente di Perfetto.

dati vmstat

Carica il file systrace.pftrace nell'interfaccia utente di Perfetto per visualizzare i dati vmstat in un grafico su una sequenza temporale, come mostrato nella Figura 1:

dati vmstat rappresentati graficamente su una sequenza temporale

Figura 1. Cronologia dei dati grafici di vmstat.

eventi ftrace

Gli elementi ftrace mm_events acquisiti non vengono mostrati graficamente sulla sequenza temporale. Per visualizzarle, fai clic sulla scheda Query SQL, come mostrato nella Figura 2:

Individua la scheda Query SQL e fai clic per visualizzare ftrace e mm_events acquisiti e rappresentati in grafico

Figura 2. Fai clic su Query (SQL) per accedere.

Attiva mm_events

Per abilitare mm_events, imposta sysprop persist.mm_events.enabled=true dal fornitore init.rc.

Le seguenti funzionalità sono state implementate per ridurre l'ingombro di memoria e CPU di mm_events:

  • Un'istanza mm-events ftrace utilizza un buffer di 4 KB per CPU.
  • La frequenza dell'attivatore kmem_activity è limitata a una volta al minuto.
  • In qualsiasi momento può essere attiva una sola sessione di traccia mm-events.

Personalizzazione

mm_events utilizza un file di configurazione della traccia perfetto per specificare le statistiche da acquisire durante la sessione di monitoraggio.

Puoi fornire una configurazione della traccia Perfetto personalizzata in /vendor/etc/mm_events.cfg. Per una descrizione dei campi di configurazione della traccia disponibili, consulta la documentazione di Perfeto. Per un esempio di configurazione della traccia, vedi questo esempio di mm_events.cfg.

I campi importanti da includere nella configurazione della traccia per garantire che venga attivato dall'utilizzo della memoria sono mostrati nello snippet:

# 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
  }
}

In questa configurazione, mm_events avvia l'attivatore kmem_activity di Perfetto e la sessione di traccia di Perfetto inizia a acquisire gli eventi di memoria vm_stats e ftrace fino al termine del periodo stop_delay_ms configurato, 36000 ms (6 minuti). Il timeout dell'attivatore è impostato su un valore elevato (in questo caso 1 ora) e mm_events config viene riattivato periodicamente per garantire che mm_events sia sempre attivo. Viene generato un report di bug contenente il tipo di dati mostrato nella Figura 1 e nella Figura 2.