تقدّم هذه الصفحة تعليمات مفصّلة حول جمع بيانات تتبُّع Perfetto لاستخدامها مع Wattson وتحليل بيانات الطاقة الناتجة في واجهة مستخدم Perfetto.
على الرغم من توفّر طرق عديدة لجمع بيانات تتبُّع Perfetto، تتضمّن الطرق الواردة في هذه الصفحة المتطلبات وسير العمل المحدّدين لإنشاء بيانات تتبُّع متوافقة مع Wattson.
الحد الأدنى من متطلبات الإصدار
للتأكّد من أنّ Wattson يتضمّن البيانات الوصفية المطلوبة لكي يعمل بشكلٍ صحيح، عليك جمع بيانات التتبُّع من جهاز يعمل بإصدار حديث. تختلف الإصدارات الدنيا لتقدير طاقة وحدة المعالجة المركزية ووحدة معالجة الرسومات حسب الجهاز.
| الجهاز | الحد الأدنى من متطلبات الإصدار: تقدير وحدة المعالجة المركزية | الحد الأدنى من متطلبات الإصدار: تقدير وحدة معالجة الرسومات |
|---|---|---|
| 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" } } }لتفعيل تقديرات استخدام طاقة ذاكرة التخزين المؤقت من المستوى الثالث، فعِّل حدث
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"يمكنك تشغيل عبء العمل المطلوب.
(اختياري) يمكنك تفعيل حدث تتبُّع
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، فعِّل خيارَي تفاصيل الجدولة وحالات التوقف عن العمل وتردد وحدة المعالجة المركزية:
الشكل 1: خيارا "تفاصيل الجدولة" و"حالات التوقف عن العمل وتردد وحدة المعالجة المركزية"
بالنسبة إلى أجهزة Pixel 9، ضِمن إعدادات Ftrace ، اختَر مربّع الاختيار devfreq لتفعيل جمع تردد الجهاز:

الشكل 2: تفعيل تردد الجهاز
عرض تفاصيل كل مسار
باستخدام Perfetto، يمكنك تحليل تقديرات طاقة Wattson من خلال اختيار نطاق زمني لعرض الإحصاءات لكل مسار، أو تفعيل إعدادات تتبُّع معيّنة لربط استهلاك الطاقة على مستوى سلسلة المحادثات أو العملية أو الحزمة.
للتفاعل مع Wattson في Perfetto:
افتح بيانات تتبُّع في Perfetto.
إذا كان جهازك متوافقًا مع Wattson، يتم إدراج بيانات تتبُّع Wattson تلقائيًا:

الشكل 3: عرض بيانات تتبُّع Wattson في Perfetto
انقر على Wattson لتوسيع تفاصيل كل مسار افتراضي وعرضها:
يتم تلقائيًا تغيير حجم جميع الرسوم البيانية للمسارات إلى القيمة نفسها لعرض النسبة بين المسارات.
يتم إنشاء الإحصاءات لأي منطقة يختارها المستخدم (أو يضع علامة عليها).
يمكن ترتيب جدول الإحصاءات من خلال النقر على أي اسم عمود.
يتم عرض إجمالي التقديرات أسفل عناوين الأعمدة مباشرةً.

الشكل 4: تقديرات المسارات
عرض بيانات التتبُّع حسب سلسلة المحادثات أو العملية أو الحزمة
إذا كانت بيانات تتبُّع الجدولة مفعّلة ويمكنك الاطّلاع على شرائح سلاسل المحادثات في Perfetto، يمكنك أيضًا الحصول على بيانات ربط الطاقة أو استهلاكها على مستوى سلسلة المحادثات أو العملية:
- في Perfetto، اختَر منطقة من شرائح سلاسل المحادثات.
- يمكنك عرض تفاصيل سلسلة المحادثات أو العملية أو الحزمة.
كما هو الحال مع إحصاءات بيانات التتبُّع لكل مسار، يمكنك النقر على أي من أسماء الأعمدة لترتيبها حسب هذا العمود.
تحليل تفاصيل سلسلة المحادثات
بالإضافة إلى الحد الأدنى من المتطلبات
لتقدير الطاقة الأساسي، عليك إضافة الإعدادات التالية إلى
قسم linux.ftrace في wattson.cfg لربط الطاقة على مستوى كل سلسلة محادثات:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}

الشكل 5: تفاصيل على مستوى سلسلة المحادثات
تفاصيل على مستوى العملية
يتطلّب الربط على مستوى العملية تفعيل process_states على البيانات التي تم جمعها في بيانات تتبُّع Perfetto. فعِّل مصدر البيانات التالي
في ملف
wattson.cfg الإعداد:
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}

الشكل 6: تفاصيل حسب العملية
تفاصيل على مستوى الحزمة
يتطلّب الربط على مستوى الحزمة تفعيل android.packages_list على البيانات التي تم جمعها في بيانات تتبُّع Perfetto. فعِّل مصدر البيانات التالي في ملف إعداد
wattson.cfg:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
على غرار الربط على مستوى سلسلة المحادثات والعملية، عند اختيار نطاق من شرائح سلاسل المحادثات، راجِع التفاصيل على مستوى الحزمة.

الشكل 7: تفاصيل على مستوى سلسلة المحادثات
تقدير طاقة وحدة معالجة الرسومات
يتوفّر تقدير طاقة وحدة معالجة الرسومات على هواتف 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.

الشكل 8: تقدير طاقة وحدة معالجة الرسومات
الأسئلة الشائعة
في ما يلي بعض الأسئلة الشائعة حول Wattson.
هل من المفترض أن تتطابق تقديرات Wattson مع ناتج أجهزة قياس الطاقة في المختبر؟
بالنسبة إلى معظم أحمال العمل، يتطابق تقدير Wattson مع قياسات أجهزة قياس الطاقة في المختبر. ومع ذلك، لا يحدث ذلك دائمًا وليس هذا هو الهدف من Wattson.
يهدف Wattson إلى التحقق من تحسينات الطاقة أو رصد حالات تراجع الطاقة بدون ضوضاء من العوامل البيئية (درجة الحرارة) أو الاختلافات بين الوحدات في تسرّب الشرائح (يمكن أن يكون لوحدة النظام على شريحة (SoC) نفسها تسرّب مختلف على أساس كل وحدة ) أو اختلافات المعايرة بين أجهزة قياس الطاقة في المختبر.
ما هي الميزات التي تجعل Wattson أكثر فائدة من الاطّلاع على وقت وحدة المعالجة المركزية أو دورات وحدة المعالجة المركزية؟
لا يأخذ وقت وحدة المعالجة المركزية ودوراتها في الاعتبار الاختلاف في استهلاك الطاقة بين ترددات وحدة المعالجة المركزية وأنواعها (صغير ومتوسط وكبير).
لا يؤدي مضاعفة تردد وحدة المعالجة المركزية دائمًا إلى مضاعفة طاقة وحدة المعالجة المركزية أو مضاعفة الأداء.
هل تقديرات Wattson دقيقة عند مقارنتها بالحلول المستندة إلى الأجهزة؟
لقد قارنّا Wattson بأجهزة قياس الطاقة في المختبر في حالات استخدام متعدّدة قدّمتها فرق متعدّدة. يبلغ متوسط الخطأ في Wattson نقطة مئوية واحدة و الانحراف المعياري 1.5 نقطة مئوية. يتم الحفاظ على مستوى الارتباط هذا في الاختبارات التي تتراوح مدتها من 10 ثوانٍ إلى 4 ساعات. لذلك، لا يوجد خطأ متزايد أو إخفاء للخطأ كعامل زمني.
تجارب إعدادات النواة في 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"
}
}
}