Wattson-এর সাথে ব্যবহার করার জন্য Perfetto ট্রেস সংগ্রহ করা এবং Perfetto UI-তে ফলাফল পাওয়ার ডেটা বিশ্লেষণ করার জন্য এই পৃষ্ঠায় বিস্তারিত নির্দেশাবলী দেওয়া আছে।
Perfetto ট্রেস সংগ্রহ করার অনেক উপায় থাকলেও, এই পৃষ্ঠায় Wattson-এর সাথে মানানসই ট্রেস জেনারেট করার নির্দিষ্ট প্রয়োজনীয়তা ও ওয়ার্কফ্লো অন্তর্ভুক্ত আছে।
বিল্ড সংক্রান্ত ন্যূনতম প্রয়োজনীয়তা
Wattson-এর কাছে সঠিকভাবে কাজ করার জন্য প্রয়োজনীয় মেটাডেটা আছে কিনা তা যাচাই করতে, আপনাকে অবশ্যই সাম্প্রতিক বিল্ডে চলছে এমন ডিভাইস থেকে ট্রেস সংগ্রহ করতে হবে। সিপিইউ ও জিপিইউ পাওয়ার এস্টিমেশনের জন্য ন্যূনতম বিল্ড ভার্সন ডিভাইস অনুযায়ী আলাদা হয়।
| ডিভাইস | ন্যূনতম বিল্ড সংক্রান্ত প্রয়োজনীয়তা: সিপিইউ অনুমান | ন্যূনতম বিল্ড সংক্রান্ত প্রয়োজনীয়তা: GPU এস্টিমেশন |
|---|---|---|
| Pixel Watch 2 | ন্যূনতম বিল্ডের কোনও প্রয়োজনীয়তা নেই | কাজ করে না |
| Pixel Watch 3 | 25Q2 | কাজ করে না |
| Pixel 6 | কোনও ন্যূনতম বিল্ড সংক্রান্ত প্রয়োজনীয়তা নেই | 25Q2 |
| Pixel 9 | 25Q2 | কাজ করে না |
| Pixel 10 | 25Q2 | কাজ করে না |
| Galaxy XR (SXR2230P) | ন্যূনতম বিল্ডের কোনও প্রয়োজনীয়তা নেই | কাজ করে না |
কমান্ড লাইন থেকে Perfetto ট্রেস সংগ্রহ করা
এই বিভাগে Wattson-এর সাথে ব্যবহারের জন্য Perfetto ট্রেস সংগ্রহ করার একটি উদাহরণ ওয়ার্কফ্লো দেখানো হয়েছে। নিচে উল্লেখ করা ধাপগুলিতে তালিকাভুক্ত সব কমান্ড Android Debug Bridge (adb) হোস্ট থেকে ইস্যু করতে হবে।
ডিভাইসে Perfetto কনফিগারেশন ফাইল তৈরি করে ট্রেস কনফিগার ও শুরু করুন। সোর্স ট্রিতে
wattson.cfg-এ একটি উদাহরণ কনফিগারেশন পাওয়া যাবে।ন্যূনতম কনফিগারেশনে নিম্নলিখিত ট্রেস ইভেন্ট থাকতে হবে:
# Polls CPU freq/idle state at the start of trace data_sources: { config { name: "linux.sys_stats" sys_stats_config { # Large period so polling doesn't happen continuously # Intent is just to poll once upfront cpufreq_period_ms: 100000000 cpuidle_period_ms: 100000000 } } } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "devfreq/devfreq_frequency" ftrace_events: "cpuhp/cpuhp_enter" ftrace_events: "cpuhp/cpuhp_exit" ftrace_events: "cpuhp/cpuhp_multi_enter" ftrace_events: "power/cpu_frequency" ftrace_events: "power/cpu_idle" ftrace_events: "power/suspend_resume" } } }L3 ক্যাশে এনার্জি ব্যবহার সংক্রান্ত অনুমান চালু করতে,
fttrace/printইভেন্ট চালু করুন:adb shell perfetto --txt -c /data/misc/perfetto-configs/wattson.cfg --background-wait -o /data/misc/perfetto-traces/trace # Optional adb shell simpleperf stat -a -e arm_dsu_0/l3d_cache/,arm_dsu_0/bus_access/ --interval 10(ঐচ্ছিক) Wattson উইন্ডোর শুরু সেট করুন, Perfetto ট্রেসে এম্বেড করা একটি মার্কার যা রেকর্ডের শুরু নির্দেশ করে। এই মার্কারটি Wattson পরিমাপের অতিরিক্ত নির্ভুলতা যোগ করে।
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"আগ্রহের ওয়ার্কলোড রান করান।
(ঐচ্ছিক) Wattson উইন্ডোর শেষ সেট করতে
ftrace/printট্রেস ইভেন্ট চালু করুন:# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"ট্রেস বাফার ফ্ল্যাশ করুন এবং Perfetto ট্রেস ফাইলটি পুল করুন:
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Perfetto UI ব্যবহার করে Perfetto ট্রেস সংগ্রহ করা
Perfetto UI ব্যবহার করে ট্রেস সংগ্রহ করতে , আপনাকে Wattson-এর জন্য নির্দিষ্ট সেটিংস চালু করতে হবে। Perfetto UI-তে নতুন ট্রেস রেকর্ড করার সময়, শিডিউলিং বিবরণ ও CPU ফ্রিকোয়েন্সি ও আইডল স্টেট টগল চালু করুন:
ছবি ১. শিডিউল করার বিবরণ এবং CPU ফ্রিকোয়েন্সি ও আইডল স্টেট টগল।
Pixel 9 ডিভাইসের জন্য, Ftrace সেটিংসের অধীনে, ডিভাইস ফ্রিকোয়েন্সি সংগ্রহ চালু করতে devfreq চেকবক্স বেছে নিন:

ছবি ২. ডিভাইসের ফ্রিকোয়েন্সি চালু করুন।
প্রতিটি রেলের ভিউয়ের ব্রেকডাউন
Perfetto-এর সাহায্যে, রেল পিছু পরিসংখ্যান দেখতে একটি সময়সীমা বেছে নিয়ে Wattson পাওয়ার এস্টিমেট বিশ্লেষণ করুন অথবা থ্রেড, প্রসেস বা প্যাকেজ লেভেলে বিদ্যুৎ খরচ অ্যাট্রিবিউট করতে নির্দিষ্ট ট্রেস কনফিগারেশন চালু করুন।
Perfetto-তে Wattson-এর সাথে ইন্টার্যাক্ট করতে:
Perfetto-তে ট্রেস খুলুন।
আপনার ডিভাইস Wattson-এর সাথে মানানসই হলে, Wattson ট্রেস অটোমেটিক তালিকাভুক্ত হয়:

ছবি ৩. Perfetto-তে Wattson ট্রেস দেখুন।
প্রতিটি ভার্চুয়াল রেলের ব্রেকডাউন বড় করে দেখতে Wattson-এ ক্লিক করুন:
রেলের মধ্যে অনুপাত দেখানোর জন্য সব রেল গ্রাফ অটোমেটিক একই ভ্যালুতে স্কেল করা হয়।
ব্যবহারকারীর বেছে নেওয়া (বা চিহ্নিত করা) অঞ্চলের জন্য পরিসংখ্যান তৈরি করা হয়।
পরিসংখ্যান টেবিলটি যেকোনও কলামের নামে ক্লিক করে সাজানো যেতে পারে।
কলামের ঠিক নিচে আনুমানিক মোট দেখানো হয়।

ছবি ৪. রেল সংক্রান্ত আনুমানিক তথ্য।
থ্রেড, প্রসেস বা প্যাকেজ অ্যাট্রিবিউশন অনুযায়ী ট্রেস দেখা
আপনার শিডিউলার ট্রেস চালু করা থাকলে এবং Perfetto-তে থ্রেড স্লাইস দেখতে পেলে, আপনি থ্রেড-লেভেল বা প্রসেস-লেভেল পাওয়ার বা এনার্জি অ্যাট্রিবিউশনও পেতে পারেন:
- Perfetto-তে, থ্রেড স্লাইসের একটি অংশ বেছে নিন।
- থ্রেড, প্রসেস বা প্যাকেজের ব্রেকডাউন দেখুন।
প্রতিটি রেল ট্র্যাকের পরিসংখ্যানের মতো, আপনি যেকোনও কলামের নাম ক্লিক করে সেই কলাম অনুযায়ী সাজাতে পারবেন।
থ্রেড-লেভেল ব্রেকডাউন বিশ্লেষণ করা
বেসিক পাওয়ার অনুমানের জন্য ন্যূনতম প্রয়োজনীয়তা
ছাড়াও, প্রতিটি থ্রেড লেভেল পাওয়ার অ্যাট্রিবিউশনের জন্য
আপনাকে wattson.cfg-এর linux.ftrace বিভাগে নিম্নলিখিত কনফিগারেশন
যোগ করতে হবে:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}

ছবি ৫. থ্রেড লেভেল ব্রেকডাউন।
প্রসেস-লেভেল ব্রেকডাউন
প্রসেস-লেভেল অ্যাট্রিবিউশনের জন্য Perfetto ট্রেসে সংগ্রহ করা ডেটাতে process_states চালু থাকতে হবে
। আপনার
wattson.cfg কনফিগারেশন ফাইলে
নিম্নলিখিত ডেটা সোর্স চালু করুন:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}

ছবি ৬. প্রসেস ব্রেকডাউন অনুযায়ী।
প্যাকেজ-লেভেল ব্রেকডাউন
প্যাকেজ-লেভেল অ্যাট্রিবিউশনের জন্য Perfetto ট্রেসে সংগ্রহ করা ডেটাতে android.packages_list চালু থাকতে হবে।
আপনার wattson.cfg কনফিগারেশন ফাইলে
নিম্নলিখিত ডেটা সোর্স চালু করুন:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
থ্রেড-লেভেল ও প্রসেস-লেভেল অ্যাট্রিবিউশনের মতো, আপনি থ্রেড স্লাইসের রেঞ্জ বেছে নিলে, প্যাকেজ-লেভেল ব্রেকডাউন পর্যালোচনা করুন।

ছবি ৭. থ্রেড-লেভেল ব্রেকডাউন।
GPU পাওয়ার এস্টিমেশন
Pixel 6, 6 Pro ও 6a-তে GPU পাওয়ার এস্টিমেশন কাজ করে। GPU পাওয়ার
এস্টিমেশন চালু করতে, আপনার
wattson.cfg কনফিগারেশন ফাইলে নিম্নলিখিত ডেটা সোর্স চালু করুন:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "mali/gpu_power_state"
ftrace_events: "power/gpu_frequency"
# [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
ftrace_events: "power/gpu_work_period"
}
}
}
প্রদত্ত নির্বাচনের জন্য, Wattson GPU পাওয়ারের অনুমান Perfetto UI-তে Wattson অনুমান ট্যাবে দেখা যায়।

ছবি ৮. GPU পাওয়ারের অনুমান।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
Wattson সম্পর্কে প্রায়শই জিজ্ঞাসিত কিছু প্রশ্ন এখানে দেওয়া হল।
Wattson কি ল্যাব পাওয়ার পরিমাপক হার্ডওয়্যার আউটপুটের সাথে ম্যাচ করবে বলে আশা করা হচ্ছে?
বেশিরভাগ ওয়ার্কলোডের ক্ষেত্রে, Wattson-এর অনুমান ল্যাব পাওয়ার হার্ডওয়্যারের মাপের সাথে মিলে যায়। তবে, সবসময় এমনটা হয় না এবং Wattson-এর উদ্দেশ্য এটি নয়।
পরিবেশগত কারণ (তাপমাত্রা), চিপ লিকেজে ইউনিট-টু-ইউনিট ভেরিয়েশন (একই SoC-এর প্রতি ইউনিট ভিত্তিতে আলাদা লিকেজ থাকতে পারে) অথবা ল্যাব পাওয়ার পরিমাপ হার্ডওয়্যারের মধ্যে ক্যালিব্রেশন সংক্রান্ত পার্থক্য থেকে হওয়া নয়েজ ছাড়াই পাওয়ারের উন্নতি যাচাই করতে অথবা পাওয়ার রিগ্রেশন ধরতে Wattson ব্যবহার করা হয়।
CPU টাইম বা CPU সাইকেল দেখার চেয়ে Wattson কীভাবে বেশি উপযোগী?
সিপিইউ টাইম এবং সাইকেল, সিপিইউ ফ্রিকোয়েন্সি এবং সিপিইউ প্রকারের (ছোট বনাম মাঝারি বনাম বড়) মধ্যে বিদ্যুৎ বা শক্তি খরচের পার্থক্যকে বিবেচনা করে না।
সিপিইউ ফ্রিকোয়েন্সি দ্বিগুণ হলে, সিপিইউ পাওয়ার বা পারফর্ম্যান্স সবসময় দ্বিগুণ হয় না।
হার্ডওয়্যার সমাধানের সাথে তুলনা করলে Wattson কি সঠিক?
আমরা একাধিক টিমের দেওয়া একাধিক ব্যবহারের ক্ষেত্রে ল্যাব পাওয়ার পরিমাপের হার্ডওয়্যারের সাথে Wattson-এর তুলনা করেছি। Wattson-এ গড় ত্রুটি ১% পয়েন্ট এবং স্ট্যান্ডার্ড ডেভিয়েশন ১.৫% পয়েন্ট। ১০ সেকেন্ড থেকে ৪ ঘণ্টা পর্যন্ত যতগুলি পরীক্ষা করা হয়, সবগুলিতেই এই লেভেলের কোরিলেশন বজায় থাকে। তাই, সময়ের সাথে সাথে ভুল বেড়ে যাওয়া বা ভুল আড়াল করার মতো কোনও বিষয় এখানে নেই।
Pixel 6 কার্নেল কনফিগারেশন এক্সপেরিমেন্ট
Pixel 6 ব্যবহার করে সাধারণ Wattson ব্রেকডাউনের কিছু বেসলাইন পরীক্ষা এখানে দেওয়া হল:
Wattson.cfg
এই বিভাগে Perfetto-তে Wattson চালু করার জন্য সাধারণ কনফিগারেশন প্রদান করা হয়েছে:
write_into_file: true
flush_period_ms: 30000
file_write_period_ms: 30000
buffers: {
size_kb: 2048
fill_policy: RING_BUFFER
}
buffers: {
size_kb: 200000
fill_policy: RING_BUFFER
}
# Needed for process level power attribution
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 0
process_stats_config {
scan_all_processes_on_start: true
}
}
}
# Needed for package level power attribution
data_sources: {
config {
name: "android.packages_list"
target_buffer: 0
}
}
# Needed for determining CPU freq/idle initial state
data_sources: {
config {
name: "linux.sys_stats"
sys_stats_config {
cpufreq_period_ms: 100000000
cpuidle_period_ms: 100000000
}
}
}
# Needed for estimating power and thread level power attribution
data_sources: {
config {
name: "linux.ftrace"
target_buffer: 1
ftrace_config {
# Minimum data sources for estimating power
ftrace_events: "power/cpu_frequency"
ftrace_events: "power/cpu_idle"
ftrace_events: "power/suspend_resume"
ftrace_events: "cpuhp/cpuhp_enter"
ftrace_events: "cpuhp/cpuhp_exit"
ftrace_events: "cpuhp/cpuhp_multi_enter"
ftrace_events: "devfreq/devfreq_frequency"
# Needed for Wattson start/stop markers
ftrace_events: "ftrace/print"
# Needed for thread level power attribution
ftrace_events: "sched/sched_switch"
# Needed for process level power attribution
ftrace_events: "sched/sched_process_free"
ftrace_events: "task/task_newtask"
ftrace_events: "task/task_rename"
}
}
}