מכשירים המופעלים ב-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:
איור 1. ציר זמן של נתונים גרפיים של vmstat.
אירועי ftrace
ה- ftrace
mm_events
שנלכדו אינם מוצגים בצורה גרפית על ציר הזמן. כדי להציג אותם, לחץ על הכרטיסייה Query SQL , הממוקמת כפי שמוצג באיור 2:
איור 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 .