我們是 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) 測試。將剖析作業與裝置發布週期分離,可讓您靈活地立即更新,不必受已部署的 Kernel 版本限制。最重要的是,測試結果證實,這項實驗室資料帶來的效能提升,與實際車隊的效能提升相當。
- 工具和環境:我們使用最新核心映像檔刷新測試裝置,並使用 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 模組,可為核心子系統的較大部分帶來效能優勢。 - 供應商模組支援:我們也希望支援使用 Driver Development Kit (DDK) 建構的供應商模組 AutoFDO。我們的建構系統 (Kleaf) 和剖析工具 (simpleperf) 已支援這項功能,因此供應商可以將這些最佳化技術套用至特定硬體驅動程式。
- 涵蓋範圍更廣的設定檔:可從更多關鍵使用者歷程 (CUJ) 收集設定檔,並進行最佳化。
我們將 AutoFDO 導入 Android 核心,確保作業系統的基礎架構能根據您日常使用裝置的方式進行最佳化。
繼續閱讀
-
產品新訊
從擴增疊加層到完全沉浸式環境,Android XR 生態系統正在迅速擴展,Samsung Galaxy XR 也已於今天上市。
Stevan Silva, Vinny DaSilva • 3 分鐘可讀完
-
產品新訊
每年 Google I/O 大會都會發布生態系統和產品的最新消息與資源,包括 Android 開發。隨著開發工作轉向 AI 和代理程式輔助工具,我們也擴大產品陣容,無論您決定如何建構 Android 應用程式,都能獲得更完善的支援。
Simona Milanovic • 閱讀時間:2 分鐘
-
產品新訊
在 2026 年 Google I/O 大會上,我們展示了 Android 生態系統的最新進展,說明如何協助您提升應用程式品質,同時盡可能提高開發效率。
Ataul Munim • 3 分鐘可讀完
隨時掌握最新消息
每週透過電子郵件接收最新的 Android 開發洞察資訊。