自动反馈导向优化(12 或更高版本)

Android 12 中引入的 Android 构建系统支持使用自动反馈导向优化 (AutoFDO) 来优化具有蓝图构建规则的原生 Android 模块。AutoFDO 是一种基于采样的优化技术。AutoFDO 会捕获系统二进制文件的运行时行为,使编译器能够优化性能,同时缩减二进制文件的大小。Android 支持从 X86、X86_64、ARM 和 ARM64 设备收集配置文件,但配置文件可以跨架构使用。

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 配置文件自动生成最频繁执行的函数。