این صفحه دستورالعملهای دقیقی برای جمعآوری ردپاهای Perfetto جهت استفاده با Wattson و تجزیه و تحلیل دادههای توان حاصل در رابط کاربری Perfetto ارائه میدهد.
اگرچه روشهای زیادی برای جمعآوری رد Perfetto وجود دارد، روشهای موجود در این صفحه شامل الزامات و گردشهای کاری خاص برای تولید ردی سازگار با Wattson است.
حداقل الزامات ساخت
برای تأیید اینکه واتسون فرادادههای لازم برای عملکرد صحیح را دارد، باید ردپاها را از دستگاهی که نسخه جدیدی از آن را اجرا میکند، جمعآوری کنید. حداقل نسخههای ساخت برای تخمین قدرت CPU و GPU بر اساس دستگاه متفاوت است.
| دستگاه | حداقل نیاز ساخت: تخمین CPU | حداقل نیاز ساخت: تخمین GPU |
|---|---|---|
| پیکسل واچ ۲ | بدون نیاز به حداقل ساخت | پشتیبانی نمیشود |
| پیکسل واچ ۳ | ۲۵Q۲ | پشتیبانی نمیشود |
| پیکسل ۶ | بدون نیاز به حداقل ساخت | ۲۵Q۲ |
| پیکسل ۹ | ۲۵Q۲ | پشتیبانی نمیشود |
| پیکسل ۱۰ | ۲۵Q۲ | پشتیبانی نمیشود |
| گلکسی 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" } } }برای فعال کردن تخمین مصرف انرژی کش سطح ۳، رویداد
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(اختیاری) شروع پنجره واتسون را تنظیم کنید، نشانگری که در مسیر Perfetto تعبیه شده و شروع رکورد را نشان میدهد. این نشانگر دقت بیشتری به اندازهگیری واتسون اضافه میکند.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"حجم کاری مورد علاقه را اجرا کنید.
(اختیاری) رویداد
ftrace/printtrace را برای تنظیم پایان پنجره 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 UI جمع آوری کنید
برای جمعآوری ردپاها با استفاده از رابط کاربری Perfetto ، باید تنظیمات خاصی را برای Wattson فعال کنید. هنگام ضبط یک ردپای جدید در رابط کاربری Perfetto، گزینههای «جزئیات زمانبندی» و «فرکانس CPU» و «وضعیتهای بیکاری» را فعال کنید:

شکل ۱. جزئیات زمانبندی و فرکانس پردازنده و حالتهای بیکاری.
برای دستگاههای Pixel 9، در قسمت تنظیمات Ftrace ، کادر انتخاب devfreq را انتخاب کنید تا جمعآوری فرکانس دستگاه فعال شود:

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

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

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

شکل ۵. تفکیک سطوح نخ.
تجزیه سطح فرآیند
انتساب در سطح فرآیند مستلزم فعال بودن process_states در دادههای جمعآوریشده در Perfetto trace است. منبع داده زیر را در فایل پیکربندی 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 trace است. منبع داده زیر را در فایل پیکربندی wattson.cfg خود فعال کنید:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
مشابه انتساب در سطح نخ و سطح فرآیند، هنگام انتخاب طیفی از برشهای نخ، تجزیه در سطح بسته را بررسی کنید.

شکل 7. تفکیک در سطح نخ.
تخمین توان پردازنده گرافیکی (GPU)
تخمین توان پردازنده گرافیکی (GPU) در پیکسل ۶، ۶ پرو و ۶a پشتیبانی میشود. برای فعال کردن تخمین توان پردازنده گرافیکی، منبع داده زیر را در فایل پیکربندی 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 ظاهر میشوند.

شکل 8. تخمین توان پردازنده گرافیکی (GPU).
سوالات متداول
در اینجا به برخی از سوالات متداول در مورد واتسون پاسخ داده شده است.
آیا انتظار میرود واتسون با خروجی سختافزار اندازهگیری توان آزمایشگاهی مطابقت داشته باشد؟
برای اکثر حجمهای کاری، تخمین واتسون با اندازهگیریهای سختافزار توان آزمایشگاهی مطابقت دارد. با این حال، همیشه اینطور نیست و هدف واتسون هم این نبوده است.
واتسون برای اعتبارسنجی بهبود توان یا تشخیص رگرسیون توان بدون نویز ناشی از عوامل محیطی (دما)، تغییرات واحد به واحد در نشت تراشه (یک SoC یکسان میتواند نشت متفاوتی بر اساس واحد داشته باشد) یا تفاوتهای کالیبراسیون بین سختافزارهای اندازهگیری توان آزمایشگاهی در نظر گرفته شده است.
واتسون چه فایدهای نسبت به بررسی زمان پردازنده یا چرخههای پردازنده دارد؟
زمان و چرخههای پردازنده، تفاوت در مصرف برق یا انرژی بین فرکانسهای پردازنده و انواع پردازنده (کوچک در مقابل متوسط در مقابل بزرگ) را در نظر نمیگیرد.
دو برابر شدن فرکانس پردازنده همیشه منجر به دو برابر شدن قدرت پردازنده یا دو برابر شدن عملکرد نمیشود.
آیا واتسون در مقایسه با راهحلهای سختافزاری دقیق است؟
ما Wattson را با سختافزار اندازهگیری توان آزمایشگاهی در چندین مورد استفاده که توسط تیمهای مختلف ارائه شده است، مقایسه کردهایم. میانگین خطا در 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"
}
}
}