MM olayları geçmiş hafıza istatistikleri

Android 12 ve sonraki sürümlerde başlatılan cihazlar, sistem bellek baskısı yaşarken periyodik olarak toplanan bellekle ilgili bir dizi istatistik olan mm_events kullanır. mm_events perfetto izleme mekanizmalarıyla entegredir ve yalnızca bellek baskısı algılandığında etkinleştirildiğinden, ek performans yükü minimum düzeydedir. İ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 aktif kalır.

Bir hata raporu dosyalandığında sistem bellek durumunun tek seferlik anlık görüntüsünü sağlamak yerine mm_events bellek baskısı dönemleri sırasında 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_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

mm ile ilgili izleme olayları

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

mm_events verilerini analiz edin

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

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

vmstat verileri

Şekil 1'de gösterildiği gibi bir zaman çizelgesinde grafik halinde gösterilen vmstat verilerini görmek için systrace.pftrace dosyasını Perfetto UI'ya yükleyin:

vmstat data graphed on a timeline

Şekil 1. Vmstat grafik verilerinin zaman çizelgesi.

ftrace etkinlikleri

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

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

Şekil 2. Erişmek için Sorgu (SQL) öğesine tıklayın.

mm_events'i etkinleştir

mm_events'i etkinleştirmek için satıcı init.rc sysprop persist.mm_events.enabled=true ayarlayın.

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

  • Bir mm-events ftrace örneği, CPU başına 4 KB'lik bir arabellek kullanır.
  • kmem_activity tetikleyicisinin hızı dakikada bir kez ile sınırlıdır.
  • 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 bir izleme yapılandırma dosyası kullanır.

/vendor/etc/mm_events.cfg dosyasında özel bir Perfetto izleme yapılandırması sağlayabilirsiniz. Mevcut izleme yapılandırma alanlarının açıklaması için Perfetto Dokümanlarına bakın. Örnek izleme yapılandırması için bu mm_events.cfg örneğine bakın.

Bellek baskısı tarafından tetiklendiğinden emin olmak için izleme yapılandırmanıza dahil edilecek önemli alanlar kod parçacığında gösterilir:

# 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üresi olan 36000 ms (6 dakika) sonuna kadar vm_stats ve ftrace bellek olaylarını yakalamaya başlar. Tetikleme zaman aşımı büyük bir değere (bu durumda 1 saat) ayarlanır ve mm_events config , mm_events her zaman etkinleştirildiğinden emin olmak için periyodik olarak yeniden kurulması sağlanır. Sonuç olarak, Şekil 1 ve Şekil 2'de gösterilen veri türünü içeren bir hata raporu oluşturulur.