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).
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" } } }
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
(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"
Jalankan workload yang diinginkan.
(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"
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:
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:
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:
Buka rekaman aktivitas di Perfetto.
Jika perangkat Anda didukung oleh Wattson, rekaman aktivitas Wattson akan otomatis dicantumkan:
Gambar 3. Melihat rekaman aktivitas Wattson di Perfetto.
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.
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:
- Di Perfetto, pilih region irisan thread.
- 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"
}
}
}
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
}
}
}
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.
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"
}
}
}