Estadísticas de memoria histórica de eventos MM

Los dispositivos que se inician con Android 12 y versiones posteriores 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 rastreo 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 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

Analizar datos mm_events

Si mm_events está habilitado, los informes de errores para los eventos que se capturan poco después de que un dispositivo comienza 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 vmstat como los eventos ftrace se pueden ver para su análisis mediante la interfaz de usuario de Perfetto .

datos vmstat

Cargue el archivo systrace.pftrace en Perfetto UI para ver los datos vmstat graficados en una línea de tiempo como se muestra en la Figura 1:

vmstat data graphed on a timeline

Figura 1. Cronología de los datos gráficos de vmstat.

eventos ftrace

Los ftrace mm_events capturados no se muestran gráficamente en la línea de tiempo. Para verlos, haga clic en la pestaña Consulta SQL , ubicada como se muestra en la Figura 2:

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

Figura 2. Haga clic en Consulta (SQL) para acceder.

Habilitar mm_events

Para habilitar mm_events, configure sysprop persist.mm_events.enabled=true del proveedor init.rc

Se han implementado lo siguiente 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 disparador kmem_activity tiene una velocidad limitada a una vez por minuto.
  • Solo se puede activar una sesión de seguimiento mm-events 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 obtener una configuración de seguimiento de muestra, consulte este ejemplo de mm_events.cfg .

Los campos importantes que debe incluir en su configuración de seguimiento para garantizar que se active debido a la presión de la memoria se muestran en el fragmento:

# 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 vm_stats y eventos de memoria ftrace hasta el final del período stop_delay_ms configurado, 36000 ms (6 minutos). El tiempo de espera del activador se establece en un valor grande (en este caso, 1 hora) y mm_events config se rearma 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 muestran en la Figura 1 y la Figura 2 .