آمار سابقه حافظه رویدادهای MM

دستگاه‌هایی که با Android 12 و نسخه‌های بالاتر عرضه می‌شوند از mm_events استفاده می‌کنند، مجموعه‌ای از آمار مربوط به حافظه که به‌صورت دوره‌ای درحالی‌که سیستم فشار حافظه را تجربه می‌کند ضبط می‌شود. ‫mm_events با perfetto سازوکار ردیابی یکپارچه شده است و چون فقط زمانی فعال می‌شود که فشار روی حافظه تشخیص داده شود، سربار عملکردی اضافه‌شده آن حداقل است. جمع‌آوری آمار زمانی شروع می‌شود که سازوکارهای kswapd، direct reclaim,، یا compaction هسته فعال شوند و برای مدت زمان قابل‌پیکربندی فعال باقی می‌ماند تا آمار را در فواصل زمانی منظم ثبت کند.

به‌جای ارائه یک نمای فوری از وضعیت حافظه سیستم هنگام ثبت گزارش اشکال، mm_events نمای تاریخی مختصری از آمار حافظه در دوره‌های فشار حافظه نشان می‌دهد. آمار ثبت‌شده در جدول‌های زیر فهرست شده است.

فیلدهای vmstat

nr_free_pagesnr_slab_reclaimable
nr_slab_unreclaimablenr_active_file
nr_inactive_filenr_active_anon
nr_inactive_anonworkingset_refault
workingset_activatenr_file_pages
pgpginpgpgout
pswpinpswpout
pgsteal_kswapd_dmapgsteal_kswapd_normal
pgsteal_kswapd_movablepgsteal_direct_dma
pgsteal_direct_normalpgsteal_direct_movable
pgscan_kswapd_dmapgscan_kswapd_normal
pgscan_kswapd_movablepgscan_direct_dma
pgscan_direct_normalpgscan_direct_movable
compact_migrate_scannedcompact_free_scanned

رویدادهای ردیابی مرتبط با mm

vmscan/mm_vmscan_kswapd_wakevmscan/mm_vmscan_kswapd_sleep
vmscan/mm_vmscan_direct_reclaim_beginvmscan/mm_vmscan_direct_reclaim_end
compaction/mm_compaction_begincompaction/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 در خط زمان ترسیم شده است

شکل ۱. خط زمان داده‌های گرافیکی vmstat.

رویدادهای ftrace

ftrace mm_events ضبط‌شده به‌صورت گرافیکی در خط زمان نشان داده نمی‌شود. برای مشاهده آن‌ها، روی برگه پرسش SQL که در شکل ۲ نشان داده شده است کلیک کنید:

زبانه Query SQL را پیدا کنید و برای مشاهده ftrace و mm_events ضبط‌شده و نمودارشده کلیک کنید

شکل ۲. برای دسترسی، روی «پُرسمان (SQL)» کلیک کنید.

فعال کردن mm_events

برای فعال کردن mm_events،‏ sysprop persist.mm_events.enabled=true را از فروشنده init.rc تنظیم کنید.

.

موارد زیر برای کاهش ردپای حافظه و واحد پردازش مرکزی mm_events درنظر گرفته شده است:

  • نمونه mm-events ftrace از بافر ۴ کیلوبایتی برای هر CPU استفاده می‌کند.
  • محرک kmem_activity به یک بار در دقیقه محدود شده است.
  • هربار فقط ۱ جلسه ردیابی mm-events می‌تواند فعال باشد.

سفارشی‌سازی

mm_events از فایل پیکربندی ردیابی perfetto برای مشخص کردن آماری که باید درطول جلسه ردیابی ثبت شود استفاده می‌کند.

می‌توانید پیکربندی ردیابی Perfetto سفارشی در /vendor/etc/mm_events.cfg ارائه دهید. برای شرح فیلدهای پیکربندی ردیابی دردسترس، مستندات Perfetto را ببینید. برای پیکربندی ردیابی نمونه، این 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، یعنی ۳۶۰۰۰ میلی‌ثانیه (۶ دقیقه)، به پایان برسد. زمان اتمام راه‌انداز روی مقدار بزرگی تنظیم شده است (در این مورد، ۱ ساعت) و mm_events config به‌طور دوره‌ای دوباره مسلح می‌شود تا اطمینان حاصل شود که mm_events همیشه فعال است. گزارش اشکالی درنتیجه تولید می‌شود که حاوی نوع داده‌های نشان‌داده‌شده در شکل ۱ و شکل ۲ است.