Automatic Feedback-Directed Optimization(12 以降)

Android 12 で導入された Android ビルドシステムは、Automatic Feedback-Directed Optimization(AutoFDO)を使用するブループリント ビルドルールのあるネイティブ Android モジュールの最適化をサポートしています。AutoFDO とは、サンプリングベースの最適化手法です。AutoFDO はシステム バイナリの実行時の動作をキャプチャし、コンパイラにおけるパフォーマンスの最適化の改善を可能にするだけでなく、バイナリサイズを削減します。Android では X86、X86_64、ARM、ARM64 デバイスのプロファイル収集に対応していますが、プロファイルはアーキテクチャ間で共有できます。

AutoFDO はインストルメンテーション ベースのプロファイルに基づく最適化(PGO)の後継となります。

他のインストルメンテーション ベースのプロファイルと比べて、AutoFDO にはさらに以下のような利点があります。

  • 目立たないデータ収集: ビルドルールを変更せずに、開発デバイスやユーザー デバイスから AutoFDO プロファイルを収集できます。

  • 実際の使用状況の提示: ユーザー デバイスからプロファイルが収集される場合、AutoFDO は実際の使用動作を示します。それに対して、インストルメンテーション PGO は合成された収集用ワークロードを示しているのにすぎません。実際の使用状況に完全に一致する収集用ワークロードを作成するのは、一般に簡単ではありません。

AOSP には、パフォーマンスが重要なプロジェクト用に通常、AutoFDO プロファイルが用意されています。このプロファイルは、スマートフォンやタブレットから収集されたもので、一般的な使用パターンを示しています。プロファイルは toolchain/pgo-profiles/sampling にあります。AOSP ではデフォルトで AFDO が有効になっています。

ブループリント ビルドルールで AutoFDO を有効にする

ブループリント ビルドルールで AutoFDO を有効にするには、共有ライブラリまたはバイナリルールに afdo: true を追加します。

プロファイルを収集する

AOSP とともに事前に提供されるプロファイルは、以下のような特定のシナリオには対応していません。

  • 追加の AutoFDO プロジェクトが含まれる場合
  • ローカルに変更されたコードがある場合
  • 固有の使用パターンがシステムに関連付けられている場合

こうしたシナリオのいずれかに該当する場合は、開発デバイスまたはユーザー デバイスから直接プロファイルを収集する必要があります。

AutoFDO プロファイルを収集するように ARM デバイスを準備する方法について詳しくは、AutoFDO の ETM データを収集するをご覧ください。

バックグラウンドでの自動プロファイル収集を有効にして、その処理とアップロードを行う方法について詳しくは、Profcollect をご覧ください。

AutoFDO プロファイルを分析する

Android は標準の LLVM AutoFDO プロファイルを使用します。AFDO プロファイルは LLVM の llvm-profdata ツールを使用して読み取れます。afdo_summary.sh スクリプト(toolchain/pgo-profiles/scripts/afdo_summary.sh)は AutoFDO プロファイルに従って、最も頻繁に実行される関数を自動的に生成します。