Los dispositivos que se inician con Android 12 y superior utilizan mm_events
, un conjunto de estadísticas relacionadas con la memoria que se capturan periódicamente mientras un sistema experimenta presión de memoria. mm_events
está integrado con mecanismos de seguimiento perfetto
, y debido a que se activa solo cuando se detecta presión de memoria, su sobrecarga de rendimiento adicional es mínima. La recopilación de estadísticas comienza cuando se activan los mecanismos kswapd
, direct reclaim,
o de compaction
del kernel, y permanece activo durante un período de tiempo configurable para capturar estadísticas a intervalos regulares.
En lugar de proporcionar una instantánea única del estado de la memoria del sistema cuando se presenta un informe de error, mm_events
muestra una breve vista histórica de las estadísticas de la memoria durante los períodos de presión de la memoria. Las estadísticas capturadas se enumeran en las siguientes tablas.
campos 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 |
eventos de seguimiento relacionados con 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 |
Análisis de datos de mm_events
Si mm_events
está habilitado, los informes de errores para los eventos que se capturan poco después de que un dispositivo comience a experimentar una alta presión de memoria proporcionan las estadísticas históricas mm_events
, en forma de un informe comprimido en FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Tanto los datos de vmstat
como los eventos de ftrace
se pueden ver para su análisis mediante la interfaz de usuario de Perfetto .
datos vmstat
Cargue el archivo systrace.pftrace
en la interfaz de usuario de Perfetto para ver los datos de vmstat
graficados en una línea de tiempo, como se muestra a continuación.
Figura 1. Cronología de los datos gráficos de vmstat
seguimiento de eventos
Los ftrace
mm_events
capturados no se muestran gráficamente en la escala de tiempo. Para verlos, haga clic en la pestaña Query SQL , ubicada como se muestra en la Figura 2.
Figura 2. Haga clic en Consulta (SQL) para acceder
Habilitando mm_events
Para habilitar mm_events, configure sysprop persist.mm_events.enabled=true
desde el proveedor init.rc
Lo siguiente está implementado para mitigar la huella de memoria y CPU de mm_events:
- Una instancia
mm-events ftrace
utiliza un búfer de 4 KB por CPU. - El activador de
kmem_activity
tiene un límite de frecuencia de una vez por minuto. - Solo la sesión de seguimiento
mm-events
puede estar activa en cualquier momento.
personalización
mm_events
utiliza un archivo de configuración de seguimiento perfetto
para especificar qué estadísticas capturar durante la sesión de seguimiento.
Puede proporcionar una configuración de seguimiento de Perfetto personalizada en /vendor/etc/mm_events.cfg
. Para obtener una descripción de los campos de configuración de seguimiento disponibles, consulte Perfetto Docs . Para ver una configuración de rastreo de muestra, consulte este ejemplo mm_events.cfg
.
Los campos importantes que se deben incluir en su configuración de seguimiento para asegurarse de que se activa por la presión de la memoria se muestran en el fragmento a continuación.
# 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
}
}
En esta configuración, mm_events
inicia el activador perfetto kmem_activity
y la sesión de seguimiento de Perfetto comienza a capturar eventos de memoria vm_stats
y ftrace
hasta el final del período configurado stop_delay_ms
, 36 000 ms (6 minutos). El tiempo de espera del disparador se establece en un valor grande (en este caso, 1 hora) y la configuración de mm_events config
se vuelve a armar periódicamente para garantizar que mm_events
esté siempre habilitado. Como resultado, se genera un informe de error que contiene el tipo de datos que se muestra en la Figura 1 y la Figura 2 .