Android 12 中引入的 Android 构建系统支持使用自动反馈导向优化 (AutoFDO) 来优化具有蓝图构建规则的原生 Android 模块。AutoFDO 是一种基于采样的优化技术。AutoFDO 会捕获系统二进制文件的运行时行为,使编译器能够优化性能,同时缩减二进制文件的大小。AutoFDO 支持从 AArch32 和 AArch64 架构收集数据,但配置文件可以跨架构使用。
AutoFDO 是基于插桩的配置文件引导型优化 (PGO) 的继任产品。
与其他基于插桩的配置文件相比,AutoFDO 具有以下额外优势:
非侵扰性数据收集:无需对构建规则进行任何修改,即可从开发或用户设备收集 AutoFDO 配置文件。
代表真实使用情况:AutoFDO 代表从用户设备收集配置文件的实际使用行为,而插桩 PGO 仅代表合成收集工作负载。通常,创建与实际使用情况完全匹配的收集工作负载并非易事。
对于大多数性能至关重要的项目,AOSP 附带 AutoFDO 配置文件。配置文件收集自手机和平板电脑设备,代表了它们的常规使用模式。这些配置文件位于 toolchain/pgo-profiles/sampling
下。AFDO 在 AOSP 上默认处于启用状态。
为蓝图构建规则启用 AutoFDO
如需为蓝图构建规则启用 AutoFDO,请将 afdo: true
附加到共享库或二进制文件规则。
收集配置文件
AOSP 提供的预捆绑配置文件不支持以下特定场景:
- 添加其他 AutoFDO 项目
- 存在本地修改的代码
- 与您的系统相关的独特使用模式
如果您遇到以下任一情况,必须直接从开发设备或用户设备收集配置文件。
如需详细了解如何准备 ARM 设备以收集 AutoFDO 配置文件,请参阅为 AutoFDO 收集 ETM 数据。
如需了解如何启用自动后台配置文件收集、处理和上传功能,请参阅 Profcollect。
分析 AutoFDO 配置文件
Android 使用标准 LLVM AutoFDO 配置文件。您可以使用 LLVM 的 llvm-profdata
工具读取 AFDO 配置文件。afdo_summary.sh
脚本 (toolchain/pgo-profiles/scripts/afdo_summary.sh
) 会根据 AutoFDO 配置文件自动生成最频繁执行的函数。