Android ১২ ও তার পরবর্তী ভার্সনে লঞ্চ হওয়া ডিভাইস
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 চালু করা থাকলে, ডিভাইসটি বেশি মেমরি প্রেসার অনুভব করার সাথে সাথেই
ক্যাপচার করা ইভেন্টের জন্য সমস্যার রিপোর্টে ঐতিহাসিক
mm_events পরিসংখ্যান প্রদান করা হয়, যা
FS/data/misc/perfetto-traces/bugreport/systrace.pftrace.-এ জিপ করা রিপোর্ট হিসেবে থাকে
Perfetto UI ব্যবহার করে vmstat ডেটা ও ftrace ইভেন্ট, দুটিই বিশ্লেষণের জন্য দেখা যেতে পারে।
vmstat ডেটা
Perfetto UI-তে systrace.pftrace ফাইল আপলোড করে vmstat ডেটা দেখুন
যেটি ১ নম্বর ছবিতে টাইমলাইনে গ্রাফ আকারে দেখানো হয়েছে:
ছবি ১. vmstat গ্রাফিক্যাল ডেটার টাইমলাইন।
ftrace ইভেন্ট
ক্যাপচার করা ftrace mm_events টাইমলাইনে গ্রাফিক হিসেবে দেখানো হয় না। সেগুলি
দেখতে, SQL কোয়েরি করুন ট্যাবে ক্লিক করুন, যা ২ নম্বর ছবিতে দেখানো লোকেশনে আছে:
ছবি ২. অ্যাক্সেস করতে 'কোয়েরি (SQL)' বিকল্পে ক্লিক করুন।
mm_events চালু করুন
mm_events চালু করতে, vendor
init.rc থেকে sysprop persist.mm_events.enabled=true সেট করুন।
mm_events-এর মেমরি ও CPU ফুটপ্রিন্ট কমানোর জন্য নিম্নলিখিত ব্যবস্থা নেওয়া হয়েছে:
mm-events ftraceইনস্ট্যান্স প্রতিটি সিপিইউ পিছু ৪ কেবি বাফার ব্যবহার করে।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 সময়সীমা, ৩৬০০০ মিলি সেকেন্ড (৬ মিনিট) শেষ না হওয়া পর্যন্ত vm_stats এবং ftrace মেমরি
ইভেন্ট ক্যাপচার করা শুরু করে।
ট্রিগার টাইমআউট একটি বড় ভ্যালুতে সেট করা হয় (এই ক্ষেত্রে, ১ ঘণ্টা) এবং
mm_events config
mm_events সবসময় চালু আছে কিনা তা নিশ্চিত করতে এটি মাঝে মাঝে আবার চালু করা হয়। এর ফলে একটি বাগ রিপোর্ট
জেনারেট হয়, যার মধ্যে ছবি ১
ও ছবি ২-এ দেখানো ডেটার ধরন থাকে।