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