Автоматическая оптимизация на основе обратной связи (12 или выше)

Система сборки Android, представленная в Android 12, поддерживает оптимизацию нативных модулей Android, для которых существуют правила сборки Blueprint, с помощью автоматической оптимизации на основе обратной связи (AutoFDO) . AutoFDO — это метод оптимизации, основанный на выборке. AutoFDO фиксирует поведение системных бинарных файлов во время выполнения, позволяя компиляторам оптимизировать производительность и одновременно уменьшать размер бинарных файлов. Android поддерживает сбор профилей с устройств X86, X86_64, ARM и ARM64, хотя профили могут использоваться и для других архитектур.

AutoFDO является преемником метода оптимизации на основе профилирования (Profile-Guided Optimization, PGO), основанного на использовании измерительных приборов.

По сравнению с другими профилями, основанными на показаниях приборов, AutoFDO обладает следующими дополнительными преимуществами:

  • Ненавязчивый сбор данных: профили AutoFDO можно собирать с устройств разработчиков или пользователей без каких-либо изменений в правилах сборки.

  • Представление реального использования: AutoFDO представляет реальное поведение пользователя, предполагая, что профили собираются с пользовательских устройств, в то время как инструментарий PGO представляет только рабочую нагрузку синтетического сбора данных. Как правило, создать рабочую нагрузку сбора данных, которая идеально соответствовала бы реальному использованию, не так-то просто.

AOSP поставляется с профилями AutoFDO для большинства проектов, критически важных с точки зрения производительности. Профили были собраны с телефонов и планшетов и отражают общие модели их использования. Профили находятся в папке toolchain/pgo-profiles/sampling . AFDO включен по умолчанию в AOSP.

Включите AutoFDO для правила построения чертежа.

Чтобы включить AutoFDO для правил сборки шаблонов, добавьте afdo: true к правилу для разделяемой библиотеки или бинарного файла.

Собирайте профили

Встроенный профиль, поставляемый с AOSP, не поддерживает следующие конкретные сценарии:

  • Включение дополнительных проектов AutoFDO
  • Наличие локально измененного кода
  • Уникальные модели использования, связанные с вашей системой.

В одном из этих случаев необходимо собирать профили непосредственно с устройств разработчиков или пользовательских устройств.

Подробные инструкции по подготовке устройств ARM к сбору профилей AutoFDO см. в разделе «Сбор данных ETM для AutoFDO» .

Подробные инструкции по подготовке устройств X86 к сбору профилей AutoFDO см. в разделе « Сбор данных LBR для AutoFDO» .

Информацию о том, как включить автоматический сбор, обработку и загрузку фоновых профилей, см. в Profcollect .

Анализ профилей AutoFDO

Android использует стандартные профили LLVM AutoFDO. Профили AFDO можно прочитать с помощью инструмента LLVM llvm-profdata . Скрипт afdo_summary.sh ( toolchain/pgo-profiles/scripts/afdo_summary.sh ) автоматически генерирует наиболее часто выполняемые функции в соответствии с профилем AutoFDO.