AutoFDO内核优化如何悄然提升Android的速度和效率

最后更新: 03/14/2026
作者: C 源跟踪
  • 谷歌正在将 AutoFDO 配置文件引导的优化直接引入 Android 内核,以降低 CPU 开销和能耗。
  • 来自 100 个最常用应用程序的真实执行模式指导编译器优先处理热代码路径,降低冷代码路径的优先级。
  • 早期测试表明,启动速度提高了约 2.1%,冷启动速度提高了约 4.3%,后台效率也有所提高。
  • AutoFDO 正在 Android 内核 LTS 分支 android16-6.12 和 android15-6.6 中推出,并计划扩展到 Android 17 及更高版本。

Android 内核自动 FDO 优化

Android 正在经历一系列悄然进行的底层改动,旨在让手机感觉更舒适。 响应速度更快,同时还能进一步延长电池续航时间谷歌并没有推出花哨的新功能,而是专注于操作系统核心如何在底层每毫秒做出决策。

这项工作的核心是一种名为 AutoFDO 的技术,它是 FDO 的缩写。 将自动反馈导向优化应用于 Android 内核通过根据实际使用数据重新调整内核的编译方式,谷歌正试图减少 CPU 的浪费,减少后台开销,并为现有设备带来适度但明显的响应速度提升。

AutoFDO 在 Android 内核中实际执行的操作

在正常构建过程中,编译器必须进行以下操作: 关于如何安排和调整代码,需要做出数千个微小的决策。它会猜测哪些分支是可能的,哪些函数应该内联,指令应该如何在内存中布局等等,主要基于静态提示和通用启发式方法。

问题在于,这些猜测并不总是与手机实际使用情况相符。内核可以解释…… Android 系统中约 40% 的总 CPU 时间被占用可能会将资源浪费在很少使用的代码路径上,而经常使用的代码路径却没有得到应有的优化。

AutoFDO 通过向编译器提供数据来颠覆这种方法。 基于真实执行模式构建的配置文件构建过程并非主要依赖理论,而是根据代码在设备上的实际运行情况来指导,从而使内核二进制文件能够根据日常工作负载进行调整。

对用户而言,这不会显示为新的设置或菜单。它以一种微妙的方式出现: 启动应用程序或重启手机时反应速度略快而且,用户永远不会直接看到后台决策所消耗的 CPU 时间也更少。

使用 AutoFDO 进行内核优化

从静态猜测到实际执行情况

传统上,基于性能分析的优化依赖于在特殊运行期间收集数据的插桩二进制文件。这种方法虽然有效,但可能会造成干扰,而且可能无法反映实际情况。 人们每天实际如何使用手机AutoFDO 采用基于采样的更轻量级方法。

Google 使用抽样分析器来捕获 Android 在运行实际工作负载时 CPU 的分支历史记录和指令路径这些样本揭示了内核的哪些部分是“热的”(经常执行),哪些部分是“冷的”(很少被触及),而无需使用大量的检测工具重新构建所有内容。

具体到内核,数据是在实验室环境中合成的。工程师会重现包含以下内容的典型工作负载。 最受欢迎的100款安卓应用 来自兼容性测试套件。此组合旨在模拟真实使用情况:打开和关闭应用程序、在应用程序之间切换、后台同步以及进程间通信。

收集到的原始痕迹会经过一系列处理。 聚合和清洗过程来自多次运行和多个设备的数据会被合并,转换为标准的 LLVM AutoFDO 分析格式,并进行过滤,只保留相关的符号和函数。冷函数通常会从分析结果中移除,以便它们能够回退到传统的编译器启发式算法,而不是影响优化。

这个精心设计的配置文件随后会指导新的内核构建。有了关于哪些代码路径最为重要的准确信息,编译器可以更积极地内联关键例程,优化热代码的缓存友好性,并降低不常用分支的优先级。最终得到的内核是: 更符合安卓手机实际的工作负载。.

Android系统还能提升多少速度和效率?

谷歌内部测试的早期数据虽然不大,但却是实实在在的。在内核中应用 AutoFDO 后, 设备启动时间缩短了约 2.1%。这样做虽然不能让慢手机变成火箭,但每次重启后可以缩短一些等待时间。

当应用程序处于“冷启动”状态(即尚未加载到内存中)时,性能提升更为显著。在这种情况下,AutoFDO 的性能提升约为 冷启动时间缩短 4.3%这对于依赖原生组件和内核服务的较重应用程序尤其有用。

在这些明确的指标背后,谷歌还指出了一些领域的改进: 虽然不太显眼,但仍然很重要更流畅的后台调度、更少的常规内核任务 CPU 峰值占用,以及更精简的系统级操作处理。所有这些都让人感觉设备响应更快,即使很难指出某一项显著的变化。

由于内核会占用大量的 CPU 总容量,即使是个位数的百分比提升也会转化为实际的性能提升。 释放可供应用程序和系统界面使用的资源同时,减少不必要的 CPU 工作必然有助于提高电源效率,因此无需任何硬件更改即可减轻电池负担。

谷歌谨慎地将这些好处描述为渐进式的。用户不应期待翻天覆地的变化,而应期待…… 随着时间的推移,Android 的用户体验和行为方式不断改进。尤其是当多个此类优化在多个版本中叠加使用时。

在改变内核构建方式的同时保持稳定性

任何基于用户画像的优化都存在一个反复出现的担忧,那就是它是否会带来风险。 破坏预期行为或引入不易察觉的漏洞就 AutoFDO 而言,谷歌强调该技术修改的是编译器对代码进行优先级排序和布局的方式,而不是内核本身的逻辑。

该方法被描述为“默认保守”。这意味着那些在高保真度配置文件数据中没有得到充分体现的函数不会被采用。 剩下的就是标准优化策略了 而不是被大幅度地重塑。冷启动或很少执行的路径的行为基本与传统构建方式相同,这降低了在特殊情况下出现回归的可能性。

在配置文件被接受之前,它们会经过多项检查。工程师会分析配置文件的内容——包括热点函数、采样数量和总体大小——并将其与之前的版本进行比较。然后,系统会构建一个新的内核镜像。 运行基准测试以确保性能提升的一致性 并且关键工作负载的延迟或吞吐量不会意外恶化。

这并非谷歌首次使用 AutoFDO 技术。这项技术此前已被广泛应用。 核心 Android 库、ChromeOS 组件,甚至内部服务器基础设施先前的经验起到了安全网的作用,表明这种优化风格本身已经成熟,即使将其应用于 Android 内核是相对较新的。

结果是,AutoFDO 的内核集成旨在 在保持功能稳定性的同时,尽可能提高效率对于最终用户而言,这种变化在可靠性方面是不易察觉的,但在性能方面却能悄然带来好处。

个人资料如何随时间更新和推出

一个静态的个人资料很快就会过时,因为 Android、应用程序和使用模式的演变为了保持 AutoFDO 的有效性,谷歌将配置文件生成视为一个持续的过程,而不是一次性的任务。

重新生成通用内核图像 (GKI) 的配置文件 在每次发布新的 LTS 内核之前系统会根据当前版本排名前 100 的应用更新工作负载,重新运行这些工作负载,重新采样数据,并重建和验证用户画像。这种滚动式流程有助于确保新内核版本能够反映用户在特定时间点实际使用 Android 的方式。

有趣的是,谷歌指出…… 实验室生成的工作负载显示出约 85% 的相似度 与从内部设备集群中捕获的执行模式相吻合。这种程度的重叠表明,合成方法与真实世界的行为足够接近,可用于指导优化,同时又更易于控制和更新。

由于这些配置文件遵循标准的 LLVM AutoFDO 格式,因此它们可以直接插入到 现有的分析工具,例如 llvm-profdata工程团队可以检查热点函数,深入研究调用模式,并验证优化工作是否真正用在了重要的地方。

经过多次迭代,这种重复的分析和重建循环将 AutoFDO 变成了一种 内核的连续调优机制而不是仅限于某个安卓版本的单一调整。

Android 堆栈和工具中的 AutoFDO

内核向 AutoFDO 的转变建立在 Android 技术栈其他部分长期以来所做的工作之上。AutoFDO 支持是 已内置于 AOSP 使用的 Android 构建系统中。特别是对于依赖蓝图式构建定义的本地模块而言。

对于 AOSP 中许多对性能要求较高的库和二进制文件,我们已经从真实的手机和平板电脑上收集了性能分析数据。 现成的 AutoFDO 配置文件与源文件并存。 只需切换相应的构建标志即可启用,因此密切关注 AOSP 的设备制造商只需进行极少的额外工作即可继承这些优化。

Android 的性能分析框架可以跨多个 CPU 架构收集数据,包括 x86、x86_64、ARM 和 ARM64只要工作负载具有代表性,在一个架构上创建的配置文件有时可以适应另一个架构,从而简化跨异构设备阵容的部署。

需要更个性化优化的开发者——例如,在添加自己的原生组件或修改现有组件时——我们鼓励他们这样做。 直接从开发或测试设备收集配置文件simpleperf 及相关实用程序等工具可以帮助捕获必要的样本,而不会严重干扰正常运行。

简而言之,AutoFDO 不仅仅是内核技巧,它属于一个更广泛的策略。 Android 最关键的组件会根据真实使用数据不断重新编译。而不是仅仅依赖于对性能的静态假设。

这些内核改进将在何时何地生效

谷歌率先在内核构建中引入了 AutoFDO 驱动的内核构建。 Android 内核的长期支持 (LTS) 分支具体来说,是 android16-6.12 和 android15-6.6。这些分支是许多制造商的基准,他们在此基础上添加自己的更改和设备特定的调整。

该公司还概述了将 AutoFDO 使用范围扩大到 未来的 GKI 版本,例如 android17-6.18随着新设备搭载这些内核,以及现有手机收到更新以引入更新的 LTS 内核,更多用户应该会开始受益于改进后的性能。

展望未来,谷歌正在探索各种方法 将 AutoFDO 覆盖范围扩展到主 vmlinux 二进制文件之外这包括将基于配置文件的优化引入 GKI 模块,并最终引入使用驱动程序开发工具包 (DDK) 构建的供应商模块。这将使硬件合作伙伴能够将相同的配置文件优化技术应用于他们自己的驱动程序,从而将优势更广泛地扩展到整个生态系统。

从长远来看,基于 AutoFDO 的构建将影响内核及其模块的越来越多的部分。 从核心调度代码到设备特定组件随着这种影响范围的扩大,即使每次变化都很细微,对响应速度和效率的累积影响也可能变得更加明显。

所有这些都促成了Android底层调优方式的悄然但意义深远的转变。通过让实际应用场景的执行模式指导编译器,谷歌的目标是打造运行速度更快、CPU资源占用更少、性能更强的手机。 更有效地利用每一毫安时的电池电量 ——所有操作都无需用户更换设备或深入设置。

相关文章: