Statistik memori sejarah peristiwa MM

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:

vmstat data graphed on a timeline

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:

Locate the Query SQL tab and click to view ftrace and mm_events captured and graphed

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 .