我們是 Android LLVM 工具鍊團隊。我們的首要任務之一,就是透過 LLVM 生態系統的最佳化技術,提升 Android 效能。我們不斷尋找各種方法,讓 Android 變得更快、更順暢且更有效率。雖然我們的大部分最佳化工作都在使用者空間中進行,但核心仍是系統的核心。我們很高興在今天分享如何將自動回饋導向最佳化 (AutoFDO) 導入 Android 核心,為使用者帶來顯著的效能提升。
什麼是 AutoFDO?
在標準軟體建構期間,編譯器會根據靜態程式碼提示做出數千個小決定,例如是否要內嵌函式,以及條件式的哪個分支較有可能採用。雖然這些啟發式方法很有用,但無法準確預測實際使用手機時的程式碼執行情形。
AutoFDO 會使用實際執行模式引導編譯器,藉此改變這種情況。這些模式代表程式碼在實際使用期間最常見的指令執行路徑,是透過記錄 CPU 的分支記錄擷取而來。雖然這項資料可以從車隊裝置收集,但我們會在實驗室環境中使用代表性工作負載 (例如執行前 100 大熱門應用程式) 合成核心資料。我們會使用取樣剖析器擷取這項資料,找出程式碼中「熱」的部分 (經常使用) 和「冷」的部分。使用這些設定檔重建核心時,編譯器可以根據實際的 Android 工作負載,做出更明智的最佳化決策。
如要瞭解這項最佳化作業的影響,請參考以下重要事實:
- 在 Android 上,核心約占 CPU 時間的 40%。
- 我們已使用 AutoFDO 最佳化使用者空間中的原生執行檔和程式庫,將應用程式冷啟動時間縮短約 4%,開機時間則減少 1%。
實際效能提升
我們運用受控實驗室環境的設定檔,發現 Android 主要指標有顯著改善。這些設定檔是透過應用程式檢索和啟動收集而來,並在 6.1、6.6 和 6.12 核心的 Pixel 裝置上測量。
以下列出最顯著的改善項目。如要瞭解這些核心版本的 AutoFDO 設定檔詳細資料,請參閱 android16-6.12 和 android15-6.6 核心的 Android 核心存放區。
這些並非只是理論上的數字,這代表使用者能享有更流暢的介面、更快的應用程式切換速度、更長的電池續航力,以及整體反應更靈敏的裝置。
運作方式:管道
我們的部署策略包含複雜的管道,可確保設定檔保持相關性,並維持穩定的效能。
步驟 1:收集個人資料
雖然我們依賴內部測試車隊來分析使用者空間二進位檔,但已改用受控實驗室環境進行通用核心映像檔 (GKI) 測試。將剖析作業與裝置發布週期分離,可彈性地立即更新,不受已部署核心版本的影響。最重要的是,測試結果證實,與實際機群的資料相比,這項實驗室資料帶來的效能提升幅度相當。
- 工具和環境:我們使用最新的核心映像檔刷新測試裝置,並使用 simpleperf 擷取指令執行串流。這項程序會利用硬體功能記錄分支記錄,具體來說,就是使用 Pixel 裝置上的 ARM 嵌入式追蹤擴充功能 (ETE) 和 ARM 追蹤緩衝區擴充功能 (TRBE)。
- 工作負載:我們使用 Android 應用程式相容性測試套件 (C-Suite) 中最熱門的 100 個應用程式,建構代表性工作負載。為取得最準確的資料,我們著重於:
- 應用程式啟動:盡量減少使用者最容易注意到的延遲
- AI 驅動的應用程式檢索:模擬持續演進的使用者互動
- 全系統監控:不僅擷取前景應用程式活動,也擷取重要的背景工作負載和程序間通訊
- 驗證:這個合成工作負載與內部機群收集的執行模式,相似度高達 85% 。
- 目標資料:重複執行這些測試,我們就能擷取高真實度的執行模式,準確呈現實際使用者與最熱門應用程式的互動情形。此外,這個可擴充的架構可讓我們順暢整合其他工作負載和基準,擴大涵蓋範圍。
步驟 2:處理設定檔
我們會後續處理原始追蹤資料,確保資料乾淨、有效,且可供編譯器使用。
- 匯總:我們會將多項測試執行作業和裝置的資料匯總到單一系統檢視畫面。
- 轉換: 我們會轉換原始追蹤記錄,使其符合 AutoFDO 設定檔格式,並視需要濾除不需要的符號。
- 設定檔修剪:我們會修剪設定檔,移除「冷」函式的資料,讓設定檔使用標準最佳化功能。這樣可防止很少使用的程式碼發生迴歸,並避免二進位大小不必要地增加。
步驟 3:測試設定檔
在部署前,系統會對設定檔進行嚴格驗證,確保設定檔能穩定提升成效,且不會造成穩定性風險。
- 設定檔和二進位檔分析:我們會嚴格比較新設定檔的內容 (包括熱門函式、樣本計數和設定檔大小) 與先前版本。我們也會使用設定檔建構新的核心映像檔,並分析二進位檔,確保文字區段的變更符合預期。
- 效能驗證:我們會對新的核心映像檔執行目標基準測試。這表示該模型維持了先前基準所建立的效能提升幅度。
持續更新
程式碼會隨著時間自然「漂移」,因此靜態設定檔最終會失去效用。為維持最佳效能,我們會持續執行管道,定期更新:
- 定期重新整理:我們會在每次 GKI 發布前,重新整理 Android 核心 LTS 分支中的設定檔,確保每個建構版本都包含最新的設定檔資料。
- 未來擴展:我們目前正在為
android16-6.12和android15-6.6分支版本提供這些更新,並將支援範圍擴展至較新的 GKI 版本,例如即將推出的android17-6.18。
確保穩定性
使用特性指引最佳化時,常見的問題是這項技術是否會造成穩定性風險。由於 AutoFDO 主要影響編譯器啟發式方法 (例如函式內嵌和程式碼版面配置),而非變更原始碼的邏輯,因此可保留核心的功能完整性。這項技術已大規模驗證多年,是 Android 平台程式庫、ChromeOS 和 Google 伺服器基礎架構的標準最佳化方式。
為進一步確保行為一致,我們採用「預設保守」策略。未在精確度高的設定檔中擷取的函式,會使用標準編譯器方法進行最佳化。這可確保核心中「冷」或很少執行的部分,行為與標準建構版本完全相同,避免效能回歸或在極端情況下發生非預期行為。
未來計畫
我們目前正在 android16-6.12 和 android15-6.6 分支版本中部署 AutoFDO。除了這次的初步推出,我們也看到幾種很有前景的途徑,可進一步提升這項技術:
- 擴大觸及範圍:我們期待將 AutoFDO 設定檔部署至較新的 GKI 核心版本,以及目前
aarch64支援以外的其他建構目標。 - GKI 模組最佳化:目前最佳化作業的重點是主要核心二進位檔 (
vmlinux)。將 AutoFDO 擴展至 GKI 模組,可為更多核心子系統帶來效能優勢。 - 供應商模組支援:我們也希望支援使用驅動程式開發套件 (DDK) 建構的供應商模組 AutoFDO。我們的建構系統 (Kleaf) 和剖析工具 (simpleperf) 已支援這項功能,因此供應商可以將這些最佳化技術套用至特定硬體驅動程式。
- 涵蓋範圍更廣的設定檔:可從更多關鍵使用者歷程 (CUJ) 收集設定檔,進而進行最佳化。
我們將 AutoFDO 導入 Android 核心,確保作業系統的基礎架構能根據您日常使用裝置的方式進行最佳化。
繼續閱讀
-
產品新訊
每位開發人員的 AI 工作流程和需求都不盡相同,因此選擇 AI 輔助開發的方式非常重要。我們在 1 月推出這項功能,讓您選擇任何本機或遠端 AI 模型,為 Android Studio 中的 AI 功能提供支援
Matthew Warner • 閱讀時間:2 分鐘
-
產品新訊
Android Studio Panda 3 現已推出穩定版,可用於正式工作環境。本次發布內容提供更多 AI 輔助工作流程的控制和自訂選項,讓您更輕鬆地建構優質 Android 應用程式。
Matt Dyor • 3 分鐘可讀完
-
產品新訊
Google 致力於將最強大的 AI 模型直接帶進你的 Android 裝置。我們很高興宣布推出最新最先進的開放模型:Gemma 4。
Caren Chang, David Chou • 3 分鐘可讀完
隨時掌握最新消息
每週透過電子郵件接收最新的 Android 開發洞察資訊。