このページでは、Wattson で使用する Perfetto トレースを収集し、Perfetto UI で結果の電力データを分析するための詳細な手順について説明します。
Perfetto トレースを収集する方法は数多くありますが、このページの方法には、Wattson と互換性のあるトレースを生成するための具体的な要件とワークフローが含まれています。
をご覧ください。最小ビルド要件
Wattson が正しく機能するために必要なメタデータを持っていることを確認するには、最近のビルドを実行しているデバイスからトレースを収集する必要があります。CPU と GPU の電力推定の最小ビルド バージョンはデバイスによって異なります。
デバイス | 最小ビルド要件: CPU の見積もり | 最小ビルド要件: GPU の推定 |
---|---|---|
Google Pixel Watch 2 | 最小ビルド要件なし | サポート対象外 |
Google Pixel Watch 3 | 25Q2 | サポート対象外 |
Google Pixel 6 | 最小ビルド要件なし | 25Q2 |
Google Pixel 9 | 25Q2 | サポート対象外 |
コマンドラインから Perfetto トレースを収集する
このセクションでは、Wattson で使用する Perfetto トレースを収集するワークフローの例を示します。次の手順に記載されているコマンドはすべて、Android Debug Bridge(adb)ホストから発行されることを想定しています。
デバイスに 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" } } }
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
(省略可)Wattson ウィンドウの開始を設定します。これは、記録の開始を示す Perfetto トレースに埋め込まれたマーカーです。このマーカーは、Wattson の測定精度を高めます。
# Optional adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
対象のワークロードを実行します。
(省略可)
ftrace/print
トレース イベントを有効にして、Wattson ウィンドウの終了を設定します。# Optional adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
トレース バッファをフラッシュして、Perfetto トレース ファイルを pull します。
adb shell killall -w perfetto adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
Perfetto UI を使用して Perfetto トレースを収集する
Perfetto UI を使用してトレースを収集するには、Wattson の特定の設定を有効にする必要があります。Perfetto UI で新しいトレースを記録するときに、[Scheduling details] と [CPU frequency and idle states] の切り替えを有効にします。
図 1. スケジューリングの詳細と CPU の周波数とアイドル状態の切り替え。
Google Pixel 9 デバイスの場合、[Ftrace] 設定で [devfreq] チェックボックスをオンにして、デバイスの周波数の収集を有効にします。
図 2. デバイスのフリークエンシーを有効にします。
Wattson UI を使用する
Perfetto では、期間を選択してレールごとの統計情報を表示することで、Wattson の電力推定値を分析できます。また、特定のトレース構成を有効にして、スレッド、プロセス、パッケージ レベルで電力消費量を特定することもできます。
レールごとの内訳を表示する
Perfetto で Wattson を操作するには:
Perfetto でトレースを開きます。
デバイスが Wattson でサポートされている場合、Wattson トレースは自動的にリストされます。
図 3. Perfetto で Wattson トレースを表示します。
[Wattson] をクリックして展開し、仮想レールの内訳を表示します。
すべてのレールグラフは、レール間の比率を示すために同じ値に自動的にスケーリングされます。
統計情報は、ユーザーが選択(またはマーク)した地域ごとに生成されます。
統計情報テーブルは、列名をクリックすると並べ替えることができます。
推定値の合計は、列タイトルのすぐ下に表示されます。
図 4. 鉄道の見積もり。
スレッド、プロセス、パッケージごとのトレースの帰属を表示する
スケジューラ トレースが有効になっていて、Perfetto でスレッド スライスを確認できる場合は、スレッドレベルまたはプロセスレベルの電力またはエネルギーの帰属も取得できます。
- Perfetto で、スレッド スライスのリージョンを選択します。
- スレッド、プロセス、パッケージの内訳を表示します。
レールごとのトラック統計情報と同様に、列名をクリックすると、その列で並べ替えることができます。
スレッドレベルの内訳を分析する
基本的な電力推定の最小要件に加えて、スレッド単位の電力帰属を行うには、wattson.cfg
の linux.ftrace
セクションに次の構成を追加する必要があります。
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
}
}
}
図 5. スレッド レベルの内訳。
プロセスレベルの内訳
プロセスレベルのアトリビューションでは、Perfetto トレースで収集されたデータに対して process_states
を有効にする必要があります。wattson.cfg
構成ファイルで次のデータソースを有効にします。
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 1
process_stats_config {
scan_all_processes_on_start: true
}
}
}
図 6. プロセス別の内訳。
パッケージ レベルの内訳
パッケージ レベルのアトリビューションでは、Perfetto トレースで収集されたデータで android.packages_list
が有効になっている必要があります。wattson.cfg
構成ファイルで次のデータソースを有効にします。
data_sources {
config {
name: "android.packages_list"
target_buffer: 1
}
}
スレッドレベルとプロセスレベルのアトリビューションと同様に、スレッド スライスの範囲を選択した場合は、パッケージレベルの内訳を確認します。
図 7. スレッドレベルの内訳。
よくある質問
以下に、Wattson に関するよくある質問をいくつかご紹介します。
Wattson はラボの電力測定ハードウェアの出力と一致することが想定されていますか?
ほとんどのワークロードでは、Wattson の推定値はラボの電力ハードウェアの測定値と一致します。ただし、必ずしもそうとは限りません。また、Wattson の目的もそうではありません。
Wattson は、環境要因(温度)、チップ リークのユニット間ばらつき(同じ SoC でもユニットごとにリークが異なる)、ラボの電力測定ハードウェア間のキャリブレーションの違いによるノイズを除去して、電力の改善を検証したり、電力の回帰を検出したりすることを目的としています。
CPU 時間や CPU サイクルを調べるよりも Wattson が便利なのはなぜですか?
CPU 時間とサイクルは、CPU 周波数と CPU タイプ(リトル、ミッド、ビッグ)間の電力またはエネルギー消費量の違いを考慮していません。
CPU 周波数を 2 倍にしても、CPU の電力やパフォーマンスが 2 倍になるとは限りません。
Wattson はハードウェア ソリューションと比較して正確ですか?
Wattson とラボの電力測定ハードウェアを、複数のチームから提供された複数のユースケースで比較しました。WattsOn の平均誤差は 1% ポイント、標準偏差は 1.5% ポイントです。このレベルの相関関係は、10 秒間のテストから 4 時間実行されるテストまで、すべてのテストで維持されます。そのため、時間の経過とともにエラーが増加したり、エラーが隠蔽されたりすることはありません。
Google Pixel 6 のカーネル設定テスト
Google Pixel 6 を使用した Wattson の一般的な内訳のベースライン テストは次のとおりです。
Wattson.cfg
このセクションでは、Perfetto で Wattson を有効にする場合の一般的な構成について説明します。
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"
}
}
}