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

Управление мощностью и производительностью устройств 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 подсказка по мощности ограничивает максимальные частоты процессора и графического процессора на самых высоких устойчивых уровнях. Имейте в виду, что снижение полосы MAX частоты ЦП/ГП снизит частоту кадров, но эта более низкая частота предпочтительна в этом режиме из-за его устойчивости. Например, устройство с обычными максимальными тактовыми частотами может рендерить со скоростью 60 кадров в секунду в течение нескольких минут, но после того, как устройство нагреется, оно может снизиться до 30 кадров в секунду к концу 30 минут. При использовании устойчивого режима устройство может, например, стабильно рендерить со скоростью 45 кадров в секунду в течение всех 30 минут. Цель состоит в том, чтобы частота кадров при использовании режима была такой же высокой (или выше), чем частота кадров при неиспользовании режима, и была постоянной во времени, чтобы разработчикам не приходилось преследовать движущуюся цель.

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

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

Проверка

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 .

,

Управление мощностью и производительностью устройств 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 подсказка по мощности ограничивает максимальные частоты процессора и графического процессора на самых высоких устойчивых уровнях. Имейте в виду, что снижение полосы MAX частоты ЦП/ГП снизит частоту кадров, но эта более низкая частота предпочтительна в этом режиме из-за его устойчивости. Например, устройство с обычными максимальными тактовыми частотами может рендерить со скоростью 60 кадров в секунду в течение нескольких минут, но после того, как устройство нагреется, оно может снизиться до 30 кадров в секунду к концу 30 минут. При использовании устойчивого режима устройство может, например, стабильно рендерить со скоростью 45 кадров в секунду в течение всех 30 минут. Цель состоит в том, чтобы частота кадров при использовании режима была такой же высокой (или выше), чем частота кадров при неиспользовании режима, и была постоянной во времени, чтобы разработчикам не приходилось преследовать движущуюся цель.

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

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

Проверка

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 .