Gestión del rendimiento,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 constante y sin problemas 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 que las aplicaciones mantengan un rendimiento constante del dispositivo y especifican un núcleo exclusivo para mejorar el rendimiento de las aplicaciones en primer plano que hacen un uso intensivo de la CPU.

Rendimiento sostenido

Para las aplicaciones de ejecución prolongada (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 ejecució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 un rendimiento sostenido, lo que permitió a los OEM brindar sugerencias sobre las capacidades de rendimiento del dispositivo para aplicaciones de ejecución prolongada. Los desarrolladores de aplicaciones pueden usar estas sugerencias para ajustar las aplicaciones a un nivel predecible y constante 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 la potencia HAL 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() .
  • Implemente 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 en los niveles sostenibles más altos. Tenga en cuenta que reducir 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 usa relojes máximos normales podría renderizar a 60 FPS durante unos minutos, pero después de que el dispositivo se calienta, puede reducirse a 30 FPS al final de los 30 minutos. Cuando se usa el modo sostenido, el dispositivo puede, por ejemplo, renderizar constantemente a 45 FPS durante los 30 minutos completos. El objetivo es una velocidad de fotogramas cuando se usa el modo que sea tan alta (o más alta) que la velocidad de fotogramas cuando no se usa el modo, y consistente a lo largo del tiempo para que los desarrolladores no tengan que perseguir un objetivo en movimiento.

Recomendamos encarecidamente implementar el modo sostenido de modo que el dispositivo logre el rendimiento sostenido más alto posible, no solo los valores mínimos necesarios para pasar la prueba (por ejemplo, elija los límites de frecuencia MAX más altos posibles que no hagan 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 usar 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 activado, la velocidad de fotogramas no debe ser inferior a la velocidad de fotogramas al final de los 30 minutos con el modo desactivado.

Además, puede probar manualmente su implementación con varias cargas de trabajo intensivas de CPU y GPU para asegurarse de que el dispositivo no se acelere térmicamente después de 30 minutos de uso. En las pruebas internas, usamos cargas de trabajo de muestra, incluidos juegos y aplicaciones de evaluación comparativa (p. ej., gfxbench ).

Núcleos exclusivos

Para las cargas de trabajo sensibles al tiempo y con un uso intensivo de la CPU, ser reemplazado por otro subproceso puede ser la diferencia entre cumplir con los plazos de los marcos o no. Para aplicaciones que tienen requisitos estrictos de latencia y velocidad de fotogramas (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 de primer plano superior, lo que mejora el rendimiento de todas las aplicaciones de primer plano y brinda 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 de espacio de usuario de aplicaciones que no sean la aplicación de primer plano superior que estén programados en el núcleo exclusivo.

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