एंड्रॉइड 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
सक्षम है, तो डिवाइस में उच्च मेमोरी दबाव का अनुभव शुरू होने के तुरंत बाद कैप्चर होने वाली घटनाओं के लिए बग रिपोर्ट FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
में ज़िपित रिपोर्ट के रूप में ऐतिहासिक mm_events
आँकड़े प्रदान करती है। FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
Perfetto UI का उपयोग करके विश्लेषण के लिए vmstat
डेटा और ftrace
इवेंट दोनों को देखा जा सकता है।
वीएमस्टैट डेटा
जैसा कि चित्र 1 में दिखाया गया है, टाइमलाइन पर ग्राफ़ किए गए vmstat
डेटा को देखने के लिए systrace.pftrace
फ़ाइल को Perfetto UI पर अपलोड करें:
चित्र 1. vmstat ग्राफ़िकल डेटा की समयरेखा।
फ़ुट्रेस घटनाएँ
कैप्चर किए गए ftrace
mm_events
टाइमलाइन पर ग्राफ़िक रूप से नहीं दिखाया गया है। उन्हें देखने के लिए, क्वेरी SQL टैब पर क्लिक करें, जैसा कि चित्र 2 में दिखाया गया है:
चित्र 2. एक्सेस करने के लिए क्वेरी (एसक्यूएल) पर क्लिक करें।
mm_events सक्षम करें
mm_events को सक्षम करने के लिए, विक्रेता init.rc
से sysproppersist.mm_events.enabled persist.mm_events.enabled=true
सेट करें।
mm_events की मेमोरी और सीपीयू फ़ुटप्रिंट को कम करने के लिए निम्नलिखित उपाय मौजूद हैं:
- एक
mm-events ftrace
इंस्टेंस प्रति सीपीयू 4 केबी बफर का उपयोग करता है। -
kmem_activity
ट्रिगर की दर प्रति मिनट एक बार तक सीमित है। - केवल 1
mm-events
ट्रेस सत्र किसी भी समय सक्रिय हो सकता है।
अनुकूलन
ट्रेसिंग सत्र के दौरान कौन से आँकड़े कैप्चर करने हैं, यह निर्दिष्ट करने के लिए mm_events
एक perfetto
ट्रेस कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है।
आप /vendor/etc/mm_events.cfg
में एक कस्टम पर्फ़ेटो ट्रेस कॉन्फ़िगरेशन प्रदान कर सकते हैं। उपलब्ध ट्रेस कॉन्फ़िगरेशन फ़ील्ड के विवरण के लिए, पर्फ़ेटो डॉक्स देखें। नमूना ट्रेस कॉन्फ़िगरेशन के लिए, यह 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 मिनट) के अंत तक कैप्चर करना शुरू कर देता है। ट्रिगर टाइमआउट को एक बड़े मान पर सेट किया गया है (इस मामले में, 1 घंटा) और mm_events config
समय-समय पर पुन: व्यवस्थित किया जाता है ताकि यह सुनिश्चित हो सके कि mm_events
हमेशा सक्षम है। परिणामस्वरूप एक बग रिपोर्ट तैयार होती है, जिसमें चित्र 1 और चित्र 2 में दिखाए गए डेटा का प्रकार शामिल होता है।