Événements MM - Statistiques historiques de la mémoire

Les appareils qui se lancent sur Android 12 et versions ultérieures utilisent mm_events , un ensemble de statistiques liées à la mémoire qui sont capturées périodiquement lorsqu'un système subit une pression sur la mémoire. mm_events est intégré aux mécanismes de traçage perfetto , et comme il n'est activé que lorsqu'une pression de mémoire est détectée, sa surcharge de performances supplémentaire est minime. La collecte de statistiques démarre lorsque les mécanismes kswapd , direct reclaim, ou compaction du noyau sont activés, et elle reste active pendant une période de temps configurable pour capturer des statistiques à intervalles réguliers.

Au lieu de fournir un instantané unique de l'état de la mémoire système lorsqu'un rapport de bogue est déposé, mm_events affiche une brève vue historique des statistiques de la mémoire pendant les périodes de pression mémoire. Les statistiques capturées sont répertoriées dans les tableaux suivants.

champs 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

événements de trace liés aux 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

Analyse des données mm_events

Si mm_events est activé, les rapports de bogues pour les événements capturés peu de temps après qu'un appareil commence à subir une pression de mémoire élevée fournissent les statistiques historiques mm_events , sous la forme d'un rapport compressé dans FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.

Les données vmstat et les événements ftrace peuvent être visualisés pour analyse à l'aide de l' interface utilisateur Perfetto .

données vmstat

Téléchargez le fichier systrace.pftrace sur Perfetto UI pour voir les données vmstat représentées graphiquement sur une chronologie, comme indiqué ci-dessous.

vmstat data graphed on a timeline

Figure 1. Chronologie des données graphiques vmstat

événements de course

Les ftrace mm_events capturés ne sont pas affichés graphiquement sur la chronologie. Pour les afficher, cliquez sur l'onglet Requête SQL , situé comme indiqué dans la figure 2.

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

Figure 2. Cliquez sur Requête (SQL) pour accéder

Activation de mm_events

Pour activer mm_events, définissez sysprop persist.mm_events.enabled=true auprès du fournisseur init.rc .

Les éléments suivants sont en place pour atténuer l'empreinte mémoire et CPU de mm_events :

  • Une instance mm-events ftrace utilise un tampon de 4 Ko par processeur.
  • Le déclencheur kmem_activity est limité à une fois par minute.
  • Seule une session de trace mm-events peut être active à tout moment.

Personnalisation

mm_events utilise un fichier de configuration de trace perfetto pour spécifier les statistiques à capturer pendant la session de traçage.

Vous pouvez fournir une configuration de trace Perfetto personnalisée dans /vendor/etc/mm_events.cfg . Pour une description des champs de configuration de trace disponibles, consultez la documentation Perfetto . Pour un exemple de configuration de trace, consultez cet exemple mm_events.cfg .

Les champs importants à inclure dans votre configuration de trace pour garantir qu'elle soit déclenchée par la pression de la mémoire sont affichés dans l'extrait ci-dessous.

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

Dans cette configuration, mm_events lance le déclencheur perfetto kmem_activity et la session de trace Perfetto commence à capturer les événements de mémoire vm_stats et ftrace jusqu'à la fin de la période stop_delay_ms configurée, 36 000 ms (6 minutes). Le délai d'expiration du déclenchement est défini sur une valeur élevée (dans ce cas, 1 heure) et mm_events config est périodiquement réarmée pour garantir que mm_events est toujours activé. En conséquence, un rapport de bogue est généré, contenant le type de données présenté dans la Figure 1 et la Figure 2 .