בדף הזה מפורטות ההוראות לאיסוף עקבות של Perfetto לשימוש עם Wattson ולניתוח נתוני ההספק שמתקבלים בממשק המשתמש של Perfetto.
יש הרבה דרכים לאסוף נתוני מעקב ב-Perfetto, אבל בדף הזה מפורטות השיטות שכוללות את הדרישות ותהליכי העבודה הספציפיים ליצירת נתוני מעקב שתואמים ל-Wattson.
דרישות מינימליות לבנייה
כדי לוודא של-Wattson יש את המטא-נתונים הנדרשים לפעולה תקינה, צריך לאסוף נתוני מעקב ממכשיר שמופעלת בו גרסת build עדכנית. גרסאות ה-build המינימליות להערכת צריכת החשמל של המעבד והמעבד הגרפי משתנות בהתאם למכשיר.
| מכשיר | דרישת מינימום לבנייה: הערכת מעבד | דרישת מינימום לבנייה: הערכת 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 trace ומציין את תחילת ההקלטה. הסמן הזה מוסיף דיוק למדידה של וואטסון.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"מריצים את עומס העבודה הרצוי.
(אופציונלי) מפעילים את
ftrace/printtrace event to set the end of the Wattson window:# 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, מפעילים את המתגים Scheduling details (פרטי התזמון) ו-CPU frequency and idle states (תדירות המעבד ומצבי חוסר פעילות):
איור 1. פרטי התזמון ומתגים של תדירות המעבד ומצבי חוסר פעילות.
במכשירי Pixel 9, בהגדרות Ftrace, מסמנים את תיבת הסימון devfreq כדי להפעיל את איסוף התדרים של המכשיר:

איור 2. הפעלת תדירות המכשיר.
צפייה בפירוט של כל מסילה
באמצעות Perfetto, אפשר לנתח את הערכות ההספק של Wattson על ידי בחירת טווח זמן כדי לראות נתונים סטטיסטיים לכל מסילה, או להפעיל הגדרות מעקב ספציפיות כדי לשייך את צריכת החשמל ברמת השרשור, התהליך או החבילה.
כדי ליצור אינטראקציה עם Wattson ב-Perfetto:
פותחים מעקב ב-Perfetto.
אם המכשיר נתמך על ידי Wattson, העקבות של Wattson מופיעים אוטומטית:

איור 3. הצגת נתוני מעקב של Wattson ב-Perfetto.
לוחצים על Wattson כדי להרחיב את התצוגה ולראות את הפירוט של כל מסילה וירטואלית:
כל הגרפים של המסילות מותאמים אוטומטית לאותו ערך כדי להציג את היחס בין המסילות.
הנתונים הסטטיסטיים נוצרים עבור כל אזור שהמשתמש בוחר (או מסמן).
כדי למיין את טבלת הנתונים הסטטיסטיים, לוחצים על שם של עמודה.
הסכומים המשוערים מוצגים ישירות מתחת לכותרות העמודות.

איור 4. הערכות לגבי רכבות.
צפייה ב-Trace לפי שרשור, תהליך או שיוך חבילה
אם הפעלתם מעקב אחר תזמון ואתם יכולים לראות פלחים של שרשורים ב-Perfetto, תוכלו גם לקבל נתוני שיוך של צריכת חשמל או אנרגיה ברמת השרשור או ברמת התהליך:
- ב-Perfetto, בוחרים אזור של פרוסות שרשור.
- אפשר לראות את הפירוט של השרשור, התהליך או החבילה.
כמו בנתונים הסטטיסטיים של טראקים ספציפיים, אפשר ללחוץ על שם של עמודה כלשהי כדי למיין את הנתונים לפי העמודה הזו.
ניתוח פירוט ברמת השרשור
בנוסף לדרישות המינימליות להערכת צריכת חשמל בסיסית, צריך להוסיף את ההגדרה הבאה לקטע linux.ftrace ב-wattson.cfg כדי להגדיר שיוך של צריכת חשמל ברמת השרשור:
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}

איור 5. פירוטים ברמת השרשור.
פירוט ברמת התהליך
כדי להשתמש בשיוך ברמת התהליך, צריך להפעיל את 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
}
}
}

איור 6. לפי פירוט התהליך.
פירוט ברמת החבילה
כדי להשתמש בשיוך ברמת החבילה, צריך להפעיל את האפשרות android.packages_list בנתונים שנאספים במעקב Perfetto. מפעילים את מקור הנתונים הבא בקובץ ההגדרות wattson.cfg:
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
בדומה לשיוך ברמת ה-thread וברמת התהליך, כשבוחרים טווח של פרוסות thread, צריך לבדוק את הפירוט ברמת החבילה.

איור 7. פירוט ברמת השרשור.
אומדן צריכת החשמל של ה-GPU
הערכת עוצמת המעבד הגרפי נתמכת ב-Pixel 6, Pixel 6 Pro ו-Pixel 6a. כדי להפעיל את ההערכה של צריכת החשמל של ה-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"
}
}
}
עבור בחירה מסוימת, אומדני צריכת החשמל של ה-GPU ב-Wattson מופיעים בממשק המשתמש של Perfetto בכרטיסייה Wattson estimates.

איור 8. אומדן של עוצמת ה-GPU.
שאלות נפוצות
ריכזנו כאן תשובות לכמה שאלות נפוצות בנושא Wattson.
האם הפלט של Wattson צפוי להיות זהה לפלט של חומרה למדידת הספק במעבדה?
ברוב עומסי העבודה, האומדן של Wattson תואם למדידות של חומרת החשמל במעבדה. עם זאת, זה לא תמיד המצב, וזו לא הכוונה של Wattson.
הכלי Wattson נועד לאמת שיפורים בצריכת החשמל או לזהות רגרסיות בצריכת החשמל בלי רעשי רקע מגורמים סביבתיים (טמפרטורה), שינויים בין יחידות בדליפת שבבים (אותו SoC יכול להציג דליפה שונה על בסיס יחידה), או הבדלים בכיול בין חומרה למדידת צריכת חשמל במעבדה.
איך Wattson שימושי יותר מבדיקה של זמן המעבד או מחזורי המעבד?
זמן המעבד ומחזורי המעבד לא משקפים את ההבדל בצריכת החשמל או האנרגיה בין תדרי המעבד וסוגי המעבד (קטן לעומת בינוני לעומת גדול).
הכפלה של תדירות המעבד לא תמיד מובילה להכפלה של עוצמת המעבד או של הביצועים.
האם הנתונים ב-Wattson מדויקים בהשוואה לפתרונות חומרה?
השווינו את Wattson לחומרה למדידת צריכת חשמל במעבדה בכמה תרחישי שימוש שסופקו על ידי כמה צוותים. השגיאה הממוצעת ב-Wattson היא 1% והסטייה התקנית היא 1.5%. רמת המתאם הזו נשמרת בבדיקות שנמשכות 10 שניות וגם בבדיקות שנמשכות 4 שעות. לכן אין זחילה של שגיאות או הסתרה של שגיאות שמושפעות מהזמן.
ניסויים בהגדרת ליבת המערכת ב-Pixel 6
הנה כמה ניסויים בסיסיים של פירוטים טיפוסיים של וואטסון באמצעות Pixel 6:
Watts.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"
}
}
}