Statistik memori historis peristiwa MM

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_pagesnr_slab_reclaimable
nr_slab_unreclaimablenr_active_file
nr_inactive_filenr_active_anon
nr_inactive_anonworkingset_refault
workingset_activatenr_file_pages
pgpginpgpgout
pswpinpswpout
pgsteal_kswapd_dmapgsteal_kswapd_normal
pgsteal_kswapd_movablepgsteal_direct_dma
pgsteal_direct_normalpgsteal_direct_movable
pgscan_kswapd_dmapgscan_kswapd_normal
pgscan_kswapd_movablepgscan_direct_dma
pgscan_direct_normalpgscan_direct_movable
compact_migrate_scannedcompact_free_scanned

Peristiwa rekaman aktivitas terkait mm

vmscan/mm_vmscan_kswapd_wakevmscan/mm_vmscan_kswapd_sleep
vmscan/mm_vmscan_direct_reclaim_beginvmscan/mm_vmscan_direct_reclaim_end
compaction/mm_compaction_begincompaction/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:

Data vmstat yang digambarkan dalam grafik pada linimasa

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:

Temukan tab Query SQL dan klik untuk melihat ftrace dan mm_events yang direkam dan grafik

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.