تستخدم الأجهزة التي تعمل بنظام التشغيل Android 12 والإصدارات الأحدث mm_events
، وهي مجموعة من الإحصائيات المتعلقة بالذاكرة والتي يتم التقاطها بشكل دوري أثناء تعرض النظام لضغط الذاكرة. تم دمج mm_events
مع آليات تتبع perfetto
، ونظرًا لأنه يتم تنشيطه فقط عند اكتشاف ضغط الذاكرة، فإن الحمل الإضافي للأداء الخاص به يكون في حده الأدنى. تبدأ عملية جمع الإحصائيات عندما يتم تنشيط آليات kswapd
أو direct reclaim,
أو compaction
بالنواة، وتظل نشطة لفترة زمنية قابلة للتكوين لالتقاط الإحصائيات على فترات منتظمة.
بدلاً من تقديم لقطة لمرة واحدة لحالة ذاكرة النظام عند تقديم تقرير خطأ، تعرض mm_events
عرضًا تاريخيًا موجزًا لإحصائيات الذاكرة أثناء فترات ضغط الذاكرة. يتم سرد الإحصائيات التي تم التقاطها في الجداول التالية.
حقول فمستات
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 .
بيانات فمستات
قم بتحميل ملف systrace.pftrace
إلى Perfetto UI لرؤية بيانات vmstat
المرسومة بيانيًا على مخطط زمني كما هو موضح في الشكل 1:
الشكل 1. الجدول الزمني للبيانات الرسومية vmstat.
أحداث ftrace
لا يتم عرض mm_events
ftrace
الملتقطة بيانياً على المخطط الزمني. لعرضها، انقر فوق علامة التبويب استعلام SQL ، الموجودة كما هو موضح في الشكل 2:
الشكل 2. انقر فوق الاستعلام (SQL) للوصول.
تمكين mm_events
لتمكين mm_events، قم بتعيين sysprop persist.mm_events.enabled=true
من البائع 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
مشغل perfetto kmem_activity
وتبدأ جلسة تتبع Perfetto في التقاط أحداث ذاكرة vm_stats
و ftrace
حتى نهاية فترة stop_delay_ms
التي تم تكوينها، 36000 مللي ثانية (6 دقائق). يتم تعيين مهلة التشغيل على قيمة كبيرة (ساعة واحدة في هذه الحالة) ويتم إعادة تشغيل mm_events config
بشكل دوري لضمان تمكين mm_events
دائمًا. ونتيجة لذلك، يتم إنشاء تقرير خطأ، يحتوي على نوع البيانات الموضحة في الشكل 1 والشكل 2 .