Android 12 ve sonraki sürümlerde kullanıma sunulan cihazlar, sistem bellek baskısı altındayken düzenli olarak yakalanan bellekle ilgili istatistikler olan mm_events
'ten yararlanır. mm_events
, perfetto
izleme mekanizmalarıyla entegre edilmiştir ve yalnızca bellek baskısı 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 istatistikleri düzenli aralıklarla yakalamak için yapılandırılabilir bir süre boyunca etkin kalır.
mm_events
, bir hata raporu gönderildiğinde sistem bellek durumunun tek seferlik bir 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. 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 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 bir 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ış rapor biçiminde geçmiş mm_events
istatistiklerini sağlar.
Hem vmstat
verileri hem de ftrace
etkinlikleri, analiz için Perfetto kullanıcı arayüzü kullanılarak görüntülenebilir.
vmstat verileri
vmstat
verilerini Şekil 1'de gösterildiği gibi zaman çizelgesinde grafik halinde görmek için systrace.pftrace
dosyasını Perfetto kullanıcı arayüzüne yükleyin:
Şekil 1. 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 SQL Sorgusu sekmesini tıklayın:
Şekil 2. Erişmek için Sorgu (SQL)'yu tıklayın.
mm_events'ı etkinleştir
mm_events etkinleştirmek için init.rc
tedarikçi firmanın sysprop persist.mm_events.enabled=true
ayarını yapın.
Aşağıdakiler, mm_events'in belleği ve CPU ayak izini azaltmak için uygulanmaktadır:
mm-events ftrace
örnekleri, CPU başına 4 KB arabellek kullanır.kmem_activity
tetikleyicisi, dakikada bir kez olacak şekilde hız sınırına sahiptir.- 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 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ırması alanlarının açıklaması için Perfetto Belgeleri'ne bakın.
Örnek iz yapılandırması için bu mm_events.cfg
örneğine bakın.
Hafıza baskısı nedeniyle tetiklenmesini sağlamak için izleme yapılandırmanıza dahil edilmesi gereken önemli alanlar snippet'te gösterilmiştir:
# 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ılmış stop_delay_ms
döneminin (36.000 ms, 6 dakika) sonuna kadar vm_stats
ve ftrace
bellek etkinliklerini yakalamaya başlar.
Tetikleyici zaman aşımı büyük bir değere (bu durumda 1 saat) ayarlanır ve mm_events
'ın her zaman etkin olmasını sağlamak için mm_events config
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.