Mengumpulkan dan melihat rekaman aktivitas

Halaman ini memberikan petunjuk mendetail untuk mengumpulkan rekaman aktivitas Perfetto yang akan digunakan dengan Wattson dan untuk menganalisis data daya yang dihasilkan di UI Perfetto.

Meskipun ada banyak cara untuk mengumpulkan rekaman aktivitas Perfetto, metode di halaman ini mencakup persyaratan dan alur kerja khusus untuk membuat rekaman aktivitas yang kompatibel dengan Wattson.

Persyaratan build minimum

Untuk memverifikasi bahwa Wattson memiliki metadata yang diperlukan agar berfungsi dengan benar, Anda harus mengumpulkan rekaman aktivitas dari perangkat yang menjalankan build terbaru. Versi build minimum untuk estimasi daya CPU dan GPU bervariasi menurut perangkat.

Perangkat Persyaratan build minimum: Estimasi CPU Persyaratan build minimum: Estimasi GPU
Pixel Watch 2 Tidak ada persyaratan build minimum Tidak didukung
Pixel Watch 3 25Q2 Tidak didukung
Pixel 6 Tidak ada persyaratan build minimum 25Q2
Pixel 9 25Q2 Tidak didukung

Mengumpulkan rekaman aktivitas Perfetto dari command line

Bagian ini menyajikan contoh alur kerja untuk mengumpulkan rekaman aktivitas Perfetto yang akan digunakan dengan Wattson. Semua perintah yang tercantum dalam langkah-langkah berikut dimaksudkan untuk dikeluarkan dari host Android Debug Bridge (adb).

  1. Konfigurasi dan mulai perekaman aktivitas dengan membuat file konfigurasi Perfetto di perangkat. Contoh konfigurasi dapat ditemukan di wattson.cfg di hierarki sumber.

    Konfigurasi Anda harus menyertakan peristiwa rekaman aktivitas berikut:

    # 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. Untuk mengaktifkan perkiraan penggunaan energi cache L3, aktifkan peristiwa 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. (Opsional) Tetapkan awal jendela Wattson, penanda yang disematkan dalam rekaman aktivitas Perfetto yang menunjukkan awal rekaman. Penanda ini menambahkan akurasi pengukuran Wattson.

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. Jalankan workload yang diinginkan.

  5. (Opsional) Aktifkan peristiwa rekaman aktivitas ftrace/print untuk menetapkan akhir interval Wattson:

    # Optional
    adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
    
  6. Kosongkan buffer rekaman aktivitas dan tarik file rekaman aktivitas Perfetto:

    adb shell killall -w perfetto
    adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
    

Mengumpulkan rekaman aktivitas Perfetto menggunakan UI Perfetto

Untuk mengumpulkan rekaman aktivitas menggunakan UI Perfetto, Anda harus mengaktifkan setelan tertentu untuk Wattson. Saat merekam rekaman aktivitas baru di UI Perfetto, aktifkan tombol Detail penjadwalan dan Frekuensi CPU dan status tidak ada aktivitas:

Tombol untuk detail penjadwalan, frekuensi CPU, dan status tidak ada aktivitas

Gambar 1. Detail penjadwalan dan tombol frekuensi CPU serta status tidak ada aktivitas.

Untuk perangkat Pixel 9, di bagian setelan Ftrace, pilih kotak centang devfreq untuk mengaktifkan pengumpulan frekuensi perangkat:

Mengaktifkan Frekuensi perangkat

Gambar 2. Aktifkan frekuensi perangkat.

Menggunakan UI Wattson

Dengan Perfetto, analisis estimasi daya Wattson dengan memilih rentang waktu untuk melihat statistik per-rail, atau aktifkan konfigurasi rekaman aktivitas tertentu untuk mengatribusikan konsumsi daya di tingkat thread, proses, atau paket.

Melihat perincian per jalur

Untuk berinteraksi dengan Wattson di Perfetto:

  1. Buka rekaman aktivitas di Perfetto.

    Jika perangkat Anda didukung oleh Wattson, rekaman aktivitas Wattson akan otomatis dicantumkan:

    Melihat rekaman aktivitas Wattson di Perfetto

    Gambar 3. Melihat rekaman aktivitas Wattson di Perfetto.

  2. Klik Wattson untuk meluaskan dan melihat perincian per jalur virtual:

    • Semua grafik jalur otomatis diskalakan ke nilai yang sama untuk menunjukkan proporsi antar-jalur.

    • Statistik dibuat untuk wilayah yang dipilih (atau ditandai) oleh pengguna.

    • Tabel statistik dapat diurutkan dengan mengklik nama kolom.

    • Total perkiraan ditampilkan langsung di bawah judul kolom.

    Estimasi jalur kereta api

    Gambar 4. Estimasi jalur kereta api.

Melihat atribusi trace per thread, proses, atau paket

Jika Anda telah mengaktifkan rekaman aktivitas penjadwal dan dapat melihat irisan thread di Perfetto, Anda juga dapat memperoleh atribusi daya atau energi tingkat thread atau tingkat proses:

  1. Di Perfetto, pilih region irisan thread.
  2. Lihat perincian untuk thread, proses, atau paket.

Seperti statistik jalur per-rel, Anda dapat mengklik nama kolom mana pun untuk mengurutkan berdasarkan kolom tersebut.

Menganalisis perincian tingkat thread

Selain persyaratan minimum untuk estimasi daya dasar, Anda perlu menambahkan konfigurasi berikut ke bagian linux.ftrace di wattson.cfg untuk atribusi daya tingkat per thread:

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

Perincian tingkat rangkaian pesan

Gambar 5. Perincian tingkat rangkaian pesan.

Perincian tingkat proses

Atribusi tingkat proses mengharuskan process_states diaktifkan pada data yang dikumpulkan dalam rekaman aktivitas Perfetto. Aktifkan sumber data berikut di file konfigurasi wattson.cfg Anda:

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

Menurut perincian proses

Gambar 6. Menurut perincian proses.

Perincian tingkat paket

Atribusi tingkat paket memerlukan android.packages_list diaktifkan pada data yang dikumpulkan dalam rekaman aktivitas Perfetto. Aktifkan sumber data berikut di file konfigurasi wattson.cfg Anda:

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

Mirip dengan atribusi tingkat thread dan tingkat proses, saat Anda memilih rentang slice thread, tinjau perincian tingkat paket.

Perincian tingkat rangkaian pesan

Gambar 7. Perincian tingkat rangkaian pesan.

FAQ

Berikut beberapa pertanyaan umum (FAQ) tentang Wattson.

Apakah Wattson diharapkan cocok dengan output hardware pengukuran daya lab?

Untuk sebagian besar workload, estimasi Wattson cocok dengan pengukuran hardware daya lab. Namun, hal ini tidak selalu terjadi dan bukan maksud dari Wattson.

Wattson dimaksudkan untuk memvalidasi peningkatan daya atau mendeteksi regresi daya tanpa gangguan dari faktor lingkungan (suhu), variasi unit ke unit dalam kebocoran chip (SoC yang sama dapat memiliki kebocoran yang berbeda per unit), atau perbedaan kalibrasi antara hardware pengukuran daya lab.

Mengapa Wattson lebih berguna daripada melihat waktu CPU atau siklus CPU?

Waktu dan siklus CPU tidak memperhitungkan perbedaan konsumsi daya atau energi antara frekuensi CPU dan jenis CPU (kecil vs. sedang vs. besar).

Frekuensi CPU yang dua kali lipat tidak selalu menghasilkan daya CPU dua kali lipat atau performa dua kali lipat.

Apakah Wattson akurat jika dibandingkan dengan solusi hardware?

Kami telah membandingkan Wattson dengan hardware pengukuran daya lab di berbagai kasus penggunaan yang disediakan oleh beberapa tim. Error rata-rata di Wattson adalah 1% poin dan simpangan bakunya adalah 1,5% poin. Tingkat korelasi ini dipertahankan di seluruh pengujian yang berdurasi 10 detik hingga pengujian yang berjalan selama 4 jam. Jadi, tidak ada penyimpangan error atau penyembunyian error yang merupakan faktor waktu.

Eksperimen konfigurasi kernel Pixel 6

Berikut beberapa eksperimen dasar perincian Wattson umum menggunakan Pixel 6:

Wattson.cfg

Bagian ini memberikan konfigurasi umum untuk pengaktifan Wattson di 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"
          }
      }
  }