Gestión del rendimiento

Administrar la potencia y el rendimiento de los dispositivos Android puede ayudar a garantizar que las aplicaciones se ejecuten de manera consistente y fluida en una amplia gama de hardware. En Android 7.0 y versiones posteriores, los OEM pueden implementar soporte para sugerencias de rendimiento sostenido que permiten a las aplicaciones mantener un rendimiento constante del dispositivo y especificar un núcleo exclusivo para mejorar el rendimiento de las aplicaciones en primer plano que consumen mucha CPU.

Rendimiento sostenido

Para aplicaciones de larga duración (juegos, cámara, RenderScript , procesamiento de audio), el rendimiento puede variar drásticamente a medida que se alcanzan los límites de temperatura del dispositivo y se aceleran los motores del sistema en chip (SoC). Los desarrolladores de aplicaciones que crean aplicaciones de alto rendimiento y larga duración están limitados porque las capacidades de la plataforma subyacente son un objetivo en movimiento cuando el dispositivo comienza a calentarse.

Para abordar estas limitaciones, Android 7.0 introdujo soporte para rendimiento sostenido, lo que permite a los OEM proporcionar sugerencias sobre las capacidades de rendimiento del dispositivo para aplicaciones de larga duración. Los desarrolladores de aplicaciones pueden utilizar estos consejos para ajustar las aplicaciones a un nivel predecible y consistente de rendimiento del dispositivo durante largos períodos de tiempo.

Arquitectura

Una aplicación de Android puede solicitar a la plataforma que entre en un modo de rendimiento sostenido en el que el dispositivo Android puede mantener un nivel constante de rendimiento durante períodos de tiempo prolongados.

Figura 1. Arquitectura del modo de rendimiento sostenido.

Implementación

Para admitir un rendimiento sostenido en Android 7.0 y versiones posteriores, los OEM deben:

  • Realice cambios específicos del dispositivo en el HAL de alimentación para bloquear las frecuencias máximas de CPU/GPU o realizar otras optimizaciones para evitar la limitación térmica.
  • Implemente la nueva sugerencia POWER_HINT_SUSTAINED_PERFORMANCE en power HAL.
  • Declare soporte devolviendo TRUE a través de la API isSustainedPerformanceModeSupported() .
  • Implementar Window.setSustainedPerformanceMode .

En la implementación de referencia de Nexus, la sugerencia de potencia limita las frecuencias máximas de la CPU y la GPU a los niveles sostenibles más altos. Tenga en cuenta que bajar la barra MAX en la frecuencia de CPU/GPU reducirá la velocidad de fotogramas, pero se prefiere esta velocidad más baja en este modo debido a su sostenibilidad. Por ejemplo, un dispositivo que utiliza relojes máximos normales podría reproducirse a 60 FPS durante unos minutos, pero después de que el dispositivo se calienta, puede acelerarse a 30 FPS al final de los 30 minutos. Cuando se utiliza el modo sostenido, el dispositivo puede, por ejemplo, renderizar consistentemente a 45 FPS durante los 30 minutos completos. El objetivo es una velocidad de cuadros cuando se usa el modo que sea tan alta (o mayor) que la velocidad de cuadros cuando no se usa el modo, y consistente en el tiempo para que los desarrolladores no tengan que perseguir un objetivo en movimiento.

Recomendamos encarecidamente implementar el modo sostenido de modo que el dispositivo alcance el rendimiento sostenido más alto posible, no solo los valores mínimos requeridos para pasar la prueba (por ejemplo, elija los límites de frecuencia MAX más altos posibles que no provoquen que el dispositivo se acelere térmicamente con el tiempo).

Nota : No es necesario limitar las velocidades de reloj MAX para implementar el modo sostenido.

Validación

Los OEM pueden utilizar una prueba CTS (Android 7.0 y posterior) para verificar su implementación de la API de rendimiento sostenido. La prueba ejecuta una carga de trabajo durante aproximadamente 30 minutos y compara el rendimiento con y sin el modo sostenido habilitado:

  • Con el modo sostenido habilitado, la velocidad de fotogramas debe permanecer relativamente constante (la prueba mide el porcentaje de cambio en la velocidad de fotogramas a lo largo del tiempo y requiere un cambio <5%).
  • Con el modo sostenido habilitado, la velocidad de fotogramas no debe ser inferior a la velocidad de fotogramas al final de 30 minutos con el modo desactivado.

Además, puede probar manualmente su implementación con varias cargas de trabajo con uso intensivo de CPU y GPU para garantizar que el dispositivo no se acelere térmicamente después de 30 minutos de uso. En las pruebas internas, utilizamos cargas de trabajo de muestra que incluyen juegos y aplicaciones de evaluación comparativa (por ejemplo, gfxbench ).

Núcleos exclusivos

Para cargas de trabajo que requieren un uso intensivo de la CPU y en las que el tiempo es urgente, ser reemplazado por otro subproceso puede marcar la diferencia entre cumplir con los plazos de los fotogramas o no. Para aplicaciones que tienen requisitos estrictos de latencia y velocidad de cuadros (como aplicaciones de audio o realidad virtual), tener un núcleo de CPU exclusivo puede garantizar un nivel aceptable de rendimiento.

Los dispositivos que ejecutan Android 7.0 o posterior ahora pueden reservar un núcleo explícitamente para la aplicación en primer plano, mejorando el rendimiento de todas las aplicaciones en primer plano y brindando a las aplicaciones con cargas de trabajo de alta intensidad más control sobre cómo se asigna su trabajo entre los núcleos de la CPU.

Para admitir un núcleo exclusivo en un dispositivo:

  • Habilite cpusets y configure un cpuset que contenga solo la aplicación de primer plano superior.
  • Asegúrese de que un núcleo (este es el núcleo exclusivo) esté reservado para subprocesos de este cpuset .
  • Implemente la API getExclusiveCores para devolver el número de núcleo del núcleo exclusivo.

Para determinar qué procesos están programados en qué núcleos, use systrace mientras ejecuta cualquier carga de trabajo y verifique que no haya subprocesos del espacio de usuario de aplicaciones distintas a la aplicación de primer plano programados en el núcleo exclusivo.

Para ver una implementación de referencia para Nexus 6P, consulte android//device/huawei/angler/power/power.c .