Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Acara MM - Statistik Memori Historis

Perangkat yang diluncurkan di Android 12 dan lebih tinggi memanfaatkan mm_events , satu set statistik memori-terkait yang bisa ditangkap secara berkala sementara tekanan sistem pengalaman memori. mm_events terintegrasi dengan perfetto mekanisme pelacakan, dan karena itu diaktifkan hanya bila tekanan memori terdeteksi, kinerjanya menambahkan overhead minimal. Koleksi statistik dimulai ketika kernel kswapd , direct reclaim, atau compaction mekanisme bisa diaktifkan, dan tetap aktif selama periode dikonfigurasi waktu statistik penangkapan secara berkala.

Alih-alih menyediakan satu kali snapshot dari negara memori sistem saat laporan bug diajukan, mm_events acara singkat pandangan sejarah 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 bisa ditangkap segera setelah perangkat mulai mengalami tekanan memori tinggi memberikan sejarah mm_events statistik, dalam bentuk laporan zip di FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.

Kedua vmstat data dan ftrace peristiwa dapat dilihat untuk analisis menggunakan Perfetto UI .

data vmstat

Upload systrace.pftrace file Perfetto UI untuk melihat vmstat data yang digambarkan pada timeline seperti yang ditunjukkan di bawah ini.

vmstat data graphed on a timeline

Gambar 1. Timeline dari vmstat data grafis

acara ftrace

The ditangkap ftrace mm_events tidak ditampilkan secara grafis pada 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

Mengaktifkan mm_events

Untuk mengaktifkan mm_events, set sysprop persist.mm_events.enabled=true dari vendor init.rc .

Berikut ini adalah tempat untuk mengurangi jejak memori dan CPU mm_events:

  • Sebuah mm-events ftrace misalnya menggunakan buffer 4 KB per CPU.
  • The kmem_activity pemicu adalah tingkat-terbatas sekali per menit.
  • Hanya 1 mm-events sesi jejak dapat aktif setiap saat.

Kustomisasi

mm_events menggunakan perfetto jejak file konfigurasi untuk menentukan statistik untuk menangkap selama sesi tracing.

Anda dapat memberikan Perfetto kustom jejak config di /vendor/etc/mm_events.cfg . Untuk penjelasan dari bidang jejak konfigurasi yang tersedia, lihat Perfetto Docs . Untuk konfigurasi jejak sampel, lihat ini mm_events.cfg contoh.

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 mm_events inisiat yang perfetto kmem_activity memicu dan sesi jejak Perfetto dimulai menangkap vm_stats dan ftrace peristiwa memori sampai akhir dikonfigurasi stop_delay_ms periode, 36000 ms (6 menit). Pemicu batas waktu diatur ke nilai yang besar (dalam hal ini, 1 jam) dan mm_events config yang dipersenjatai kembali secara berkala untuk memastikan bahwa mm_events selalu diaktifkan. Sebuah laporan bug akan dihasilkan sebagai hasilnya, yang berisi jenis data yang ditampilkan dalam Gambar 1 dan Gambar 2 .