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