دستگاههایی که در 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 UI مشاهده کرد.
داده های vmstat
فایل systrace.pftrace
را در Perfetto UI آپلود کنید تا داده های vmstat
را که در یک جدول زمانی نمودار شده است، همانطور که در شکل 1 نشان داده شده است، مشاهده کنید:
شکل 1. جدول زمانی داده های گرافیکی vmstat.
رویدادهای ردیابی
ftrace
mm_events
گرفته شده به صورت گرافیکی در تایم لاین نشان داده نمی شوند. برای مشاهده آنها، روی تب Query SQL ، که در شکل 2 نشان داده شده است، کلیک کنید:
شکل 2. برای دسترسی روی Query (SQL) کلیک کنید.
mm_events را فعال کنید
برای فعال کردن mm_events، sysprop persist.mm_events.enabled=true
از vendor init.rc
تنظیم کنید.
موارد زیر برای کاهش حافظه و ردپای CPU mm_events وجود دارد:
- یک نمونه
mm-events ftrace
از یک بافر 4 کیلوبایتی در هر CPU استفاده می کند. - محرک
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 شروع به ضبط رویدادهای حافظه vm_stats
و ftrace
می کند تا پایان دوره stop_delay_ms
پیکربندی شده، 36000 میلی ثانیه (6 دقیقه). مدت زمان ماشه روی مقدار زیادی تنظیم می شود (در این مورد، 1 ساعت) و mm_events config
به طور دوره ای مجدداً مسلح می شود تا اطمینان حاصل شود که mm_events
همیشه فعال است. در نتیجه یک گزارش اشکال تولید می شود که حاوی نوع داده های نشان داده شده در شکل 1 و شکل 2 است.