যে ডিভাইসগুলি 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 সক্ষম করা থাকে, একটি ডিভাইস উচ্চ মেমরির চাপ অনুভব করতে শুরু করার পরেই ক্যাপচার করা ইভেন্টগুলির জন্য বাগ রিপোর্টগুলি FS/data/misc/perfetto-traces/bugreport/systrace.pftrace. এ একটি জিপ করা রিপোর্ট আকারে ঐতিহাসিক mm_events পরিসংখ্যান প্রদান করে।
Perfetto UI ব্যবহার করে বিশ্লেষণের জন্য vmstat ডেটা এবং ftrace ঘটনা উভয়ই দেখা যেতে পারে।
vmstat ডেটা
চিত্র 1-এ দেখানো একটি টাইমলাইনে গ্রাফ করা vmstat ডেটা দেখতে Perfetto UI-তে systrace.pftrace ফাইল আপলোড করুন:

চিত্র 1. vmstat গ্রাফিকাল ডেটার টাইমলাইন।
ftrace ঘটনা
ক্যাপচার করা ftrace mm_events টাইমলাইনে গ্রাফিকভাবে দেখানো হয় না। সেগুলি দেখতে, ক্যোয়ারী SQL ট্যাবে ক্লিক করুন, চিত্র 2-এ দেখানো হিসাবে অবস্থিত:

চিত্র 2. অ্যাক্সেস করতে Query (SQL) এ ক্লিক করুন।
mm_events সক্ষম করুন
mm_events সক্রিয় করতে, vendor init.rc থেকে sysprop persist.mm_events.enabled=true সেট করুন।
mm_events এর মেমরি এবং CPU ফুটপ্রিন্ট প্রশমিত করার জন্য নিম্নলিখিতগুলি রয়েছে:
- একটি
mm-events ftraceউদাহরণ প্রতি CPU 4 KB বাফার ব্যবহার করে। -
kmem_activityট্রিগার প্রতি মিনিটে একবার রেট-সীমিত। - শুধুমাত্র 1
mm-eventsট্রেস সেশন যেকোনো সময় সক্রিয় হতে পারে।
কাস্টমাইজেশন
mm_events ট্রেসিং সেশনের সময় কোন পরিসংখ্যান ক্যাপচার করতে হবে তা নির্দিষ্ট করতে একটি perfetto ট্রেস কনফিগার ফাইল ব্যবহার করে।
আপনি /vendor/etc/mm_events.cfg এ একটি কাস্টম পারফেটো ট্রেস কনফিগারেশন প্রদান করতে পারেন। উপলব্ধ ট্রেস কনফিগার ক্ষেত্রগুলির একটি বিবরণের জন্য, 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 পিরিয়ড, 36000 ms (6 মিনিট) শেষ হয়। ট্রিগার টাইমআউট একটি বড় মান সেট করা হয়েছে (এই ক্ষেত্রে, 1 ঘন্টা) এবং mm_events config পর্যায়ক্রমে পুনরায় সজ্জিত করা হয় তা নিশ্চিত করার জন্য যে mm_events সর্বদা সক্রিয় আছে। চিত্র 1 এবং চিত্র 2- এ দেখানো ডেটার ধরন ধারণ করে ফলস্বরূপ একটি বাগ রিপোর্ট তৈরি হয়।