جمع‌آوری و مشاهده ردپاها

این صفحه دستورالعمل‌های دقیقی برای جمع‌آوری ردگیری‌های Perfetto جهت استفاده با Wattson و تجزیه‌وتحلیل داده‌های توان حاصل در واسط کاربر Perfetto ارائه می‌دهد.

اگرچه روش‌های زیادی برای جمع‌آوری ردیابی Perfetto وجود دارد، روش‌های این صفحه شامل الزامات و گردش کارهای خاصی برای تولید ردیابی سازگار با Wattson است.

حداقل پیش‌نیازهای ساخت

برای تأیید اینکه Wattson فراداده‌های لازم برای عملکرد صحیح را دارد، باید ردیابی‌ها را از دستگاهی که نسخه ساخت جدیدی را اجرا می‌کند جمع‌آوری کنید. حداقل نسخه‌های ساخت برای تخمین قدرت CPU و GPU بسته به دستگاه متفاوت است.

دستگاه حداقل پیش‌نیاز ساخت: تخمین CPU حداقل الزامات ساخت: برآورد 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 جاسازی شده است و شروع ضبط را نشان می‌دهد. این نشانگر دقت بیشتری به اندازه‌گیری واتسون اضافه می‌کند.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. حجم کاری موردنظر را اجرا کنید.

  5. (اختیاری) رویداد ردیابی ftrace/print را فعال کنید تا پایان پنجره 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، کلیدهای جزئیات زمان‌بندی و فرکانس CPU و حالت‌های بیکاری را فعال کنید:

جزئیات زمان‌بندی و کلیدهای روشن/خاموش فرکانس CPU و حالت‌های بیکار

شکل ۱. جزئیات زمان‌بندی و کلیدهای تغییر وضعیت بسامد CPU و حالت‌های بیکاری.

برای دستگاه‌های Pixel 9، در تنظیمات Ftrace، چارگوش devfreq را انتخاب کنید تا جمع‌آوری بسامد دستگاه فعال شود:

فعال کردن فرکانس دستگاه

شکل ۲. بسامد دستگاه را فعال کنید.

مشاهده تفکیک به‌ازای هر ردیف

با Perfetto، برآوردهای توان Wattson را با انتخاب محدوده زمانی برای مشاهده آمار هر ریل تحلیل کنید، یا پیکربندی‌های ردیابی خاصی را فعال کنید تا مصرف توان را در سطح رشته، فرایند، یا بسته نسبت دهید.

برای تعامل با Wattson در Perfetto:

  1. ردیابی را در Perfetto باز کنید.

    اگر دستگاهتان توسط Wattson پشتیبانی می‌شود، ردیابی‌های Wattson به‌طور خودکار فهرست می‌شود:

    مشاهده ردپای Wattson در Perfetto

    شکل ۳. ردیابی‌های Wattson را در Perfetto مشاهده کنید.

  2. روی Wattson کلیک کنید تا ازهم باز شود و تفکیک هر ریل مجازی را ببینید:

    • همه نمودارهای ریل به‌طور خودکار به مقدار یکسانی مقیاس‌بندی می‌شوند تا نسبت بین ریل‌ها را نشان دهند.

    • آمار برای هر منطقه انتخابی (یا نشان‌گذاری‌شده) توسط کاربر تولید می‌شود.

    • جدول آمار را می‌توان با کلیک کردن روی نام هر ستون مرتب کرد.

    • مجموع تخمینی مستقیماً زیر عنوان‌های ستون نمایش داده می‌شود.

    تخمین‌های راه‌آهن

    شکل ۴. برآوردهای راه‌آهن.

مشاهده ردگیری براساس رشته، فرایند، یا انتساب بسته

اگر ردهای زمان‌بند را فعال کرده باشید و بتوانید برش‌های رشته را در Perfetto ببینید، می‌توانید اسناد قدرت یا انرژی سطح رشته یا سطح فرایند را نیز دریافت کنید:

  1. در Perfetto، ناحیه‌ای از برش‌های رشته را انتخاب کنید.
  2. تفکیک رشته، فرایند، یا بسته را مشاهده کنید.

همانند آمار قطعه‌های هر ردیف، می‌توانید روی هریک از نام‌های ستون کلیک کنید تا براساس آن ستون مرتب شود.

تجزیه‌وتحلیل تفکیک سطح رشته

علاوه‌بر حداقل الزامات برای تخمین توان پایه، باید پیکربندی زیر را به بخش linux.ftrace در wattson.cfg برای اسناد توان سطح هر رشته اضافه کنید:

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
        }
    }
}

تفکیک‌های سطح رشته

شکل ۵. تفکیک‌های سطح رشته.

تفکیک در سطح فرایند

اسناد سطح پردازش نیازمند فعال شدن process_states در داده‌های جمع‌آوری‌شده در ردیابی Perfetto است. منبع داده زیر را در فایل پیکربندی wattson.cfg فعال کنید:

data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

براساس تفکیک فرایند

شکل ۶. براساس تفکیک فرایند.

تفکیک سطح بسته

ارجاع سطح بسته نیازمند فعال بودن android.packages_list در داده‌های جمع‌آوری‌شده در ردیابی Perfetto است. منبع داده زیر را در فایل پیکربندی wattson.cfg فعال کنید:

data_sources {
  config {
    name: "android.packages_list"
    target_buffer: 1
  }
}

مشابه با اسناد سطح رشته و سطح فرایند، وقتی محدوده برش‌های رشته را انتخاب می‌کنید، تفکیک سطح بسته را مرور کنید.

تفکیک در سطح رشته

شکل ۷. تفکیک سطح رشته.

تخمین توان GPU

تخمین توان GPU در 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 نشان داده می‌شود.

تخمین توان GPU

شکل ۸. تخمین توان GPU.

پرسشگان

در اینجا برخی‌از پرسش‌های متداول درباره Wattson آورده شده است.

آیا انتظار می‌رود Wattson با برونداد سخت‌افزار اندازه‌گیری توان آزمایشگاه مطابقت داشته باشد؟

برای اکثر حجم‌های کاری، تخمین Wattson با اندازه‌گیری‌های سخت‌افزار برق آزمایشگاهی مطابقت دارد. بااین‌حال، همیشه این‌طور نیست و هدف Wattson این نیست.

هدف Wattson تأیید بهبودهای توان یا شناسایی پسرفت‌های توان بدون تأثیر عوامل محیطی (دما)، تغییرات واحد به واحد در نشت تراشه (یک SoC یکسان می‌تواند نشت‌های متفاوتی در هر واحد داشته باشد)، یا تفاوت‌های کالیبراسیون بین سخت‌افزار اندازه‌گیری توان آزمایشگاهی است.

‫Wattson چگونه از نگاه کردن به زمان CPU یا چرخه‌های CPU مفیدتر است؟

زمان و دوره‌های CPU تفاوت در مصرف برق یا انرژی بین فرکانس‌های CPU و انواع CPU (کوچک دربرابر متوسط دربرابر بزرگ) را درنظر نمی‌گیرند.

دوبرابر شدن فرکانس واحد پردازش مرکزی همیشه منجر به دوبرابر شدن قدرت واحد پردازش مرکزی یا دوبرابر شدن عملکرد نمی‌شود.

آیا واتسون در مقایسه با راه‌حل‌های سخت‌افزاری دقیق است؟

ما Wattson را با سخت‌افزار اندازه‌گیری توان آزمایشگاهی در چندین مورد استفاده که توسط تیم‌های مختلف ارائه شده است مقایسه کرده‌ایم. میانگین خطا در Wattson‏ ۱٪ امتیاز و انحراف معیار ۱٫۵٪ امتیاز است. این سطح از همبستگی در آزمایش‌های ۱۰ ثانیه‌ای تا آزمایش‌های ۴ ساعته حفظ می‌شود. بنابراین، هیچ خطای خزنده یا خطای پوششی که عامل زمان باشد وجود ندارد.

آزمایش‌های پیکربندی هسته 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"
          }
      }
  }