מכשירים המופעלים ב-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
אירועי 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 .