O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Eventos MM - Estatísticas de memória histórica

Dispositivos que lançamento com o Android 12 e utilizam maior mm_events , um conjunto de estatísticas de memória relacionada com a que são capturados periodicamente enquanto a pressão do sistema experiências de memória. mm_events é integrado com perfetto mecanismos de rastreamento, e porque ele é ativado somente quando a pressão de memória é detectada, o seu desempenho adicionado sobrecarga é mínima. A coleta de estatísticas começa quando o kernel kswapd , direct reclaim, ou compaction mecanismos são ativados, e permanece ativo por um período de tempo configurável com estatísticas de captura em intervalos regulares.

Em vez de fornecer um instantâneo one-time do estado memória do sistema quando um relatório de bug é arquivado, mm_events mostra uma breve visão histórica das estatísticas de memória durante períodos de pressão de memória. As estatísticas capturadas são listadas nas tabelas a seguir.

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 rastreamento relacionados ao 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

Analisando dados de mm_events

Se mm_events está habilitado, os relatórios de bugs para os eventos que são capturados logo após um dispositivo começa a sentir a pressão de memória alta fornecer os históricos mm_events estatísticas, na forma de um relatório zipado em FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.

Ambos os vmstat dados e ftrace eventos podem ser vistos para análise usando o UI Perfetto .

dados vmstat

Carregar o systrace.pftrace arquivo para Perfetto UI para ver as vmstat dados representados graficamente em um cronograma como mostrado abaixo.

vmstat data graphed on a timeline

Figura 1. O espaço temporal de dados vmstat gráfica

eventos ftrace

Os capturados ftrace mm_events não são mostradas graficamente na linha do tempo. Para visualizá-los, clique na guia de consulta SQL, localizado como mostrado na Figura 2.

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

Figura 2. Clique em Consulta (SQL) para o acesso

Ativando mm_events

Para habilitar mm_events, conjunto sysprop persist.mm_events.enabled=true do fornecedor init.rc .

Os itens a seguir estão em vigor para mitigar a ocupação da memória e da CPU de mm_events:

  • Um mm-events ftrace exemplo usa um buffer de 4 KB por CPU.
  • O kmem_activity gatilho é de uma vez por minuto limitado de taxa.
  • Apenas 1 mm-events sessão de rastreamento pode estar ativo a qualquer momento.

Costumização

mm_events usa um perfetto ficheiro de rastreio de configuração para especificar quais Status de captura durante a sessão de rastreamento.

Você pode fornecer uma configuração traço Perfetto personalizado em /vendor/etc/mm_events.cfg . Para uma descrição dos campos traço de configuração disponíveis, consulte as Docs Perfetto . Para uma configuração de rastreio de exemplo, ver esta mm_events.cfg exemplo.

Os campos importantes para incluir em sua configuração de rastreamento para garantir que ele seja acionado por pressão de memória são mostrados no trecho abaixo.

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

Nesta configuração mm_events iniciados a perfetto kmem_activity gatilho e a sessão de rastreio Perfetto começa a capturar vm_stats e ftrace eventos de memória até o final do configurado stop_delay_ms período, 36000 ms (6 minutos). O tempo limite de disparo está configurado para um valor elevado (neste caso, 1 hora) e mm_events config é periodicamente rearmado para assegurar que mm_events é sempre activado. Um relato de erro é gerado como um resultado, contendo o tipo de dados mostrados na Figura 1 e Figura 2 .