جمع آوری و مشاهده آثار

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

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

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

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

دستگاه حداقل نیاز ساخت: تخمین CPU حداقل نیاز ساخت: تخمین GPU
پیکسل واچ 2 بدون نیاز به حداقل ساخت پشتیبانی نمی شود
پیکسل واچ 3 25 Q2 پشتیبانی نمی شود
پیکسل 6 بدون نیاز به حداقل ساخت 25 Q2
پیکسل 9 25 Q2 پشتیبانی نمی شود

Trace 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 trace را برای تنظیم انتهای پنجره 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 UI جمع آوری کنید

برای جمع آوری ردیابی با استفاده از Perfetto UI ، باید تنظیمات خاصی را برای Wattson فعال کنید. هنگام ضبط یک ردیابی جدید در Perfetto UI، جزئیات زمانبندی و فرکانس CPU و حالت های بیکار را فعال کنید:

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

شکل 1. جزئیات زمان بندی و فرکانس CPU و حالت های بیکار تغییر می کند.

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

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

شکل 2. فرکانس دستگاه را فعال کنید.

از واتسون UI استفاده کنید

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

مشاهده در هر ریل خراب می شود

برای تعامل با واتسون در Perfetto:

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

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

    مشاهده آثار Wattson در Perfetto

    شکل 3. آثار Wattson را در Perfetto مشاهده کنید.

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

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

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

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

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

    برآورد راه آهن

    شکل 4. برآورد راه آهن.

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

اگر ردیابی زمان‌بندی را فعال کرده‌اید و می‌توانید برش‌های رشته را در 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 به منظور اعتبارسنجی بهبود توان یا گرفتن رگرسیون توان بدون نویز ناشی از عوامل محیطی (دما)، تغییرات واحد به واحد در نشت تراشه (همان SoC می‌تواند نشت متفاوتی بر اساس هر واحد داشته باشد)، یا تفاوت‌های کالیبراسیون بین سخت‌افزار اندازه‌گیری توان آزمایشگاهی است.

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

زمان و چرخه های CPU تفاوت در توان یا مصرف انرژی بین فرکانس های CPU و انواع CPU (کم در مقابل متوسط ​​در مقابل بزرگ) را به حساب نمی آورند.

دو برابر شدن فرکانس CPU همیشه منجر به دو برابر شدن قدرت CPU یا عملکرد دو برابر نمی شود.

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

ما واتسون را با سخت افزار اندازه گیری توان آزمایشگاهی در موارد استفاده چندگانه ارائه شده توسط تیم های متعدد مقایسه کرده ایم. میانگین خطا در واتسون 1% امتیاز و انحراف معیار 1.5% امتیاز است. این سطح از همبستگی در آزمون‌هایی که 10 ثانیه نسبت به آزمون‌هایی که 4 ساعت اجرا می‌شوند حفظ می‌شود. بنابراین هیچ خزش خطا یا پنهان کردن خطا وجود ندارد که این عامل زمان است.

آزمایشات پیکربندی هسته پیکسل 6

در اینجا چند آزمایش پایه از خرابی‌های معمولی واتسون با استفاده از 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"
          }
      }
  }