MM etkinliklerinin geçmiş bellek istatistikleri

Android 12 ve sonraki sürümlerde kullanıma sunulan cihazlar, sistem bellek baskısı yaşarken düzenli olarak yakalanan bir dizi bellekle ilgili istatistik olan mm_events kullanır. mm_events, perfetto izleme mekanizmalarıyla entegre edilmiştir ve yalnızca bellek yetersizliği algılandığında etkinleştirildiğinden ek performans ek yükü minimum düzeydedir. İstatistik toplama işlemi, çekirdeğin kswapd, direct reclaim, veya compaction mekanizmaları etkinleştirildiğinde başlar ve düzenli aralıklarla istatistik toplamak için yapılandırılabilir bir süre boyunca etkin kalır.

mm_events, hata raporu gönderildiğinde sistem belleği durumunun tek seferlik 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. Elde edilen 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 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ış bir rapor şeklinde geçmişe ait mm_events istatistiklerini sağlar.

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

vmstat verileri

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

Zaman çizelgesinde grafik olarak gösterilen vmstat verileri

1. şekil. 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 Query SQL (SQL Sorgusu) sekmesini tıklayın:

Sorgu SQL sekmesini bulun ve tıklayarak yakalanan ve grafiği oluşturulan ftrace ve mm_events'i görüntüleyin.

Şekil 2. Erişmek için Sorgu (SQL) seçeneğini tıklayın.

mm_events parametresini etkinleştirme

mm_events'i etkinleştirmek için sysprop persist.mm_events.enabled=true değerini vendor init.rc olarak ayarlayın.

mm_events'in bellek ve CPU ayak izini azaltmak için aşağıdakiler uygulanır:

  • Bir mm-events ftrace örneği, CPU başına 4 KB arabellek kullanır.
  • kmem_activity tetikleyicisi, dakikada bir kez olacak şekilde sıklık sınırına tabidir.
  • 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 perfetto izleme yapılandırma dosyasını kullanır.

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

Bellek baskısı tarafından tetiklenmesini sağlamak için izleme yapılandırmanıza eklemeniz gereken önemli alanlar snippet'te gösterilmektedir:

# 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ılan stop_delay_ms süresinin (36.000 ms veya 6 dakika) sonuna kadar vm_stats ve ftrace bellek etkinliklerini yakalamaya başlar. Tetikleyici zaman aşımı büyük bir değere (bu örnekte 1 saat) ayarlanır ve mm_events config mm_events'nin her zaman etkin olmasını sağlamak için 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.