Android 12 ve sonraki sürümlerde başlatılan cihazlar, bir sistem bellek baskısı yaşarken periyodik olarak yakalanan bellekle ilgili bir dizi istatistik olan mm_events
kullanır. mm_events
, perfetto
izleme mekanizmalarıyla entegredir ve yalnızca bellek basıncı 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 düzenli aralıklarla istatistikleri yakalamak için yapılandırılabilir bir süre boyunca etkin kalır.
Bir hata raporu dosyalandığında sistem bellek durumunun bir kerelik 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 iz 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 etme
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.
içinde sıkıştırılmış bir rapor biçiminde geçmiş mm_events
istatistiklerini sağlar. FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Perfetto UI kullanılarak analiz için hem vmstat
verileri hem de ftrace
olayları görüntülenebilir.
vmstat verileri
Aşağıda gösterildiği gibi bir zaman çizelgesinde grafik olarak gösterilen vmstat
verilerini görmek için systrace.pftrace
dosyasını Perfetto UI'ye yükleyin.
Şekil 1. vmstat grafik verilerinin zaman çizelgesi
ftrace olayları
Yakalanan ftrace
mm_events
, zaman çizelgesinde grafik olarak gösterilmez. Bunları görüntülemek için, Şekil 2'de gösterildiği gibi bulunan SQL Sorgula sekmesine tıklayın.
Şekil 2. Erişmek için Sorgu'ya (SQL) tıklayın
mm_events'i etkinleştirme
mm_events'i etkinleştirmek için, satıcı init.rc
sysprop persist.mm_events.enabled=true
değerini 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 arabellek kullanır. -
kmem_activity
tetikleyicisi, dakikada bir kez hız ile sınırlıdır. - Herhangi bir zamanda sadece 1
mm-events
izleme oturumu aktif 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ırma alanlarının açıklaması için Perfetto Belgelerine bakın. Örnek bir izleme yapılandırması için bu mm_events.cfg
örneğine bakın.
Bellek baskısı tarafından tetiklenmesini sağlamak için izleme yapılandırmanıza dahil edilecek önemli alanlar aşağıdaki 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
döneminin (6 dakika) sonuna kadar vm_stats
ve ftrace
bellek olaylarını yakalamaya başlar. Tetikleme zaman aşımı büyük bir değere ayarlanır (bu durumda, 1 saat) ve mm_events
her zaman etkin olduğundan emin olmak için mm_events config
periyodik olarak yeniden başlatılır. Sonuç olarak, Şekil 1 ve Şekil 2'de gösterilen veri türünü içeren bir hata raporu oluşturulur.