أحداث MM - إحصائيات الذاكرة التاريخية

تستخدم الأجهزة التي يتم تشغيلها على نظام Android 12 والإصدارات الأحدث mm_events ، وهي مجموعة من الإحصائيات المتعلقة بالذاكرة يتم التقاطها بشكل دوري أثناء تعرض النظام لضغط الذاكرة. mm_events مع آليات التتبع perfetto ، ولأنها يتم تنشيطها فقط عند اكتشاف ضغط الذاكرة ، فإن حمل الأداء الإضافي الخاص بها يكون ضئيلاً. يبدأ جمع الإحصائيات عندما يتم تنشيط آليات kswapd أو direct reclaim, أو compaction الخاصة بـ kernel ، ويظل نشطًا لفترة زمنية قابلة للتكوين لالتقاط الإحصائيات على فترات منتظمة.

بدلاً من تقديم لقطة لمرة واحدة لحالة ذاكرة النظام عند تقديم تقرير بالأخطاء ، تعرض 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 UI لرؤية بيانات vmstat مرسومة على مخطط زمني كما هو موضح أدناه.

vmstat data graphed on a timeline

الشكل 1. الجدول الزمني للبيانات الرسومية vmstat

أحداث ftrace

لا يتم عرض mm_events ftrace تم التقاطها بشكل بياني في المخطط الزمني. لعرضها ، انقر فوق علامة التبويب Query SQL ، الموجودة كما هو موضح في الشكل 2.

Locate the Query SQL tab and click to view ftrace and mm_events captured and graphed

الشكل 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 .