סטטיסטיקת זיכרון היסטורית של אירועי MM

מכשירים המופעלים ב-Android 12 ומעלה משתמשים ב- mm_events , קבוצה של נתונים סטטיסטיים הקשורים לזיכרון שנלכדים מעת לעת בזמן שמערכת חווה לחץ זיכרון. mm_events משולב עם מנגנוני מעקב perfetto , ומכיוון שהוא מופעל רק כאשר מתגלה לחץ זיכרון, תוספת הביצועים שלו היא מינימלית. איסוף הסטטיסטיקה מתחיל כאשר מנגנוני kswapd , direct reclaim, או compaction מופעלים, והוא נשאר פעיל למשך פרק זמן שניתן להגדרה כדי ללכוד נתונים סטטיסטיים במרווחי זמן קבועים.

במקום לספק תמונת מצב חד-פעמית של מצב זיכרון המערכת בעת הגשת דוח באג, mm_events מציג תצוגה היסטורית קצרה של סטטיסטיקת הזיכרון בתקופות של לחץ זיכרון. הנתונים הסטטיסטיים שנלכדו מופיעים בטבלאות הבאות.

שדות 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

אירועי עקבות הקשורים למ"מ

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

נתח נתוני mm_events

אם mm_events מופעל, דוחות הבאגים עבור האירועים שנלכדו זמן קצר לאחר שהמכשיר מתחיל לחוות לחץ זיכרון גבוה מספקים את הנתונים הסטטיסטיים ההיסטוריים mm_events , בצורה של דוח דחוס ב- FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.

ניתן לצפות גם בנתוני vmstat וגם באירועי ftrace לניתוח באמצעות ממשק המשתמש של Perfetto .

נתוני vmstat

העלה את הקובץ systrace.pftrace לממשק המשתמש של Perfetto כדי לראות את נתוני vmstat בתרשים על ציר זמן כפי שמוצג באיור 1:

vmstat data graphed on a timeline

איור 1. ציר זמן של נתונים גרפיים של vmstat.

אירועי ftrace

ה- ftrace mm_events שנלכדו אינם מוצגים בצורה גרפית על ציר הזמן. כדי להציג אותם, לחץ על הכרטיסייה Query SQL , הממוקמת כפי שמוצג באיור 2:

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

איור 2. לחץ על שאילתה (SQL) כדי לגשת.

אפשר mm_events

כדי להפעיל mm_events, הגדר את sysprop persist.mm_events.enabled=true מהספק init.rc .

הדברים הבאים קיימים כדי להפחית את טביעת הרגל של הזיכרון והמעבד של mm_events:

  • מופע mm-events ftrace משתמש במאגר של 4 KB למעבד.
  • ההדק של kmem_activity מוגבל לקצב אחד לדקה.
  • רק הפעלת מעקב אחר mm-events יכולה להיות פעילה בכל עת.

התאמה אישית

mm_events משתמש בקובץ תצורת מעקב פר perfetto כדי לציין אילו נתונים סטטיסטיים ללכוד במהלך הפעלת המעקב.

אתה יכול לספק תצורת מעקב מותאמת אישית של Perfetto ב- /vendor/etc/mm_events.cfg . לתיאור של שדות תצורת המעקב הזמינים, עיין ב- Perfetto Docs . לתצורת מעקב לדוגמה, ראה דוגמה זו של mm_events.cfg .

השדות החשובים שיש לכלול בתצורת המעקב שלך כדי להבטיח שהוא יופעל על ידי לחץ זיכרון מוצגים בקטע הקוד:

# 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
  }
}

בתצורה זו mm_events יוזם את ההדק של perfetto kmem_activity והפעלת Perfetto trace מתחילה ללכוד vm_stats ואירועי זיכרון ftrace עד לתום תקופת stop_delay_ms המוגדרת, 36000 ms (6 דקות). פסק הזמן של ההדק מוגדר לערך גדול (במקרה זה, שעה) mm_events config מופעלת מדי פעם מחדש כדי להבטיח ש- mm_events תמיד מופעלת. כתוצאה מכך נוצר דוח באג, המכיל את סוג הנתונים המוצג באיור 1 ובאיור 2 .