যে ডিভাইসগুলি 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
পরিসংখ্যান প্রদান করে। FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.
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- এ দেখানো ডেটার ধরন ধারণ করে ফলস্বরূপ একটি বাগ রিপোর্ট তৈরি হয়।