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

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

  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 ומציין את תחילת ההקלטה. הסמן הזה מוסיף לדיוק של המדידה של וואטסון.

    # 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. הפעלת תדירות המכשיר.

צפייה בפירוט של כל מסילה

באמצעות 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 trace. מפעילים את מקור הנתונים הבא בקובץ ההגדרות 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.

הערכת צריכת החשמל של ה-GPU

איור 8. אומדן עוצמת ה-GPU.

שאלות נפוצות

ריכזנו כאן תשובות לכמה שאלות נפוצות בנושא Wattson.

האם צפוי ש-Wattson יתאים לפלט של חומרה למדידת הספק במעבדה?

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

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

איך Wattson שימושי יותר מבדיקה של זמן המעבד או מחזורי המעבד?

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

הכפלת תדירות המעבד לא תמיד מובילה להכפלת עוצמת המעבד או להכפלת הביצועים.

האם הנתונים ב-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"
          }
      }
  }