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

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

AutoFDO 是基于 Instrumentation 的配置文件引导优化 (PGO) 的后续技术。

与其他基于 Instrumentation 的配置文件相比,AutoFDO 具有以下其他优势

  • 非侵入式数据收集:AutoFDO 配置文件可以从开发或用户设备收集,而无需对构建规则进行任何修改。

  • 真实世界的使用情况表示:假设从用户设备收集配置文件,AutoFDO 可以表示真实世界的使用行为,而 Instrumentation PGO 仅代表合成收集工作负载。通常,创建与真实世界使用情况完全匹配的收集工作负载并非易事。

AOSP 附带了大多数性能关键型项目的 AutoFDO 配置文件。这些配置文件是从手机和平板电脑设备收集的,代表了它们的一般使用模式。这些配置文件位于 toolchain/pgo-profiles/sampling 下。默认情况下,AOSP 上已启用 AFDO。

为 Blueprint 构建规则启用 AutoFDO

要为 Blueprint 构建规则启用 AutoFDO,请将 afdo: true 附加到共享库或二进制规则。

收集配置文件

AOSP 提供的预捆绑配置文件不支持以下特定情况

  • 包含其他 AutoFDO 项目
  • 存在本地修改的代码
  • 与您的系统关联的独特使用模式

如果您遇到上述任何一种情况,则必须直接从开发或用户设备收集配置文件。

有关如何准备 ARM 设备以收集 AutoFDO 配置文件的详细说明,请参阅收集 ETM 数据以用于 AutoFDO

有关如何启用自动后台配置文件收集、处理和上传的信息,请参阅Profcollect

分析 AutoFDO 配置文件

Android 使用标准的 LLVM AutoFDO 配置文件。可以使用 LLVM 的 llvm-profdata 工具读取 AFDO 配置文件。afdo_summary.sh 脚本 (toolchain/pgo-profiles/scripts/afdo_summary.sh) 会根据 AutoFDO 配置文件自动生成最常执行的函数。