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
चालू है, तो डिवाइस में ज़्यादा मेमोरी का दबाव पड़ने के तुरंत बाद कैप्चर किए गए इवेंट की गड़बड़ी की रिपोर्ट, FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
में ज़िप की गई रिपोर्ट के तौर पर, mm_events
के पुराने आंकड़े उपलब्ध कराती हैं
Perfetto यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, विश्लेषण के लिए vmstat
डेटा और ftrace
इवेंट, दोनों देखे जा सकते हैं.
vmstat डेटा
vmstat
डेटा को टाइमलाइन पर ग्राफ़ किया गया है, जैसा कि फ़िगर 1 में दिखाया गया है. इसे देखने के लिए, Perfetto यूज़र इंटरफ़ेस (यूआई) में systrace.pftrace
फ़ाइल अपलोड करें:
पहली इमेज. 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 के दस्तावेज़ देखें. ट्रैक कॉन्फ़िगरेशन का सैंपल देखने के लिए, यह 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 ट्रैक सेशन, कॉन्फ़िगर की गई stop_delay_ms
अवधि, 36,000 मिलीसेकंड (6 मिनट) के खत्म होने तक, vm_stats
और ftrace
मेमोरी इवेंट कैप्चर करना शुरू कर देता है. ट्रिगर टाइम आउट को बड़ी वैल्यू (इस मामले में, एक घंटे) पर सेट किया गया है और mm_events config
को समय-समय पर फिर से चालू किया जाता है, ताकि यह पक्का किया जा सके कि mm_events
हमेशा चालू रहे. इस वजह से, गड़बड़ी की एक रिपोर्ट जनरेट होती है. इसमें पहली इमेज और दूसरी इमेज में दिखाया गया डेटा होता है.