MM Events - סטטיסטיקת זיכרון היסטורית

מכשירים המופעלים ב-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 בתרשים על ציר זמן כפי שמוצג להלן.

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