В Android 12 появилась поддержка оптимизации нативных модулей Android, в которых используются правила сборки blueprint, с помощью автоматической оптимизации на основе обратной связи (AutoFDO). AutoFDO – это метод оптимизации на основе выборки. AutoFDO фиксирует поведение системных двоичных файлов во время выполнения, что позволяет компиляторам лучше оптимизировать производительность и уменьшать размер двоичных файлов. Android поддерживает сбор профилей с устройств X86, X86_64, ARM и ARM64, хотя профили можно использовать на устройствах с любой архитектурой.
AutoFDO – это преемник оптимизации на основе профиля с использованием инструментов (PGO).
По сравнению с другими профилями на основе инструментов AutoFDO имеет следующие преимущества:
Незаметный сбор данных. Профили AutoFDO можно собирать с устройств разработчиков или пользователей без изменения правил сборки.
Представление реального использования. AutoFDO представляет поведение при реальном использовании, если профили собираются с устройств пользователей, а PGO с инструментацией представляет только синтетическую рабочую нагрузку. Обычно создать рабочую нагрузку, которая идеально соответствует реальному использованию, непросто.
В AOSP поставляются профили AutoFDO для большинства проектов, критичных к производительности. Профили были собраны с телефонов и планшетов и отражают общие модели использования. Профили находятся в разделе "toolchain/pgo-profiles/sampling". В AOSP функция AFDO включена по умолчанию.
Как включить AutoFDO для правила сборки
Чтобы включить AutoFDO для правил сборки чертежей, добавьте afdo: true в общую библиотеку или двоичное правило.
Как собирать профили
Встроенный профиль, поставляемый с AOSP, не поддерживает следующие сценарии:
- Добавление дополнительных проектов AutoFDO.
- наличие локально измененного кода;
- уникальные шаблоны использования, связанные с вашей системой;
В таких случаях профили нужно собирать непосредственно с устройств разработчиков или пользователей.
Подробные инструкции о том, как подготовить устройства ARM к сбору профилей AutoFDO, можно найти в статье Сбор данных ETM для AutoFDO.
Подробные инструкции по подготовке устройств с архитектурой x86 к сбору профилей AutoFDO приведены в статье Как собирать данные LBR для AutoFDO.
Информацию о том, как включить автоматический сбор, обработку и загрузку профилей в фоновом режиме, можно найти в статье Profcollect.
Анализ профилей AutoFDO
В Android используются стандартные профили LLVM AutoFDO. Профили AFDO можно прочитать с помощью инструмента llvm-profdata из LLVM. Скрипт afdo_summary.sh (toolchain/pgo-profiles/scripts/afdo_summary.sh) автоматически создает наиболее часто выполняемые функции в соответствии с профилем AutoFDO.