Android LLVM ツールチェーン チームです。Google の最優先事項の一つは、LLVM エコシステムの最適化手法を通じて Android のパフォーマンスを向上させることです。Google は、Android をより高速でスムーズかつ効率的にする方法を常に模索しています。最適化作業の多くはユーザー空間で行われますが、カーネルはシステムの中心であり続けます。本日、Automatic Feedback-Directed Optimization(AutoFDO)を Android カーネルに導入し、ユーザーに大きなパフォーマンス向上をもたらす方法をご紹介します。
AutoFDO とは何ですか?
標準のソフトウェア ビルドでは、コンパイラは静的コードのヒントに基づいて、関数をインライン化するかどうかや、条件分岐のどのブランチが実行される可能性が高いかなど、数千もの小さな決定を行います。これらのヒューリスティックは有用ですが、実際のスマートフォンの使用時のコード実行を正確に予測できるとは限りません。
AutoFDO は、実際の実行パターンを使用してコンパイラをガイドすることで、この問題を解決します。これらのパターンは、CPU の分岐履歴を記録することでキャプチャされた、実際の使用時にコードがたどる最も一般的な命令実行パスを表します。このデータはフリート デバイスから収集できますが、カーネルについては、上位 100 個の人気アプリの実行など、代表的なワークロードを使用してラボ環境で合成します。サンプリング プロファイラを使用してこのデータをキャプチャし、コードのどの部分が「ホット」(頻繁に使用される)で、どの部分が「コールド」であるかを特定します。これらのプロファイルを使用してカーネルを再構築すると、コンパイラは実際の Android ワークロードに合わせて、よりスマートな最適化の判断を下すことができます。
この最適化の影響を理解するには、次の重要な事実を考慮してください。
- Android では、カーネルが CPU 時間の約 40% を占めています。
- Google ではすでに AutoFDO を使用して、ユーザー空間のネイティブ実行可能ファイルとライブラリを最適化しており、コールド アプリの起動が約 4% 改善され、起動時間が 1% 短縮されています。
実環境でのパフォーマンスの向上
制御されたラボ環境のプロファイルを利用することで、Android の主要な指標全体で目覚ましい改善が見られました。これらのプロファイルは、アプリのクロールと起動を使用して収集され、6.1、6.6、6.12 のカーネルにわたって Google Pixel デバイスで測定されました。
最も顕著な改善点は以下のとおりです。これらのカーネル バージョンの AutoFDO プロファイルの詳細については、android16-6.12 カーネルと android15-6.6 カーネルのそれぞれの Android カーネル リポジトリをご覧ください。
これらは単なる理論上の数値ではありません。これにより、インターフェースの応答性が向上し、アプリの切り替えが速くなり、バッテリー駆動時間が長くなり、エンドユーザーにとって全体的に応答性の高いデバイスが実現します。
仕組み: パイプライン
Google のデプロイ戦略には、プロファイルが関連性を維持し、パフォーマンスが安定した状態を保つための高度なパイプラインが含まれています。
ステップ 1: プロファイルの収集
ユーザースペース バイナリのプロファイリングには内部テストフリートを使用していますが、汎用カーネル イメージ(GKI)については、管理されたラボ環境に移行しました。プロファイリングをデバイス リリース サイクルから切り離すことで、デプロイされたカーネル バージョンに関係なく、柔軟かつ迅速なアップデートが可能になります。重要なのは、このラボベースのデータが、実際のフリートと同等のパフォーマンス向上を実現することをテストで確認することです。
- ツールと環境: 最新のカーネル イメージでテストデバイスを書き込み、simpleperf を使用して命令実行ストリームをキャプチャします。このプロセスは、ハードウェアの機能を利用して分岐履歴を記録します。具体的には、Pixel デバイスで ARM Embedded Trace Extension(ETE)と ARM Trace Buffer Extension(TRBE)を使用します。
- ワークロード: Android アプリ互換性テストスイート(C-Suite)で人気の高い上位 100 個のアプリを使用して、代表的なワークロードを構築します。最も正確なデータを取得するために、Google は次の点に重点を置いています。
- アプリの起動: ユーザーが最も認識しやすい遅延を最適化する
- AI を活用したアプリのクロール: 連続的で進化するユーザー インタラクションをシミュレートする
- システム全体のモニタリング: フォアグラウンド アプリのアクティビティだけでなく、重要なバックグラウンド ワークロードやプロセス間通信もキャプチャします。
- 検証: この合成ワークロードは、Google の内部フリートから収集された実行パターンと 85% の類似性を示しています。
- ターゲット データ: これらのテストを十分に繰り返すことで、最も人気のあるアプリケーションに対する実際のユーザー インタラクションを正確に表す高忠実度の実行パターンをキャプチャします。さらに、この拡張可能なフレームワークにより、追加のワークロードとベンチマークをシームレスに統合して、カバレッジを拡大できます。
ステップ 2: プロファイルの処理
未加工のトレースデータを後処理して、クリーンで効果的で、コンパイラで使用できる状態にします。
- 集計: 複数のテスト実行とデバイスのデータを 1 つのシステム ビューに統合します。
- 変換: 必要に応じて不要なシンボルをフィルタリングし、未加工のトレースを AutoFDO プロファイル形式に変換します。
- プロファイルのトリミング: プロファイルをトリミングして「コールド」関数のデータを削除し、標準の最適化を使用できるようにします。これにより、使用頻度の低いコードの回帰を防ぎ、バイナリサイズの不要な増加を回避できます。
ステップ 3: プロファイルのテスト
プロファイルは、デプロイ前に厳格な検証を受け、安定性のリスクなしに一貫したパフォーマンスの向上を実現することが保証されます。
- プロファイルとバイナリの分析: 新しいプロファイルの内容(ホット関数、サンプル数、プロファイル サイズなど)を以前のバージョンと厳密に比較します。また、プロファイルを使用して新しいカーネル イメージをビルドし、バイナリを分析して、テキスト セクションの変更が想定どおりであることを確認します。
- パフォーマンス検証: 新しいカーネル イメージでターゲット ベンチマークを実行します。これにより、以前のベースラインで確立されたパフォーマンスの改善が維持されていることを確認できます。
継続的な更新
コードは時間の経過とともに自然に「ドリフト」するため、静的プロファイルは最終的に有効性を失います。パフォーマンスを最大限に維持するため、パイプラインを継続的に実行して定期的な更新を推進します。
- 定期的な更新: 各 GKI リリースの前に Android カーネル LTS ブランチのプロファイルを更新し、すべてのビルドに最新のプロファイル データが含まれるようにします。
- 今後の拡張: 現在、これらのアップデートは
android16-6.12ブランチとandroid15-6.6ブランチに提供されています。今後、サポートは、まもなくリリースされるandroid17-6.18などの新しい GKI バージョンに拡大される予定です。
安定性の確保
プロファイルに基づく最適化に関する一般的な質問は、安定性のリスクが生じるかどうかです。AutoFDO は、ソースコードのロジックを変更するのではなく、主にコンパイラのヒューリスティクス(関数のインライン化やコード レイアウトなど)に影響を与えるため、カーネルの機能的完全性を維持します。このテクノロジーは、Android プラットフォーム ライブラリ、ChromeOS、Google 独自のサーバー インフラストラクチャの標準的な最適化として長年使用されており、大規模な環境で実績を上げています。
一貫した動作をさらに保証するために、「デフォルトで保守的」な戦略を適用します。高忠実度プロファイルでキャプチャされない関数は、標準のコンパイラ メソッドを使用して最適化されます。これにより、カーネルの「コールド」部分、つまり実行頻度の低い部分が標準ビルドと同じように動作することが保証され、パフォーマンスの低下や、コーナー ケースでの予期しない動作を防ぐことができます。
今後の展望
現在、android16-6.12 ブランチと android15-6.6 ブランチ全体に AutoFDO をデプロイしています。この最初のロールアウト以外にも、この技術をさらに強化するための有望な方法がいくつかあります。
- リーチの拡大: Google は、AutoFDO プロファイルを新しい GKI カーネル バージョンと、現在の
aarch64サポートを超える追加のビルド ターゲットにデプロイすることを楽しみにしています。 - GKI モジュールの最適化: 現在、最適化はメインのカーネル バイナリ(
vmlinux)に重点が置かれています。AutoFDO を GKI モジュールに拡張すると、カーネル サブシステムのより大きな部分でパフォーマンスのメリットが得られる可能性があります。 - ベンダー モジュールのサポート: ドライバ開発キット(DDK)を使用してビルドされたベンダー モジュールに対する AutoFDO のサポートも検討しています。ビルドシステム(Kleaf)とプロファイリング ツール(simpleperf)でサポートがすでに利用可能であるため、ベンダーはこれらの最適化手法を特定のハードウェア ドライバに適用できます。
- プロファイルの対象範囲の拡大: より広範なクリティカル ユーザー ジャーニー(CUJ)からプロファイルを収集して最適化できる可能性があります。
AutoFDO を Android カーネルに導入することで、OS の基盤が、ユーザーがデバイスを日常的に使用する方法に合わせて最適化されます。
-
プロダクト ニュースGoogle Play では、サブスクリプション プラットフォームを継続的に拡大し、成長の促進、新しいビジネスモデルへの適応、ユーザーのニーズへの対応をサポートしています。
Sheenam Mittal • 所要時間: 4 分 -
プロダクト ニュース昨年、Android Studio はあらゆる AI モデルに対応しました。本日、Google はコーディング エージェントの選択をサポートすることで、次のステップに進みます。
Matthew Warner • 所要時間: 3 分 -
プロダクト ニュースGooglebook は、共有 Android 基盤上に構築された新しいカテゴリのノートパソコンです。HP、Dell、Lenovo、Acer、Asus などのパートナーの高性能ハードウェアは、モバイルの利便性とデスクトップのパワーを兼ね備えています。
Fahd Imtiaz, Loryn Hairston • 所要時間: 4 分
Android 開発に関する最新の分析情報を毎週メールでお届けします。