Система сборки 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.