Perangkat yang diluncurkan di Android 12 dan yang lebih tinggi menggunakan mm_events
, kumpulan statistik terkait memori yang ditangkap secara berkala saat sistem mengalami tekanan memori. mm_events
terintegrasi dengan mekanisme pelacakan perfetto
, dan karena hanya diaktifkan ketika tekanan memori terdeteksi, overhead kinerja tambahannya minimal. Pengumpulan statistik dimulai ketika kswapd
kernel, direct reclaim,
atau mekanisme compaction
diaktifkan, dan tetap aktif selama periode waktu yang dapat dikonfigurasi untuk menangkap statistik secara berkala.
Alih-alih memberikan snapshot satu kali dari status memori sistem saat laporan bug diajukan, mm_events
menunjukkan tampilan historis singkat dari statistik memori selama periode tekanan memori. Statistik yang ditangkap tercantum dalam tabel berikut.
bidang 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 jejak 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 ditangkap segera setelah perangkat mulai mengalami tekanan memori tinggi memberikan statistik mm_events
historis, dalam bentuk laporan zip di FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Data vmstat
dan kejadian ftrace
dapat dilihat untuk analisis menggunakan Perfetto UI .
data vmstat
Upload file systrace.pftrace
ke Perfetto UI untuk melihat grafik data vmstat
pada timeline seperti di bawah ini.
Gambar 1. Garis waktu data grafis vmstat
acara ftrace
ftrace
mm_events
yang diambil tidak ditampilkan secara grafis di timeline. Untuk melihatnya, klik tab Query SQL , yang terletak seperti yang ditunjukkan pada Gambar 2.
Gambar 2. Klik Query (SQL) untuk mengakses
Mengaktifkan mm_events
Untuk mengaktifkan mm_events, setel sysprop persist.mm_events.enabled=true
dari vendor init.rc
.
Berikut ini adalah tempat untuk mengurangi jejak memori dan CPU mm_events:
- Instance
mm-events ftrace
menggunakan buffer 4 KB per CPU. - Pemicu
kmem_activity
dibatasi kecepatan hingga satu kali per menit. - Hanya sesi pelacakan
mm-events
dapat aktif setiap saat.
Kustomisasi
mm_events
menggunakan file konfigurasi jejak perfetto
untuk menentukan statistik mana yang akan diambil selama sesi penelusuran.
Anda dapat memberikan konfigurasi jejak Perfetto khusus di /vendor/etc/mm_events.cfg
. Untuk deskripsi bidang konfigurasi jejak yang tersedia, lihat Dokumen Perfetto . Untuk konfigurasi jejak sampel, lihat contoh mm_events.cfg
ini.
Bidang penting untuk disertakan dalam konfigurasi jejak Anda untuk memastikannya dipicu oleh tekanan memori ditunjukkan dalam cuplikan di bawah ini.
# 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 perfetto kmem_activity
dan sesi pelacakan Perfetto mulai menangkap vm_stats
dan kejadian memori ftrace
hingga akhir periode stop_delay_ms
yang dikonfigurasi, 36000 md (6 menit). Batas waktu pemicu diatur ke nilai yang besar (dalam hal ini, 1 jam) dan mm_events config
secara berkala dipersenjatai kembali untuk memastikan bahwa mm_events
selalu diaktifkan. Sebuah laporan bug akan dihasilkan sebagai hasilnya, yang berisi jenis data yang ditunjukkan pada Gambar 1 dan Gambar 2 .