Perangkat yang diluncurkan di Android 12 dan yang lebih tinggi
menggunakan mm_events, serangkaian statistik terkait memori yang diambil
secara berkala saat sistem mengalami tekanan memori. mm_events diintegrasikan dengan mekanisme pelacakan perfetto, dan karena hanya diaktifkan saat tekanan memori terdeteksi, overhead performa tambahan yang ditambahkan minimal. Pengumpulan statistik dimulai saat mekanisme kswapd, direct reclaim,, atau compaction kernel diaktifkan, dan tetap aktif selama jangka waktu yang dapat dikonfigurasi untuk merekam statistik secara berkala.
Daripada memberikan snapshot satu kali dari status memori sistem saat laporan bug dikirimkan, mm_events menampilkan tampilan historis singkat dari statistik memori selama periode tekanan memori. Statistik yang direkam tercantum
dalam tabel berikut.
Kolom vmstat
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 |
Peristiwa rekaman aktivitas terkait mm
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 |
Menganalisis data mm_events
Jika mm_events diaktifkan, laporan bug untuk peristiwa yang direkam segera setelah perangkat mulai mengalami tekanan memori tinggi akan memberikan statistik mm_events historis, dalam bentuk laporan yang di-zip di FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Data vmstat dan peristiwa ftrace dapat dilihat untuk dianalisis menggunakan
Perfetto UI.
Data vmstat
Upload file systrace.pftrace ke UI Perfetto untuk melihat data systrace.pftrace yang digambarkan pada linimasa seperti yang ditunjukkan pada Gambar 1:vmstat
Gambar 1. Linimasa data grafis vmstat.
Peristiwa ftrace
ftrace mm_events yang direkam tidak ditampilkan secara grafis di linimasa. Untuk
melihatnya, klik tab Query SQL, yang terletak seperti yang ditunjukkan pada Gambar 2:
Gambar 2. Klik Kueri (SQL) untuk mengakses.
Aktifkan mm_events
Untuk mengaktifkan mm_events, tetapkan sysprop persist.mm_events.enabled=true dari vendor
init.rc.
Berikut adalah hal-hal yang dilakukan untuk mengurangi jejak memori dan CPU mm_events:
- Instance
mm-events ftracemenggunakan buffer 4 KB per CPU. - Pemicu
kmem_activitydibatasi hingga satu kali per menit. - Hanya 1 sesi rekaman aktivitas
mm-eventsyang dapat aktif kapan saja.
Penyesuaian
mm_events menggunakan file konfigurasi rekaman aktivitas perfetto untuk menentukan statistik yang akan direkam selama sesi perekaman aktivitas.
Anda dapat memberikan konfigurasi rekaman aktivitas Perfetto kustom di /vendor/etc/mm_events.cfg.
Untuk mengetahui deskripsi kolom konfigurasi rekaman aktivitas yang tersedia, lihat Dokumen Perfetto.
Untuk contoh konfigurasi rekaman aktivitas, lihat contoh
mm_events.cfg
ini.
Kolom penting yang harus disertakan dalam konfigurasi rekaman aktivitas untuk memastikan pemicuannya oleh tekanan memori ditampilkan dalam cuplikan:
# 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
}
}
Dalam konfigurasi ini, mm_events memulai pemicu kmem_activity Perfetto
dan sesi rekaman aktivitas Perfetto mulai merekam peristiwa memori vm_stats dan ftrace
hingga akhir periode stop_delay_ms yang dikonfigurasi, 36000 md (6 menit).
Waktu tunggu pemicu ditetapkan ke nilai yang besar (dalam hal ini, 1 jam) dan
mm_events config
dipersenjatai kembali secara berkala untuk memastikan mm_events selalu diaktifkan. Laporan bug
dibuat sebagai hasilnya, yang berisi jenis data yang ditampilkan dalam Gambar 1
dan Gambar 2.