تستخدم الأجهزة التي تعمل بنظام التشغيل 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
التي تم رصدها بشكل بياني على المخطط الزمني. لاطلاع على هذه الطلبات، انقر على علامة التبويب طلب 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
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
تشغيل عامل تشغيل kmem_activity
في أداة Perfetto
وتبدأ جلسة التتبُّع في أداة Perfetto في تسجيل أحداث vm_stats
وftrace
في ملف عناوين الذاكرة
إلى نهاية فترة stop_delay_ms
التي تم ضبطها، وهي 36, 000 ملي ثانية (6 دقائق).
يتم ضبط مهلة التفعيل على قيمة كبيرة (ساعة واحدة في هذه الحالة) ويتم إعادة تنشيط mm_events config
بشكل دوري لضمان أن يكون mm_events
مفعّلاً دائمًا. نتيجةً لذلك، يتم إنشاء تقرير أخطاء يحتوي على نوع البيانات الموضَّحة في الشكل 1
والشكل 2.