Управление мощностью и производительностью устройств Android может помочь обеспечить стабильную и бесперебойную работу приложений на широком спектре оборудования. В Android 7.0 и более поздних версиях OEM-производители могут реализовать поддержку подсказок по устойчивой производительности, которые позволяют приложениям поддерживать стабильную производительность устройства, а также указывать эксклюзивное ядро для повышения производительности приоритетных приложений с интенсивным использованием ЦП.
Стабильная производительность
Для долго работающих приложений (игры, камера, RenderScript , обработка звука) производительность может резко меняться по мере достижения пределов температуры устройства и регулирования систем на кристалле (SoC). Разработчики приложений, создающие высокопроизводительные и долго работающие приложения, ограничены, поскольку возможности базовой платформы становятся движущейся целью, когда устройство начинает нагреваться.
Чтобы устранить эти ограничения, в Android 7.0 появилась поддержка устойчивой производительности, что позволяет OEM-производителям предоставлять подсказки о возможностях производительности устройства для долго работающих приложений. Разработчики приложений могут использовать эти подсказки для настройки приложений для обеспечения предсказуемого и стабильного уровня производительности устройства в течение длительных периодов времени.
Архитектура
Приложение Android может запросить у платформы переход в режим устойчивой производительности, в котором устройство Android может поддерживать постоянный уровень производительности в течение длительных периодов времени.
Выполнение
Чтобы поддерживать стабильную производительность 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
.