בדף הזה מפורטות הוראות לאיסוף עקבות של Perfetto לשימוש עם Wattson ולניתוח נתוני ההספק שמתקבלים בממשק המשתמש של Perfetto.
יש הרבה דרכים לאסוף נתוני מעקב ב-Perfetto, אבל השיטות שמופיעות בדף הזה כוללות את הדרישות הספציפיות ואת תהליכי העבודה ליצירת נתוני מעקב שתואמים ל-Wattson.
דרישות מינימליות לגרסה
כדי לוודא של-Wattson יש את המטא-נתונים הנדרשים לפעולה תקינה, צריך לאסוף עקבות ממכשיר שמופעלת בו גרסת build עדכנית. גרסאות ה-build המינימליות להערכת צריכת החשמל של המעבד ושל המעבד הגרפי משתנות בהתאם למכשיר.
מכשיר | דרישת בנייה מינימלית: הערכת מעבד | דרישת בנייה מינימלית: הערכת GPU |
---|---|---|
Pixel Watch 2 | אין דרישה מינימלית לבנייה | אין תמיכה |
Pixel Watch 3 | 25Q2 | אין תמיכה |
Pixel 6 | אין דרישה מינימלית לבנייה | 25Q2 |
Pixel 9 | 25Q2 | אין תמיכה |
איסוף נתוני מעקב של 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 ומציין את תחילת ההקלטה. הסמן הזה מוסיף לדיוק של המדידה ב-Wattson.
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
מריצים את עומס העבודה הרצוי.
(אופציונלי) מפעילים את
ftrace/print
trace event כדי להגדיר את סוף חלון 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, מפעילים את המתגים Scheduling details ו-CPU frequency and idle states:
איור 1. פרטי התזמון ומתגים להחלפת מצבים של תדירות המעבד ומצבי חוסר פעילות.
במכשירי Pixel 9, בהגדרות של Ftrace, מסמנים את תיבת הסימון devfreq כדי להפעיל את איסוף התדרים של המכשיר:
איור 2. הפעלת תדירות המכשיר.
שימוש בממשק המשתמש של Wattson
באמצעות 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. מפעילים את מקור הנתונים הבא בקובץ ההגדרות 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. פירוט ברמת השרשור.
שאלות נפוצות
ריכזנו כאן תשובות לכמה שאלות נפוצות על Wattson.
האם צפוי ש-Wattson יתאים לפלט של חומרה למדידת הספק במעבדה?
ברוב עומסי העבודה, האומדן של Wattson תואם למדידות של חומרת החשמל במעבדה. עם זאת, זה לא תמיד המצב וזו לא הכוונה של Wattson.
הכלי Wattson נועד לאמת שיפורים בצריכת החשמל או לזהות רגרסיות בצריכת החשמל, ללא רעשי רקע מגורמים סביבתיים (טמפרטורה), שינויים בין יחידות בדליפת שבבים (אותו SoC יכול להציג דליפה שונה על בסיס יחידה), או הבדלים בכיול בין חומרה למדידת צריכת חשמל במעבדה.
איך Wattson שימושי יותר מבדיקה של זמן המעבד או מחזורי המעבד?
זמן ה-CPU והמחזורים לא משקפים את ההבדל בצריכת החשמל או האנרגיה בין תדרי ה-CPU וסוגי ה-CPU (קטן לעומת בינוני לעומת גדול).
הכפלת תדירות המעבד לא תמיד מובילה להכפלת עוצמת המעבד או להכפלת הביצועים.
האם הנתונים ב-Wattson מדויקים בהשוואה לפתרונות חומרה?
השווינו את Wattson לחומרה למדידת צריכת חשמל במעבדה בכמה תרחישי שימוש שסופקו על ידי כמה צוותים. השגיאה הממוצעת ב-Wattson היא 1% והסטייה התקנית היא 1.5%. רמת המתאם הזו נשמרת בבדיקות שנמשכות 10 שניות ועד בדיקות שנמשכות 4 שעות. לכן אין זחילה של שגיאות או הסתרה של שגיאות שמושפעות מהזמן.
ניסויים בהגדרת ליבת Pixel 6
הנה כמה ניסויים בסיסיים של פירוטים טיפוסיים של Wattson באמצעות 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"
}
}
}