تستخدم الأجهزة التي تعمل بنظام التشغيل 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 |
أحداث التتبُّع ذات الصلة بـ mm
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 التي تم التقاطها بشكل بياني على المخطط الزمني. لعرضها، انقر على علامة التبويب استعلام SQL، كما هو موضّح في الشكل 2:
الشكل 2. انقر على "طلب بحث (SQL)" للوصول إلى البيانات.
تفعيل mm_events
لتفعيل mm_events، اضبط sysprop persist.mm_events.enabled=true من vendor
init.rc.
تم اتّخاذ الإجراءات التالية للحدّ من تأثير mm_events على الذاكرة ووحدة المعالجة المركزية:
- يستخدم مثيل
mm-events ftraceذاكرة تخزين مؤقت بحجم 4 كيلوبايت لكل وحدة معالجة مركزية. - يتم الحدّ من معدّل تفعيل مشغّل
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، أي 36, 000 ملي ثانية (6 دقائق).
يتم ضبط المهلة الزمنية للإجراء على قيمة كبيرة (ساعة واحدة في هذه الحالة) ويتم
mm_events config
إعادة تفعيلها بشكل دوري لضمان تفعيل mm_events دائمًا. نتيجةً لذلك، يتم إنشاء تقرير خطأ يتضمّن نوع البيانات الموضّح في الشكل 1 والشكل 2.