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