I dispositivi lanciati su Android 12 e versioni successive
utilizzano mm_events
, un insieme di statistiche relative alla memoria che vengono acquisite
periodicamente quando un sistema è sottoposto a pressione della memoria. mm_events
è
integrato con i meccanismi di tracciamento di perfetto
e, poiché viene attivato solo
quando viene rilevato un utilizzo intensivo della memoria, il sovraccarico di 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 un'istantanea una tantum dello stato della memoria di sistema quando viene segnalato un 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_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 correlati 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 |
Analizzare i dati mm_events
Se mm_events
è attivato, le segnalazioni di bug per gli eventi acquisiti subito
dopo che un dispositivo inizia a riscontrare un'elevata pressione della memoria forniscono le statistiche
mm_events
sotto forma di report compresso in
FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Sia i dati vmstat
sia gli eventi ftrace
possono essere visualizzati per l'analisi utilizzando l'interfaccia utente di Perfetto.
Dati vmstat
Carica il file systrace.pftrace
nella UI di Perfetto per visualizzare i dati vmstat
rappresentati graficamente su una cronologia, come mostrato nella Figura 1:
Figura 1. Cronologia dei dati grafici di vmstat.
eventi ftrace
I ftrace
mm_events
acquisiti non vengono mostrati graficamente nella sequenza temporale. Per
visualizzarli, fai clic sulla scheda Query SQL, che si trova come mostrato nella Figura 2:
Figura 2. Fai clic su Query (SQL) per accedere.
Abilita mm_events
Per attivare mm_events, imposta sysprop persist.mm_events.enabled=true
dal fornitore
init.rc
.
Per ridurre l'impronta di memoria e CPU di mm_events sono in atto le seguenti misure:
- Un'istanza
mm-events ftrace
utilizza un buffer di 4 KB per CPU. - Il trigger
kmem_activity
è limitato a una volta al minuto. - Può essere attiva una sola sessione di tracciamento
mm-events
alla volta.
Personalizzazione
mm_events
utilizza un file di configurazione della traccia perfetto
per specificare le statistiche da acquisire
durante la sessione di tracciamento.
Puoi fornire una configurazione di traccia Perfetto personalizzata in /vendor/etc/mm_events.cfg
.
Per una descrizione dei campi di configurazione della traccia disponibili, consulta la documentazione di Perfetto.
Per un esempio di configurazione della traccia, consulta questo
mm_events.cfg
esempio.
I campi importanti da includere nella configurazione della traccia per assicurarsi che venga attivata dalla pressione 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 di Perfetto kmem_activity
e la sessione di traccia di Perfetto inizia a registrare gli eventi di memoria vm_stats
e ftrace
fino alla fine del periodo stop_delay_ms
configurato, ovvero 36.000 ms (6 minuti).
Il timeout del trigger è impostato su un valore elevato (in questo caso, 1 ora) e
mm_events config
viene riattivato periodicamente per garantire che mm_events
sia sempre abilitato. Di conseguenza, viene generato un report sui bug
contenente il tipo di dati mostrato nella Figura 1
e nella Figura 2.