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:
Ş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:
Ş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.