Управление эффективностью

Управление энергопотреблением и производительностью устройств Android помогает обеспечить стабильную и бесперебойную работу приложений на самых разных устройствах. В Android 7.0 и более поздних версий OEM могут реализовать поддержку подсказок о стабильной производительности, которые позволяют приложениям поддерживать постоянную производительность устройства и указывать эксклюзивное ядро для повышения производительности активных приложений, интенсивно использующих ресурсы ЦП.

Стабильная производительность

Производительность приложений, которые работают долго (игры, камера, RenderScript, обработка аудио), может значительно снижаться, когда температура устройства достигает предельного значения и процессор (SoC) начинает работать медленнее. Разработчики приложений, создающие высокопроизводительные и долго работающие приложения, ограничены, поскольку возможности базовой платформы являются движущейся целью, когда устройство начинает нагреваться.

Чтобы устранить эти ограничения, в Android 7.0 была добавлена поддержка стабильной производительности, позволяющая производителям устройств предоставлять подсказки о возможностях устройства для приложений, работающих в течение длительного времени. Разработчики приложений могут использовать эти подсказки, чтобы обеспечить стабильную работу устройства в течение длительного времени.

Архитектура

Приложение Android может запросить у платформы переход в режим устойчивой производительности, в котором устройство Android может поддерживать постоянный уровень производительности в течение длительного времени.

Рисунок 1. Режим стабильной производительности.

Реализация

Чтобы обеспечить стабильную производительность в Android 7.0 и более поздних версиях, OEM-производители должны:

  • Внесите изменения в HAL питания, чтобы заблокировать максимальные частоты ЦП и графического процессора или выполните другие оптимизации, чтобы предотвратить тепловое троттлинг.
  • Реализуйте новую подсказку POWER_HINT_SUSTAINED_PERFORMANCE в HAL питания.
  • Задекларируйте поддержку, вернув значение TRUE через API isSustainedPerformanceModeSupported().
  • Реализуйте Window.setSustainedPerformanceMode.

В эталонной реализации Nexus подсказка по питанию ограничивает максимальные частоты ЦП и графического процессора на самых высоких устойчивых уровнях. Помните, что снижение максимальной частоты ЦП и графического процессора приведет к снижению частоты кадров, но в этом режиме более низкая частота предпочтительнее из-за ее стабильности. Например, устройство с обычными максимальными тактовыми частотами может отрисовывать 60 кадров в секунду в течение нескольких минут, но после того, как устройство нагреется, оно может снизить частоту до 30 кадров в секунду через 30 минут. В режиме устойчивой производительности устройство может, например, постоянно отрисовывать 45 кадров в секунду в течение 30 минут. Цель – обеспечить частоту кадров в режиме, которая будет не ниже, чем без него, и будет стабильной, чтобы разработчикам не приходилось постоянно подстраиваться под меняющиеся условия.

Мы настоятельно рекомендуем реализовать устойчивый режим таким образом, чтобы устройство достигало максимально возможной устойчивой производительности, а не только минимальных значений, необходимых для прохождения теста (например, выберите максимально возможные ограничения частоты, которые не приводят к снижению производительности устройства из-за перегрева с течением времени).

Примечание. Ограничение максимальной тактовой частоты не требуется для реализации режима устойчивой производительности.

Проверка

Производители могут использовать CTS-тест (Android 7.0 и более поздних версий), чтобы проверить реализацию API для поддержания производительности. Тест запускает рабочую нагрузку примерно на 30 минут и сравнивает производительность с включенным и выключенным режимом стабильной производительности.

  • При включенном режиме устойчивой производительности частота кадров должна оставаться относительно постоянной (тест измеряет процент изменения частоты кадров с течением времени и требует изменения менее чем на 5 %).
  • Если режим устойчивой производительности включен, частота кадров не должна быть ниже, чем при отключенном режиме по истечении 30 минут.

Кроме того, вы можете вручную протестировать реализацию с помощью нескольких рабочих нагрузок, интенсивно использующих ЦП и графический процессор, чтобы убедиться, что устройство не снижает производительность из-за перегрева после 30 минут использования. Во время внутреннего тестирования мы использовали образцы рабочих нагрузок, в том числе игры и приложения для тестирования производительности (например, gfxbench).

Эксклюзивные ядра

Для рабочих нагрузок, интенсивно использующих ЦП и чувствительных ко времени, вытеснение другим потоком может привести к тому, что кадры не будут укладываться в сроки. Приложениям, для которых важны низкая задержка и высокая частота кадров (например, аудиоприложениям или приложениям виртуальной реальности), выделенное ядро ЦП может гарантировать приемлемый уровень производительности.

На устройствах с Android 7.0 и более поздними версиями теперь можно зарезервировать одно ядро специально для активного приложения. Это повышает производительность всех активных приложений и позволяет приложениям с высокой интенсивностью рабочих нагрузок лучше контролировать распределение работы между ядрами ЦП.

Чтобы поддерживать эксклюзивное ядро на устройстве:

  • Включите cpusets и настройте cpuset, в котором будет только активное приложение.
  • Убедитесь, что одно ядро (эксклюзивное) зарезервировано для потоков из этого cpuset.
  • Реализуйте API getExclusiveCores, чтобы возвращать номер эксклюзивного ядра.

Чтобы определить, какие процессы запланированы на каких ядрах, используйте команду systrace во время выполнения любой рабочей нагрузки и убедитесь, что на эксклюзивном ядре не запланированы потоки пользовательского пространства из приложений, отличных от активного приложения.

Пример реализации для Nexus 6P можно найти на странице android//device/huawei/angler/power/power.c.