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