MM इवेंट की पुरानी मेमोरी के आंकड़े

Android 12 और उसके बाद के वर्शन पर लॉन्च होने वाले डिवाइस, mm_events का इस्तेमाल करते हैं. यह मेमोरी से जुड़े आंकड़ों का एक सेट है, जो सिस्टम पर मेमोरी का दबाव होने पर, समय-समय पर कैप्चर किया जाता है. mm_events को perfetto ट्रैकिंग मेकेनिज्म के साथ इंटिग्रेट किया गया है. यह सिर्फ़ तब चालू होता है, जब मेमोरी में दबाव का पता चलता है. इसलिए, इसकी परफ़ॉर्मेंस पर इसका असर कम होता है. आंकड़ों को इकट्ठा करने की प्रोसेस तब शुरू होती है, जब कर्नेल के kswapd, direct reclaim, या compaction मेकेनिज्म चालू हो जाते हैं. यह प्रोसेस, तय समयावधि के लिए चालू रहती है, ताकि नियमित अंतराल पर आंकड़े कैप्चर किए जा सकें.

गड़बड़ी की शिकायत दर्ज करने पर, सिस्टम की मेमोरी की स्थिति का एक बार का स्नैपशॉट देने के बजाय, mm_events मेमोरी के दबाव के दौरान, मेमोरी के आंकड़ों का एक छोटा इतिहास दिखाता है. कैप्चर किए गए आंकड़े, नीचे दी गई टेबल में दिए गए हैं.

vmstat फ़ील्ड

nr_free_pagesnr_slab_reclaimable
nr_slab_unreclaimablenr_active_file
nr_inactive_filenr_active_anon
nr_inactive_anonworkingset_refault
workingset_activatenr_file_pages
pgpginpgpgout
pswpinpswpout
pgsteal_kswapd_dmapgsteal_kswapd_normal
pgsteal_kswapd_movablepgsteal_direct_dma
pgsteal_direct_normalpgsteal_direct_movable
pgscan_kswapd_dmapgscan_kswapd_normal
pgscan_kswapd_movablepgscan_direct_dma
pgscan_direct_normalpgscan_direct_movable
compact_migrate_scannedcompact_free_scanned

मि॰मी॰ से जुड़े ट्रेस इवेंट

vmscan/mm_vmscan_kswapd_wakevmscan/mm_vmscan_kswapd_sleep
vmscan/mm_vmscan_direct_reclaim_beginvmscan/mm_vmscan_direct_reclaim_end
compaction/mm_compaction_begincompaction/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 डेटा

पहली इमेज. vmstat के ग्राफ़िकल डेटा की टाइमलाइन.

ftrace इवेंट

कैप्चर किए गए ftrace mm_events, टाइमलाइन पर ग्राफ़िक के तौर पर नहीं दिखाए जाते. इन्हें देखने के लिए, क्वेरी एसक्यूएल टैब पर क्लिक करें. यह टैब, दूसरी इमेज में दिखाए गए जगह पर मौजूद होता है:

क्वेरी एसक्यूएल टैब ढूंढें और कैप्चर किए गए और ग्राफ़ में दिखाए गए 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 हमेशा चालू रहे. इस वजह से, गड़बड़ी की एक रिपोर्ट जनरेट होती है. इसमें पहली इमेज और दूसरी इमेज में दिखाया गया डेटा होता है.