এই পৃষ্ঠায় ওয়াটসনের সাথে ব্যবহারের জন্য পারফেটো ট্রেস সংগ্রহ করার এবং পারফেটো UI-তে প্রাপ্ত পাওয়ার ডেটা বিশ্লেষণ করার জন্য বিস্তারিত নির্দেশাবলী রয়েছে।
যদিও পারফেটো ট্রেস সংগ্রহ করার অনেক উপায় আছে, এই পৃষ্ঠার পদ্ধতিগুলিতে ওয়াটসনের সাথে সামঞ্জস্যপূর্ণ একটি ট্রেস তৈরির জন্য নির্দিষ্ট প্রয়োজনীয়তা এবং কর্মপ্রবাহ অন্তর্ভুক্ত রয়েছে।
ন্যূনতম নির্মাণ প্রয়োজনীয়তা
ওয়াটসনের সঠিকভাবে কাজ করার জন্য প্রয়োজনীয় মেটাডেটা আছে কিনা তা যাচাই করার জন্য, আপনাকে সাম্প্রতিক বিল্ড চালানোর জন্য একটি ডিভাইস থেকে ট্রেস সংগ্রহ করতে হবে। CPU এবং GPU পাওয়ার অনুমানের জন্য ন্যূনতম বিল্ড সংস্করণগুলি ডিভাইস অনুসারে পরিবর্তিত হয়।
| যন্ত্র | ন্যূনতম বিল্ড প্রয়োজনীয়তা: CPU অনুমান | ন্যূনতম বিল্ড প্রয়োজনীয়তা: GPU অনুমান |
|---|---|---|
| পিক্সেল ওয়াচ ২ | কোনও ন্যূনতম নির্মাণের প্রয়োজন নেই | সমর্থিত নয় |
| পিক্সেল ওয়াচ ৩ | ২৫ কিউ২ | সমর্থিত নয় |
| পিক্সেল ৬ | কোনও ন্যূনতম নির্মাণের প্রয়োজন নেই | ২৫ কিউ২ |
| পিক্সেল ৯ | ২৫ কিউ২ | সমর্থিত নয় |
| পিক্সেল ১০ | ২৫ কিউ২ | সমর্থিত নয় |
| গ্যালাক্সি এক্সআর (এসএক্সআর২২৩০পি) | কোনও ন্যূনতম নির্মাণের প্রয়োজন নেই | সমর্থিত নয় |
কমান্ড লাইন থেকে Perfetto ট্রেস সংগ্রহ করুন।
এই বিভাগটি ওয়াটসনের সাথে ব্যবহারের জন্য পারফেটো ট্রেস সংগ্রহের একটি উদাহরণ কর্মপ্রবাহ উপস্থাপন করে। নিম্নলিখিত ধাপগুলিতে তালিকাভুক্ত সমস্ত কমান্ড অ্যান্ড্রয়েড ডিবাগ ব্রিজ (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(ঐচ্ছিক) ওয়াটসন উইন্ডোর শুরু সেট করুন, পারফেটো ট্রেসে এমবেড করা একটি মার্কার যা রেকর্ডের শুরু নির্দেশ করে। এই মার্কার ওয়াটসন পরিমাপের অতিরিক্ত নির্ভুলতা যোগ করে।
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"আগ্রহের কাজের চাপ চালান।
(ঐচ্ছিক) ওয়াটসন উইন্ডোর শেষ সেট করতে
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 চেকবক্সটি নির্বাচন করুন:

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

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

চিত্র ৪। রেলের অনুমান।
থ্রেড, প্রক্রিয়া, বা প্যাকেজ অ্যাট্রিবিউশন প্রতি ট্রেস দেখুন
যদি আপনার শিডিউলার ট্রেস সক্রিয় থাকে এবং 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
}
}
থ্রেড-লেভেল এবং প্রসেস-লেভেল অ্যাট্রিবিউশনের মতো, যখন আপনি থ্রেড স্লাইসের একটি পরিসর নির্বাচন করেন, তখন প্যাকেজ-লেভেল ব্রেকডাউন পর্যালোচনা করুন।

চিত্র ৭। থ্রেড-লেভেল ব্রেকডাউন।
জিপিইউ পাওয়ার অনুমান
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"
}
}
}
প্রদত্ত নির্বাচনের জন্য, ওয়াটসন জিপিইউ পাওয়ার অনুমানগুলি ওয়াটসন অনুমান ট্যাবের পারফেটো UI-তে প্রদর্শিত হবে।

চিত্র ৮। জিপিইউ পাওয়ার অনুমান।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
ওয়াটসন সম্পর্কে প্রায়শই জিজ্ঞাসিত কিছু প্রশ্ন এখানে দেওয়া হল।
ওয়াটসন কি ল্যাব পাওয়ার পরিমাপ হার্ডওয়্যার আউটপুটের সাথে মিলবে বলে আশা করা হচ্ছে?
বেশিরভাগ কাজের চাপের ক্ষেত্রে, ওয়াটসনের অনুমান ল্যাব পাওয়ার হার্ডওয়্যার পরিমাপের সাথে মিলে যায়। তবে, এটি সর্বদা হয় না এবং ওয়াটসনের উদ্দেশ্যও নয়।
ওয়াটসনের উদ্দেশ্য হল পরিবেশগত কারণ (তাপমাত্রা), চিপ লিকেজে ইউনিট-টু-ইউনিট তারতম্য (একই SoC-তে প্রতি-ইউনিট ভিত্তিতে বিভিন্ন লিকেজ থাকতে পারে), অথবা ল্যাব পাওয়ার পরিমাপ হার্ডওয়্যারের মধ্যে ক্রমাঙ্কনের পার্থক্যের কারণে শব্দ ছাড়াই পাওয়ার উন্নতি যাচাই করা বা পাওয়ার রিগ্রেশন ধরা।
সিপিইউ সময় বা সিপিইউ চক্র দেখার চেয়ে ওয়াটসন কীভাবে বেশি কার্যকর?
CPU ফ্রিকোয়েন্সি এবং CPU প্রকারের (সামান্য বনাম মাঝারি বনাম বড়) মধ্যে শক্তি বা শক্তি ব্যবহারের পার্থক্যের জন্য CPU সময় এবং চক্র দায়ী নয়।
দ্বিগুণ CPU ফ্রিকোয়েন্সি সবসময় দ্বিগুণ CPU পাওয়ার বা দ্বিগুণ কর্মক্ষমতা আনে না।
হার্ডওয়্যার সমাধানের সাথে তুলনা করলে ওয়াটসন কি সঠিক?
আমরা একাধিক টিমের সরবরাহ করা একাধিক ব্যবহারের ক্ষেত্রে ল্যাব পাওয়ার পরিমাপ হার্ডওয়্যারের সাথে ওয়াটসনের তুলনা করেছি। ওয়াটসনে গড় ত্রুটি 1% পয়েন্ট এবং স্ট্যান্ডার্ড ডেভিয়েশন 1.5% পয়েন্ট। 4 ঘন্টা ধরে চলা পরীক্ষার সাথে 10 সেকেন্ডের পরীক্ষাগুলিতে এই পারস্পরিক সম্পর্ক বজায় রাখা হয়। তাই কোনও ত্রুটির ক্রিপ বা ত্রুটি মাস্কিং নেই যা সময়ের একটি ফ্যাক্টর।
Pixel 6 কার্নেল কনফিগারেশন পরীক্ষা
Pixel 6 ব্যবহার করে সাধারণ ওয়াটসন ব্রেকডাউনের কিছু বেসলাইন পরীক্ষা এখানে দেওয়া হল:
ওয়াটসন.cfg
এই বিভাগটি পারফেটোতে ওয়াটসন সক্ষমকরণের জন্য সাধারণ কনফিগারেশন প্রদান করে:
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"
}
}
}