MM etkinlikleri geçmiş bellek istatistikleri

Android 12 ve sonraki sürümlerde kullanıma sunulan cihazlar, sistem bellek baskısı altındayken düzenli olarak yakalanan bellekle ilgili istatistikler olan mm_events'ten yararlanır. mm_events, perfetto izleme mekanizmalarıyla entegre edilmiştir ve yalnızca bellek baskısı algılandığında etkinleştirildiğinden ek performans yükü minimumdur. İstatistik toplama, çekirdeğin kswapd, direct reclaim, veya compaction mekanizmaları etkinleştirildiğinde başlar ve istatistikleri düzenli aralıklarla yakalamak için yapılandırılabilir bir süre boyunca etkin kalır.

mm_events, bir hata raporu gönderildiğinde sistem bellek durumunun tek seferlik bir anlık görüntüsünü sağlamak yerine, bellek baskısı dönemlerinde bellek istatistiklerinin kısa bir geçmiş görünümünü gösterir. Yakalanan istatistikler aşağıdaki tablolarda listelenmiştir.

vmstat alanları

nr_free_pagesnr_slab_reclaimable
nr_slab_unreclaimablenr_active_file
nr_inactive_filenr_active_anon
nr_inactive_anonworkingset_refault
workingset_activatenr_file_pages
pgpginpgpgout
pswpinpswpout
pgsteal_kswapd_dmapgsteal_kswapd_normal
pgsteal_kswapd_movablepgsteal_direct_dma
pgsteal_direct_normalpgsteal_direct_movable
pgscan_kswapd_dmapgscan_kswapd_normal
pgscan_kswapd_movablepgscan_direct_dma
pgscan_direct_normalpgscan_direct_movable
compact_migrate_scannedcompact_free_scanned

mm ile ilgili izleme etkinlikleri

vmscan/mm_vmscan_kswapd_wakevmscan/mm_vmscan_kswapd_sleep
vmscan/mm_vmscan_direct_reclaim_beginvmscan/mm_vmscan_direct_reclaim_end
compaction/mm_compaction_begincompaction/mm_compaction_end

mm_events verilerini analiz etme

mm_events etkinleştirilirse bir cihaz yüksek bellek baskısı yaşamaya başladıktan kısa süre sonra yakalanan etkinliklerin hata raporları, FS/data/misc/perfetto-traces/bugreport/systrace.pftrace. içinde sıkıştırılmış rapor biçiminde geçmiş mm_events istatistiklerini sağlar.

Hem vmstat verileri hem de ftrace etkinlikleri, analiz için Perfetto kullanıcı arayüzü kullanılarak görüntülenebilir.

vmstat verileri

vmstat verilerini Şekil 1'de gösterildiği gibi zaman çizelgesinde grafik halinde görmek için systrace.pftrace dosyasını Perfetto kullanıcı arayüzüne yükleyin:

Zaman çizelgesinde grafik şeklinde gösterilen vmstat verileri

Şekil 1. vmstat grafik verilerinin zaman çizelgesi.

ftrace etkinlikleri

Yakalanan ftrace mm_events zaman çizelgesinde grafik olarak gösterilmez. Bunları görüntülemek için Şekil 2'de gösterildiği gibi SQL Sorgusu sekmesini tıklayın:

Sorgu SQL sekmesini bulun ve yakalanıp grafik haline getirilen ftrace ve mm_events'i görüntülemek için tıklayın.

Şekil 2. Erişmek için Sorgu (SQL)'yu tıklayın.

mm_events'ı etkinleştir

mm_events etkinleştirmek için init.rc tedarikçi firmanın sysprop persist.mm_events.enabled=true ayarını yapın.

Aşağıdakiler, mm_events'in belleği ve CPU ayak izini azaltmak için uygulanmaktadır:

  • mm-events ftrace örnekleri, CPU başına 4 KB arabellek kullanır.
  • kmem_activity tetikleyicisi, dakikada bir kez olacak şekilde hız sınırına sahiptir.
  • Herhangi bir zamanda yalnızca 1 mm-events izleme oturumu etkin olabilir.

Özelleştirme

mm_events, izleme oturumu sırasında hangi istatistiklerin yakalanacağını belirtmek için bir perfetto izleme yapılandırma dosyası kullanır.

/vendor/etc/mm_events.cfg içinde özel bir Perfetto izleme yapılandırması sağlayabilirsiniz. Kullanılabilir izleme yapılandırması alanlarının açıklaması için Perfetto Belgeleri'ne bakın. Örnek iz yapılandırması için bu mm_events.cfg örneğine bakın.

Hafıza baskısı nedeniyle tetiklenmesini sağlamak için izleme yapılandırmanıza dahil edilmesi gereken önemli alanlar snippet'te gösterilmiştir:

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

Bu yapılandırmada mm_events, perfetto kmem_activity tetikleyicisini başlatır ve Perfetto izleme oturumu, yapılandırılmış stop_delay_ms döneminin (36.000 ms, 6 dakika) sonuna kadar vm_stats ve ftrace bellek etkinliklerini yakalamaya başlar. Tetikleyici zaman aşımı büyük bir değere (bu durumda 1 saat) ayarlanır ve mm_events'ın her zaman etkin olmasını sağlamak için mm_events config düzenli olarak yeniden etkinleştirilir. Sonuç olarak, Şekil 1 ve Şekil 2'de gösterilen veri türünü içeren bir hata raporu oluşturulur.