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