איסוף עקבות וצפייה בהם

בדף הזה מפורטות הוראות לאיסוף עקבות של 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).

  1. כדי להגדיר ולהתחיל את התיעוד, יוצרים קובץ הגדרה של 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"
          }
       }
    }
    
  2. כדי להפעיל הערכות של צריכת האנרגיה של מטמון 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
    
  3. (אופציונלי) מגדירים את ההתחלה של חלון Wattson, סמן שמוטמע ב-Perfetto trace ומציין את תחילת ההקלטה. הסמן הזה מוסיף לדיוק של המדידה ב-Wattson.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. מריצים את עומס העבודה הרצוי.

  5. (אופציונלי) מפעילים את ftrace/print trace event כדי להגדיר את סוף חלון Wattson:

    # Optional
    adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
    
  6. מרוקנים את מאגרי הנתונים של פרטי ההעברה ומורידים את קובץ פרטי ההעברה של 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:

  1. פותחים את הנתונים של המעקב ב-Perfetto.

    אם המכשיר נתמך על ידי Wattson, הנתונים של Wattson מופיעים אוטומטית:

    הצגת נתוני מעקב של Wattson ב-Perfetto

    איור 3. הצגת נתוני מעקב של Wattson ב-Perfetto.

  2. לוחצים על Wattson כדי להרחיב את התצוגה ולראות את הפירוט של כל מסילה וירטואלית:

    • כל הגרפים של הפסים מותאמים אוטומטית לאותו ערך כדי להציג את היחס בין הפסים.

    • הנתונים הסטטיסטיים נוצרים עבור כל אזור שנבחר (או מסומן) על ידי המשתמש.

    • כדי למיין את טבלת הנתונים הסטטיסטיים, לוחצים על שם של עמודה.

    • הערכות של סך הכול מוצגות ישירות מתחת לכותרות העמודות.

    אומדנים לגבי רכבות

    איור 4. הערכות לגבי רכבות.

הצגת נתוני Trace לפי שרשור, תהליך או חבילת שיוך

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

  1. ב-Perfetto, בוחרים אזור של פרוסות שרשור.
  2. אפשר לראות את הפירוט של השרשור, התהליך או החבילה.

כמו בנתונים הסטטיסטיים של טראקים ספציפיים, אפשר ללחוץ על שם של עמודה כלשהי כדי למיין את הנתונים לפי העמודה הזו.

ניתוח פירוט ברמת השרשור

בנוסף לדרישות המינימליות להערכת צריכת חשמל בסיסית, צריך להוסיף את ההגדרה הבאה לקטע 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"
          }
      }
  }