Perangkat yang diluncurkan di Android 12 dan yang lebih tinggi
menggunakan mm_events
, sekumpulan statistik terkait memori yang diambil
secara berkala saat sistem mengalami tekanan memori. mm_events
terintegrasi dengan mekanisme pelacakan perfetto
, dan karena hanya diaktifkan
saat tekanan memori terdeteksi, overhead performa tambahannya minimal. Pengumpulan
statistik dimulai saat mekanisme kswapd
, direct reclaim,
, atau
compaction
kernel diaktifkan, dan tetap aktif selama periode waktu
yang dapat dikonfigurasi
untuk mencatat statistik pada interval yang teratur.
Daripada memberikan snapshot satu kali dari status memori sistem saat laporan
bug diajukan, mm_events
menampilkan tampilan histori singkat tentang statistik
memori selama periode tekanan memori. Statistik yang diambil 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 segera diambil
setelah perangkat mulai mengalami tekanan memori tinggi akan memberikan statistik
mm_events
historis, dalam bentuk laporan yang dikompresi dalam
FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Data vmstat
dan peristiwa ftrace
dapat dilihat untuk analisis menggunakan
UI Perfetto.
Data vmstat
Upload file systrace.pftrace
ke UI Perfetto untuk melihat data vmstat
yang digambarkan dalam linimasa seperti yang ditunjukkan pada Gambar 1:
Gambar 1. Linimasa data grafis vmstat.
Peristiwa ftrace
ftrace
mm_events
yang diambil 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.
Mengaktifkan mm_events
Untuk mengaktifkan mm_events, tetapkan persist.mm_events.enabled=true
sysprop dari init.rc
vendor.
Berikut adalah tindakan yang dilakukan untuk mengurangi jejak memori dan CPU mm_events:
- Instance
mm-events ftrace
menggunakan buffer 4 KB per CPU. - Pemicu
kmem_activity
dibatasi kapasitasnya hingga satu kali per menit. - Hanya 1 sesi rekaman aktivitas
mm-events
yang dapat aktif kapan saja.
Penyesuaian
mm_events
menggunakan file konfigurasi rekaman aktivitas perfetto
untuk menentukan statistik yang akan diambil
selama sesi perekaman aktivitas.
Anda dapat memberikan konfigurasi rekaman aktivitas Perfetto kustom di /vendor/etc/mm_events.cfg
.
Untuk 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 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 kmem_activity
Perfetto dan sesi rekaman aktivitas Perfetto mulai merekam peristiwa memori
vm_stats
dan ftrace
hingga akhir periode stop_delay_ms
yang dikonfigurasi, 36.000 md (6 menit).
Waktu tunggu pemicu ditetapkan ke nilai besar (dalam hal ini, 1 jam) dan
mm_events config
diaktifkan kembali secara berkala untuk memastikan bahwa mm_events
selalu diaktifkan. Sebagai hasilnya, laporan bug
akan dibuat, yang berisi jenis data yang ditunjukkan pada Gambar 1
dan Gambar 2.