Управление производительностью

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

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

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

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

Архитектура

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

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

Выполнение

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

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

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

Мы настоятельно рекомендуем реализовать устойчивый режим, чтобы устройство достигало максимально возможной устойчивой производительности, а не только минимальных значений, необходимых для прохождения теста (например, выбирайте максимально возможные МАКСИМАЛЬНЫЕ ограничения частоты, которые не приводят к тепловому дросселированию устройства с течением времени).

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

Проверка

OEM-производители могут использовать тест 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 .