Statistiche della memoria storica degli eventi MM

I dispositivi avviati su Android 12 e versioni successive utilizzano mm_events , un insieme di statistiche relative alla memoria che vengono acquisite periodicamente mentre un sistema subisce un sovraccarico di memoria. mm_events è integrato con i meccanismi di tracciamento perfetto e, poiché viene attivato solo quando viene rilevato un sovraccarico della memoria, il sovraccarico prestazionale 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 statistiche a intervalli regolari.

Invece di fornire un'istantanea una tantum dello stato della memoria del sistema quando viene archiviata una segnalazione di bug, mm_events mostra una breve vista cronologica delle statistiche della memoria durante i periodi di pressione della memoria. Le statistiche acquisite sono elencate nelle tabelle seguenti.

campi vmstat

nr_free_pages nr_slab_reclaimable
nr_slab_unreclaimable nr_active_file
nr_inactive_file nr_active_anon
nr_inactive_anon workingset_refault
workingset_activate nr_file_pages
pgpgin pgpgout
pswpin pswpout
pgsteal_kswapd_dma pgsteal_kswapd_normal
pgsteal_kswapd_movable pgsteal_direct_dma
pgsteal_direct_normal pgsteal_direct_movable
pgscan_kswapd_dma pgscan_kswapd_normal
pgscan_kswapd_movable pgscan_direct_dma
pgscan_direct_normal pgscan_direct_movable
compact_migrate_scanned compact_free_scanned

eventi di traccia relativi a mm

vmscan/mm_vmscan_kswapd_wake vmscan/mm_vmscan_kswapd_sleep
vmscan/mm_vmscan_direct_reclaim_begin vmscan/mm_vmscan_direct_reclaim_end
compaction/mm_compaction_begin compaction/mm_compaction_end

Analizza i dati mm_events

Se mm_events è abilitato, le segnalazioni di bug per gli eventi che vengono acquisiti subito dopo che un dispositivo inizia a sperimentare un'elevata pressione della memoria forniscono le statistiche storiche mm_events , sotto forma di un 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 Perfetto .

dati vmstat

Carica il file systrace.pftrace nell'interfaccia utente Perfetto per visualizzare i dati vmstat rappresentati graficamente su una sequenza temporale come mostrato nella Figura 1:

vmstat data graphed on a timeline

Figura 1. Cronologia dei dati grafici vmstat.

eventi ftrace

Gli mm_events ftrace acquisiti non vengono visualizzati graficamente sulla timeline. Per visualizzarli, fare clic sulla scheda Query SQL , posizionata come mostrato nella Figura 2:

Locate the Query SQL tab and click to view ftrace and mm_events captured and graphed

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

Abilita mm_events

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

Quanto segue è in atto per mitigare l'ingombro di memoria e CPU di mm_events:

  • Un'istanza mm-events ftrace utilizza un buffer da 4 KB per CPU.
  • La frequenza del trigger kmem_activity è limitata a una volta al minuto.
  • In qualsiasi momento può essere attiva solo una sessione di tracciamento mm-events .

Personalizzazione

mm_events utilizza un file di configurazione di traccia perfetto per specificare quali statistiche acquisire durante la sessione di traccia.

È possibile fornire una configurazione di traccia Perfetto personalizzata in /vendor/etc/mm_events.cfg . Per una descrizione dei campi di configurazione di traccia disponibili, vedere Perfetto Docs . Per una configurazione di traccia di esempio, vedere questo esempio mm_events.cfg .

I campi importanti da includere nella configurazione di traccia per garantire che venga attivata 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 il trigger kmem_activity Perfetto e la sessione di traccia Perfetto inizia ad acquisire eventi di memoria vm_stats e ftrace fino alla fine del periodo stop_delay_ms configurato, 36000 ms (6 minuti). Il timeout del trigger è impostato su un valore elevato (in questo caso, 1 ora) e mm_events config viene periodicamente riattivata per garantire che mm_events sia sempre abilitato. Di conseguenza viene generata una segnalazione di bug contenente il tipo di dati mostrato nella Figura 1 e nella Figura 2 .