Новости о продуктах
Повышение производительности Android: представляем AutoFDO для ядра.
4 минуты чтения

Мы — команда разработчиков инструментария Android LLVM. Один из наших главных приоритетов — улучшение производительности Android за счет методов оптимизации в экосистеме LLVM. Мы постоянно ищем способы сделать Android быстрее, плавнее и эффективнее. Хотя большая часть нашей работы по оптимизации происходит в пользовательском пространстве, ядро остается сердцем системы. Сегодня мы рады рассказать о том, как мы внедряем автоматическую оптимизацию на основе обратной связи (AutoFDO) в ядро Android, чтобы обеспечить значительное повышение производительности для пользователей.
Что такое AutoFDO?
В процессе стандартной сборки программного обеспечения компилятор принимает тысячи мелких решений, например, следует ли встраивать функцию и какой вариант условного оператора, скорее всего, будет использован, основываясь на статических подсказках кода. Хотя эти эвристические методы полезны, они не всегда точно предсказывают выполнение кода в реальных условиях использования телефона.
AutoFDO меняет это, используя реальные шаблоны выполнения инструкций для управления компилятором. Эти шаблоны представляют собой наиболее распространенные пути выполнения инструкций, которые код проходит во время фактического использования, зафиксированные путем записи истории ветвлений ЦП. Хотя эти данные можно собрать с устройств, используемых в сети, для ядра мы синтезируем их в лабораторных условиях, используя репрезентативные рабочие нагрузки, такие как запуск 100 самых популярных приложений. Мы используем профилировщик выборки для сбора этих данных, определяя, какие части кода являются «горячими» (часто используемыми), а какие — «холодными». Когда мы пересобираем ядро с этими профилями, компилятор может принимать гораздо более разумные решения по оптимизации, адаптированные к реальным рабочим нагрузкам Android.
Чтобы понять влияние этой оптимизации, рассмотрим следующие ключевые факты:
- На Android ядро процессора потребляет около 40% процессорного времени.
- Мы уже используем AutoFDO для оптимизации нативных исполняемых файлов и библиотек в пользовательском пространстве, добившись примерно 4% улучшения запуска приложений в холодном режиме и сокращения времени загрузки на 1%.
Реальные результаты подтверждают эффективность.
Мы наблюдали впечатляющие улучшения по ключевым показателям Android благодаря использованию профилей, полученных в контролируемых лабораторных условиях. Эти профили были собраны с помощью сканирования и запуска приложений и измерены на устройствах Pixel с ядрами версий 6.1, 6.6 и 6.12.
Наиболее заметные улучшения перечислены ниже. Подробную информацию о профилях AutoFDO для этих версий ядра можно найти в соответствующих репозиториях ядра Android для ядер android16-6.12 и android15-6.6 .

Это не просто теоретические цифры. Они означают более быстрый интерфейс, более быстрое переключение между приложениями, увеличенное время автономной работы и в целом более отзывчивое устройство для конечного пользователя.
Как это работает: конвейер
Наша стратегия развертывания включает в себя сложный конвейер, обеспечивающий актуальность профилей и стабильность производительности.

Шаг 1: Сбор данных профиля
Хотя для профилирования бинарных файлов пользовательского пространства мы используем наш внутренний парк тестовых устройств, для создания универсального образа ядра (GKI) мы перешли к контролируемой лабораторной среде. Отделение профилирования от цикла выпуска устройств позволяет гибко и оперативно обновлять систему независимо от развернутых версий ядра. Что особенно важно, тесты подтверждают, что данные, полученные в лабораторных условиях, обеспечивают прирост производительности, сопоставимый с результатами, полученными в реальных условиях эксплуатации.
- Инструменты и среда: Мы прошиваем тестовые устройства последним образом ядра и используем simpleperf для захвата потоков выполнения инструкций. Этот процесс основан на возможностях оборудования для записи истории ветвлений , в частности, с использованием ARM Embedded Trace Extension (ETE) и ARM Trace Buffer Extension (TRBE) на устройствах Pixel.
- Нагрузки: Мы создаём репрезентативную рабочую нагрузку, используя 100 самых популярных приложений из набора тестов на совместимость приложений Android (C-Suite) . Для получения наиболее точных данных мы фокусируемся на:
- Запуск приложения : оптимизация для устранения наиболее заметных задержек со стороны пользователей.
- Сканирование приложений с помощью ИИ : моделирование непрерывных, развивающихся взаимодействий с пользователем.
- Мониторинг всей системы: фиксация не только активности приложений в фоновом режиме, но и критически важных фоновых задач, а также межпроцессного взаимодействия.
- Проверка: Данная синтезированная рабочая нагрузка демонстрирует 85% сходство с шаблонами выполнения, собранными из нашего внутреннего парка приложений.
- Целевые данные: Благодаря достаточному количеству повторений этих тестов мы получаем высокоточные шаблоны выполнения, которые точно отражают реальное взаимодействие пользователей с наиболее популярными приложениями. Кроме того, эта расширяемая платформа позволяет нам беспрепятственно интегрировать дополнительные рабочие нагрузки и бенчмарки для расширения охвата.
Шаг 2: Обработка профиля
Мы проводим постобработку исходных данных трассировки, чтобы убедиться в их чистоте, эффективности и готовности к компиляции.
- Агрегация: Мы объединяем данные из множества тестовых запусков и устройств в единое системное представление.
- Преобразование: Мы преобразуем необработанные трассировки в формат профиля AutoFDO, отфильтровывая при необходимости ненужные символы.
- Обрезка профилирования: Мы обрезаем профили, чтобы удалить данные для «холодных» функций, позволяя им использовать стандартную оптимизацию. Это предотвращает регрессии в редко используемом коде и избегает ненужного увеличения размера бинарного файла.
Шаг 3: Тестирование профиля
Перед развертыванием профили проходят тщательную проверку, чтобы гарантировать стабильное повышение производительности без рисков для стабильности.
- Анализ профиля и бинарных файлов: Мы тщательно сравниваем содержимое нового профиля (включая популярные функции, количество выборок и размер профиля) с предыдущими версиями. Мы также используем профиль для создания нового образа ядра, анализируя бинарные файлы, чтобы убедиться, что изменения в текстовом разделе соответствуют ожиданиям.
- Проверка производительности: Мы провели целевые тесты производительности на новом образе ядра. Это подтверждает, что он сохраняет улучшения производительности, достигнутые в предыдущих базовых версиях.
Постоянные обновления
Со временем код естественным образом "изменяется", поэтому статичный профиль в конечном итоге потеряет свою эффективность. Для поддержания максимальной производительности мы запускаем конвейер непрерывно, чтобы обеспечить регулярные обновления:
- Регулярное обновление: Мы обновляем профили в ветках ядра Android LTS перед каждым релизом GKI, гарантируя, что каждая сборка будет включать самые актуальные данные профиля.
- Дальнейшее расширение: В настоящее время мы выпускаем эти обновления для веток
android16-6.12иandroid15-6.6и расширим поддержку на более новые версии GKI, такие как предстоящаяandroid17-6.18.
Обеспечение стабильности
Часто задаваемый вопрос об оптимизации с помощью профилирования — не создает ли она рисков для стабильности. Поскольку AutoFDO в основном влияет на эвристические алгоритмы компилятора, такие как встраивание функций и структура кода, а не на логику исходного кода, она сохраняет функциональную целостность ядра. Эта технология уже доказала свою эффективность в масштабах, служа стандартной оптимизацией для библиотек платформы Android, ChromeOS и собственной серверной инфраструктуры Google на протяжении многих лет.
Для дальнейшего обеспечения стабильной работы мы применяем стратегию «консервативности по умолчанию». Функции, не включенные в наши высокоточные профили, оптимизируются с использованием стандартных методов компилятора. Это гарантирует, что «холодные» или редко выполняемые части ядра будут вести себя точно так же, как и в стандартной сборке, предотвращая снижение производительности или неожиданное поведение в частных случаях.
Взгляд в будущее
В настоящее время мы развертываем AutoFDO в ветках android16-6.12 и android15-6.6 . Помимо этого первоначального развертывания, мы видим несколько перспективных направлений для дальнейшего совершенствования технологии:
- Расширение охвата: Мы рассчитываем на развертывание профилей AutoFDO в более новых версиях ядра GKI и на дополнительных целевых платформах сборки, помимо текущей поддержки
aarch64. - Оптимизация модулей GKI: В настоящее время наша оптимизация сосредоточена на основном исполняемом файле ядра (
vmlinux). Расширение поддержки AutoFDO на модули GKI может принести преимущества в производительности большей части подсистемы ядра. - Поддержка модулей от поставщиков: Мы также заинтересованы в поддержке AutoFDO для модулей от поставщиков, созданных с использованием комплекта разработки драйверов (DDK) . Благодаря уже имеющейся поддержке в нашей системе сборки ( Kleaf ) и инструментах профилирования ( simpleperf ), это позволит поставщикам применять те же методы оптимизации к драйверам своего конкретного оборудования.
- Более широкий охват профилирования: существует потенциал для сбора профилей по более широкому спектру критически важных пользовательских сценариев (CUJ) с целью их оптимизации.
Внедряя AutoFDO в ядро Android, мы гарантируем, что сама основа ОС будет оптимизирована для того, как вы используете свое устройство каждый день.
Продолжить чтение

Новости о продуктах
Рабочий процесс и потребности каждого разработчика в области ИИ уникальны, и важно иметь возможность выбирать, как именно ИИ поможет в разработке. В январе мы представили возможность выбора любой локальной или удаленной модели ИИ для обеспечения работы функций ИИ в Android Studio.
Matthew Warner • 2 мин чтения

Новости о продуктах
Android Studio Panda 3 теперь стабильна и готова к использованию в продакшене. Этот релиз предоставляет еще больше возможностей для управления и настройки рабочих процессов на основе ИИ, что делает создание высококачественных приложений для Android проще, чем когда-либо.
Matt Dyor • 3 мин чтения

Новости о продуктах
В Google мы стремимся предоставлять самые эффективные модели искусственного интеллекта непосредственно на устройства Android в вашем кармане. Сегодня мы с радостью объявляем о выпуске нашей новейшей открытой модели: Gemma 4.
Caren Chang , David Chou • 3 мин чтения
Будьте в курсе событий
Получайте еженедельно самые свежие новости о разработке Android прямо на свою электронную почту.

