Perangkat yang diluncurkan pada Android 12 dan lebih tinggi menggunakan mm_events
, kumpulan statistik terkait memori yang diambil secara berkala saat sistem mengalami tekanan memori. mm_events
terintegrasi dengan mekanisme penelusuran perfetto
, dan karena diaktifkan hanya ketika tekanan memori terdeteksi, overhead kinerja tambahannya minimal. Pengumpulan statistik dimulai ketika mekanisme kswapd
, direct reclaim,
atau compaction
kernel diaktifkan, dan tetap aktif selama jangka waktu yang dapat dikonfigurasi untuk menangkap statistik secara berkala.
Daripada memberikan snapshot satu kali dari status memori sistem ketika laporan bug diajukan, mm_events
menunjukkan tampilan historis singkat dari statistik memori selama periode tekanan memori. Statistik yang diambil 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 |
Analisis data mm_events
Jika mm_events
diaktifkan, laporan bug untuk kejadian yang diambil 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 peristiwa ftrace
dapat dilihat untuk dianalisis menggunakan Perfetto UI .
data vmstat
Unggah file systrace.pftrace
ke Perfetto UI untuk melihat data vmstat
digambarkan pada timeline seperti yang ditunjukkan pada Gambar 1:
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 , terletak seperti yang ditunjukkan pada Gambar 2:
Gambar 2. Klik Query (SQL) untuk mengakses.
Aktifkan mm_events
Untuk mengaktifkan mm_events, setel sysprop persist.mm_events.enabled=true
dari vendor init.rc
.
Berikut ini diterapkan untuk mengurangi jejak memori dan CPU mm_events:
- Instans
mm-events ftrace
menggunakan buffer 4 KB per CPU. - Pemicu
kmem_activity
dibatasi kecepatannya menjadi satu kali per menit. - Hanya sesi pelacakan
mm-events
yang dapat aktif kapan saja.
Kustomisasi
mm_events
menggunakan file konfigurasi pelacakan perfetto
untuk menentukan statistik mana yang akan diambil selama sesi penelusuran.
Anda dapat memberikan konfigurasi pelacakan Perfetto khusus di /vendor/etc/mm_events.cfg
. Untuk deskripsi bidang konfigurasi pelacakan yang tersedia, lihat Perfetto Docs . Untuk contoh konfigurasi pelacakan, lihat contoh mm_events.cfg
ini.
Bidang penting yang harus disertakan dalam konfigurasi pelacakan Anda untuk memastikannya dipicu 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 perfetto kmem_activity
dan sesi pelacakan Perfetto mulai menangkap peristiwa memori vm_stats
dan ftrace
hingga akhir periode stop_delay_ms
yang dikonfigurasi, 36000 ms (6 menit). Batas waktu pemicu disetel ke nilai yang besar (dalam hal ini, 1 jam) dan mm_events config
dipersenjatai kembali secara berkala untuk memastikan bahwa mm_events
selalu diaktifkan. Hasilnya, laporan bug dihasilkan, berisi tipe data yang ditunjukkan pada Gambar 1 dan Gambar 2 .