MM ঘটনা ঐতিহাসিক স্মৃতি পরিসংখ্যান

অ্যান্ড্রয়েড ১২ এবং তার পরবর্তী সংস্করণে চালিত ডিভাইসগুলো 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 ডেটার গ্রাফ দেখতে, systrace.pftrace ফাইলটি Perfetto UI-তে আপলোড করুন।

vmstat data graphed on a timeline

চিত্র ১. vmstat গ্রাফিক্যাল ডেটার সময়রেখা।

ftrace ইভেন্টগুলি

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

Locate the Query SQL tab and click to view ftrace and mm_events captured and graphed

চিত্র ২। অ্যাক্সেস করতে কোয়েরি (SQL)-এ ক্লিক করুন।

mm_events সক্রিয় করুন

mm_events সক্রিয় করতে, vendor init.rc থেকে sysprop persist.mm_events.enabled=true সেট করুন।

mm_events-এর মেমরি এবং সিপিইউ ব্যবহার কমাতে নিম্নলিখিত ব্যবস্থাগুলো গ্রহণ করা হয়েছে:

  • একটি mm-events ftrace ইনস্ট্যান্স প্রতি CPU-তে ৪ KB বাফার ব্যবহার করে।
  • kmem_activity ট্রিগারটি প্রতি মিনিটে একবারের জন্য সীমিত করা হয়েছে।
  • যেকোনো সময়ে কেবল একটি mm-events ট্রেস সেশন সক্রিয় থাকতে পারে।

কাস্টমাইজেশন

ট্রেসিং সেশনের সময় কোন পরিসংখ্যানগুলো ক্যাপচার করা হবে তা নির্দিষ্ট করার জন্য mm_events একটি perfetto ট্রেস কনফিগারেশন ফাইল ব্যবহার করে।

আপনি /vendor/etc/mm_events.cfg ফাইলে একটি কাস্টম পারফেটটো ট্রেস কনফিগারেশন দিতে পারেন। উপলব্ধ ট্রেস কনফিগারেশন ফিল্ডগুলির বিবরণের জন্য, পারফেটটো ডক্স দেখুন। একটি নমুনা ট্রেস কনফিগারেশনের জন্য, এই 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 mm_events config পর্যায়ক্রমে পুনরায় সক্রিয় করা হয় যাতে এটি সর্বদা চালু থাকে। এর ফলে একটি বাগ রিপোর্ট তৈরি হয়, যাতে চিত্র ১ এবং চিত্র ২- এ দেখানো ধরনের ডেটা থাকে।