این صفحه دستورالعملهای دقیقی برای جمعآوری ردگیریهای Perfetto جهت استفاده با Wattson و تجزیهوتحلیل دادههای توان حاصل در واسط کاربر Perfetto ارائه میدهد.
اگرچه روشهای زیادی برای جمعآوری ردیابی Perfetto وجود دارد، روشهای این صفحه شامل الزامات و گردش کارهای خاصی برای تولید ردیابی سازگار با Wattson است.
حداقل پیشنیازهای ساخت
برای تأیید اینکه Wattson فرادادههای لازم برای عملکرد صحیح را دارد، باید ردیابیها را از دستگاهی که نسخه ساخت جدیدی را اجرا میکند جمعآوری کنید. حداقل نسخههای ساخت برای تخمین قدرت CPU و GPU بسته به دستگاه متفاوت است.
| دستگاه | حداقل پیشنیاز ساخت: تخمین CPU | حداقل الزامات ساخت: برآورد GPU |
|---|---|---|
| Pixel Watch 2 | بدون حداقل شماره ساخت موردنیاز | پشتیبانی نمیشود |
| Pixel Watch 3 | 25Q2 | پشتیبانی نمیشود |
| Pixel 6 | بدون حداقل شماره ساخت موردنیاز | 25Q2 |
| Pixel 9 | 25Q2 | پشتیبانی نمیشود |
| Pixel 10 | 25Q2 | پشتیبانی نمیشود |
| Galaxy XR (SXR2230P) | بدون حداقل شماره ساخت موردنیاز | پشتیبانی نمیشود |
جمعآوری ردیابی Perfetto از خط فرمان
این بخش گردش کار نمونهای را برای جمعآوری ردهای Perfetto برای استفاده با Wattson ارائه میدهد. همه فرمانهای فهرستشده در مراحل زیر باید از میزبان 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 جاسازی شده است و شروع ضبط را نشان میدهد. این نشانگر دقت بیشتری به اندازهگیری واتسون اضافه میکند.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"حجم کاری موردنظر را اجرا کنید.
(اختیاری) رویداد ردیابی
ftrace/printرا فعال کنید تا پایان پنجره Wattson را تنظیم کنید:# 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 بااستفاده از میانای کاربر Perfetto
برای جمعآوری ردگیریها بااستفاده از رابط کاربری Perfetto ، باید تنظیمات خاصی را برای Wattson فعال کنید. هنگام ضبط ردیابی جدید در واسط کاربر Perfetto، کلیدهای جزئیات زمانبندی و فرکانس CPU و حالتهای بیکاری را فعال کنید:
شکل ۱. جزئیات زمانبندی و کلیدهای تغییر وضعیت بسامد CPU و حالتهای بیکاری.
برای دستگاههای Pixel 9، در تنظیمات Ftrace، چارگوش devfreq را انتخاب کنید تا جمعآوری بسامد دستگاه فعال شود:

شکل ۲. بسامد دستگاه را فعال کنید.
مشاهده تفکیک بهازای هر ردیف
با Perfetto، برآوردهای توان Wattson را با انتخاب محدوده زمانی برای مشاهده آمار هر ریل تحلیل کنید، یا پیکربندیهای ردیابی خاصی را فعال کنید تا مصرف توان را در سطح رشته، فرایند، یا بسته نسبت دهید.
برای تعامل با Wattson در Perfetto:
ردیابی را در Perfetto باز کنید.
اگر دستگاهتان توسط Wattson پشتیبانی میشود، ردیابیهای Wattson بهطور خودکار فهرست میشود:

شکل ۳. ردیابیهای Wattson را در Perfetto مشاهده کنید.
روی Wattson کلیک کنید تا ازهم باز شود و تفکیک هر ریل مجازی را ببینید:
همه نمودارهای ریل بهطور خودکار به مقدار یکسانی مقیاسبندی میشوند تا نسبت بین ریلها را نشان دهند.
آمار برای هر منطقه انتخابی (یا نشانگذاریشده) توسط کاربر تولید میشود.
جدول آمار را میتوان با کلیک کردن روی نام هر ستون مرتب کرد.
مجموع تخمینی مستقیماً زیر عنوانهای ستون نمایش داده میشود.

شکل ۴. برآوردهای راهآهن.
مشاهده ردگیری براساس رشته، فرایند، یا انتساب بسته
اگر ردهای زمانبند را فعال کرده باشید و بتوانید برشهای رشته را در Perfetto ببینید، میتوانید اسناد قدرت یا انرژی سطح رشته یا سطح فرایند را نیز دریافت کنید:
- در Perfetto، ناحیهای از برشهای رشته را انتخاب کنید.
- تفکیک رشته، فرایند، یا بسته را مشاهده کنید.
همانند آمار قطعههای هر ردیف، میتوانید روی هریک از نامهای ستون کلیک کنید تا براساس آن ستون مرتب شود.
تجزیهوتحلیل تفکیک سطح رشته
علاوهبر حداقل الزامات
برای تخمین توان پایه، باید پیکربندی زیر را به
بخش linux.ftrace در wattson.cfg برای اسناد توان سطح هر رشته
اضافه کنید:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}

شکل ۵. تفکیکهای سطح رشته.
تفکیک در سطح فرایند
اسناد سطح پردازش نیازمند فعال شدن process_states
در دادههای جمعآوریشده در ردیابی Perfetto است. منبع داده زیر را
در فایل پیکربندی
wattson.cfg فعال کنید:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}

شکل ۶. براساس تفکیک فرایند.
تفکیک سطح بسته
ارجاع سطح بسته نیازمند فعال بودن android.packages_list در دادههای
جمعآوریشده در ردیابی Perfetto است. منبع داده زیر را در فایل پیکربندی
wattson.cfg فعال کنید:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
مشابه با اسناد سطح رشته و سطح فرایند، وقتی محدوده برشهای رشته را انتخاب میکنید، تفکیک سطح بسته را مرور کنید.

شکل ۷. تفکیک سطح رشته.
تخمین توان GPU
تخمین توان GPU در Pixel 6، 6 Pro، و 6a پشتیبانی میشود. برای فعال کردن تخمین مصرف برق واحد پردازش گرافیکی، منبع داده زیر را در فایل پیکربندی 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 در واسط کاربر Perfetto در برگه تخمینهای Wattson نشان داده میشود.

شکل ۸. تخمین توان GPU.
پرسشگان
در اینجا برخیاز پرسشهای متداول درباره Wattson آورده شده است.
آیا انتظار میرود Wattson با برونداد سختافزار اندازهگیری توان آزمایشگاه مطابقت داشته باشد؟
برای اکثر حجمهای کاری، تخمین Wattson با اندازهگیریهای سختافزار برق آزمایشگاهی مطابقت دارد. بااینحال، همیشه اینطور نیست و هدف Wattson این نیست.
هدف Wattson تأیید بهبودهای توان یا شناسایی پسرفتهای توان بدون تأثیر عوامل محیطی (دما)، تغییرات واحد به واحد در نشت تراشه (یک SoC یکسان میتواند نشتهای متفاوتی در هر واحد داشته باشد)، یا تفاوتهای کالیبراسیون بین سختافزار اندازهگیری توان آزمایشگاهی است.
Wattson چگونه از نگاه کردن به زمان CPU یا چرخههای CPU مفیدتر است؟
زمان و دورههای CPU تفاوت در مصرف برق یا انرژی بین فرکانسهای CPU و انواع CPU (کوچک دربرابر متوسط دربرابر بزرگ) را درنظر نمیگیرند.
دوبرابر شدن فرکانس واحد پردازش مرکزی همیشه منجر به دوبرابر شدن قدرت واحد پردازش مرکزی یا دوبرابر شدن عملکرد نمیشود.
آیا واتسون در مقایسه با راهحلهای سختافزاری دقیق است؟
ما Wattson را با سختافزار اندازهگیری توان آزمایشگاهی در چندین مورد استفاده که توسط تیمهای مختلف ارائه شده است مقایسه کردهایم. میانگین خطا در Wattson ۱٪ امتیاز و انحراف معیار ۱٫۵٪ امتیاز است. این سطح از همبستگی در آزمایشهای ۱۰ ثانیهای تا آزمایشهای ۴ ساعته حفظ میشود. بنابراین، هیچ خطای خزنده یا خطای پوششی که عامل زمان باشد وجود ندارد.
آزمایشهای پیکربندی هسته Pixel 6
در اینجا چند آزمایش پایه از خرابیهای معمول Wattson بااستفاده از Pixel 6 آورده شده است:
Wattson.cfg
این بخش پیکربندی معمول را برای فعالسازی Wattson در Perfetto ارائه میدهد:
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"
}
}
}