HAL de estadísticas de energía

La potencia del subsistema del dispositivo a menudo se mide y registra en un entorno de lab. para varias condiciones estables, como cuando la pantalla está encendida o El dispositivo está en estado de inactividad. Esto funciona para subsistemas con una constante consumo de energía o en condiciones que se miden fácilmente en entornos de laboratorio, pero no para ciertos casos de uso, como cuando se muestra un video en una pantalla.

IPower.hal 1.0 proporciona una interfaz para pasar . sugerencias de energía y datos acumulativos sobre informes de las métricas del estado de sueño del subsistema En Android 10 y versiones posteriores, la función de informes de estadísticas acumulativas reside en las APIs de recopilación de estadísticas de energía de IPowerStats.hal. proporciona una forma de recuperar datos de uso de energía en el dispositivo. Esto reemplaza al porción de recopilación de estadísticas acumulativas de la interfaz IPower.hal. para lograr una separación más clara de la funcionalidad.

Las lecturas del servicio de IPowerStats no son periódicas. Se producen en momentos clave, como cuando la batería se reduce un 1%. Las lecturas son menos frecuentes cuando está por agotarse y con mayor frecuencia cuando está por agotarse. Es posible que los datos que se envían de vuelta a los servidores y pueden usarse en informes de errores para análisis y clasificación. Esto respalda los esfuerzos continuos por disminuir el consumo de energía y aumentar la duración de batería.

IPower.hal y IPowerStats.hal

Las interfaces IPower.hal y IPowerStats.hal están disponibles en Android 10, pero la La funcionalidad de recopilación de estadísticas de IPower.hal solo está disponible disponibles en la interfaz IPowerStats.hal. El La funcionalidad de IPowerStats.hal incluye APIs para adquirir y usar. Datos recopilados de mediciones de energía en el dispositivo compatibles:

  • Realiza mediciones de energía a nivel de riel para ambas frecuencias. (getRailInfo) y de alta frecuencia (streamEnergyData) clientes e informa la energía acumulada desde el inicio.
  • Informa información relacionada con cada PowerEntity admitido de los que hay datos disponibles. Un PowerEntity es un subsistema de la plataforma, un periférico o un dominio de potencia que afecta el consumo de energía del dispositivo.
  • Informa el conjunto de estados de la entidad de potencia (getPowerEntityStateInfo). para el que las entidades especificadas proporcionan datos de residencia y, luego, informa la datos acumulados para cada PowerEntity especificado.

Los siguientes clientes usan las APIs de IPowerStats.hal:

  • Statsd, para recopilar métricas de consumo de energía por riel
  • Perfetto, para correlacionar el consumo de energía con la CPU actividad.
  • Batterystats, para mejorar la atribución de la batería usando en lugar de estimar el consumo de batería desde constantes predefinidas en power_profile.xml.

Con Android 10 y versiones posteriores, los fabricantes de dispositivos pueden elegir entre las funciones IPower.hal y IPowerStats.hal, pero todos los clientes deben recurrir a IPower.hal si No se implementó IPowerStats.hal .

Opciones de implementación de IPowerStats.hal

Solo las funciones IPower.hal están disponibles en Android 7 hasta Android 9. Los dispositivos que se actualizaron a Android 10 deben tienen un subsistema de supervisión de energía de hardware u otros medios disponibles para supervisar y registrar estadísticas de consumo de energía. Algunos SoC reúnen estadísticas de uso de energía, o bien puedes obtener información sobre el estado de residencia información a través de software. El hardware de supervisión de energía solo es necesario admiten getRailInfo(), getEnergyData() y streamEnergyData()

Si implementas IPowerStats.hal sin la supervisión de energía hardware, getRailInfo(), getEnergyData() y streamEnergyData() muestra NOT_SUPPORTED. De forma similar, getPowerEntityInfo(), getPowerEntityStateInfo() y getPowerEntityStateResidencyData() también puede regresar NOT_SUPPORTED si no está destinada a usarse.

Entre los ejemplos de datos que muestran las APIs de supervisión de riel, se incluyen los siguientes:

  • El riel de energía de la pantalla consumió X μW.
  • El riel de energía del módem consumió Y μW.

Entre los ejemplos de datos que muestran las APIs de estado de sueño del subsistema se incluyen los siguientes:

  • El módem estuvo suspendido durante X ms.
  • El SoC estuvo en estado de contracción de energía durante Y ms.
  • La GPU estuvo en estado de suspensión durante Z ms.

Usa un subsistema de supervisión de energía de hardware

Si el diseño de tu dispositivo tiene un subsistema de supervisión de energía de hardware, implementa IPowerStats.hal mediante la creación de un solo nodo sysfs desde el cual PowerStats.hal puede analizar datos, o haciendo una colección de llamadas de sistema de tipo ioctl.

Debes implementar el controlador de kernel de manera que se impida el acumulador. desbordamiento. El algoritmo utilizado depende del control de energía único de hardware de subsistema, que debe proporcionar voltaje de bus instantáneo y promedio, y las mediciones actuales. El controlador de kernel debe capturar estos datos de una manera. que no elimine los acumuladores de energía, y debe mantener la datos de energía acumulados para cada riel desde el inicio, en forma de unidad variable que se incrementa con la lectura de energía de cada acumulador para cada búsqueda.

Las estadísticas de un componente determinado (o, opcionalmente, varios componentes) deben estar en un solo nodo. Si bien este no es un uso convencional de sysfs (que normalmente limita cada nodo a un solo valor), garantiza que todos los datos coherentes.

Guía de diseño

  • Mantén la latencia baja (1 ms, como máximo) cuando leas desde el sysfs o llamadas al sistema.
  • Asegúrate de que la funcionalidad de estadísticas de respaldo no aumente de forma consumo de energía:
    • No aumentes las activaciones de puntos de acceso (AP) ni subsistemas para realizar un seguimiento como el tiempo que pasas en el modo de suspensión.
    • Transfiere las estadísticas entre el procesador y el firmware de las apps de manera oportuna con otro tráfico cuando sea posible.
  • Si es necesario, el subsistema puede usar las siguientes funciones de controlador:
    • Almacenamiento interno de datos en caché para evitar latencia/activaciones a expensas de con datos obsoletos.
    • Se realiza la extrapolación cuando el subsistema está suspendido para brindar actualizaciones sin activar el subsistema.

Elige componentes, subsistemas y estadísticas

A la hora de elegir de qué componentes o subsistemas se recopilarán Datos de IPowerStats.hal; selecciona cualquier elemento del dispositivo que consuma corriente significativa (5 mA o más), o que admita varios modos de consumo de energía, como los siguientes:

  • Subsistemas de SoC individuales.
  • Los subsistemas fuera del SoC de forma parcial o total, como Wi-Fi, el el procesador de imágenes o el procesador de seguridad.
  • Periféricos como cámaras y LED de alta potencia.
  • Dominios de potencia que usan diferentes modos (como el dominio de potencia para el SoC en su conjunto)

Personalización

Esta función opcional se puede personalizar. Casos de uso de diseño y personalizar tu uso:

  • Decide qué rieles medir y con qué frecuencia hacerlo.
  • Decide cuándo leer los datos y cómo interpretarlos.
  • Decide qué acción tomar y cuándo hacerlo, según tus datos.

Validación

Las pruebas de VTS garantizan que se cumplan los requisitos de Android. Los comentarios en IPowerStats.hal se usan para verificar que un dispositivo esté en y cumplimiento.

Por ejemplo, si llamas a getRailInfo() y no muestra nada, ocurrirá lo siguiente: la prueba de VTS falla porque no recibiste información sobre el o un estado que se muestra SUCCESS. Del mismo modo, si recibiste información ferroviaria, pero estaba acompañada por un NON_SUPPORTED o respuesta de FILE_SYSTEM_ERROR, lo que también es un error. VTS verifica que se cumpla la especificación del fabricante del dispositivo en el archivo HAL mediante los requisitos de los comentarios de IPower.hal y IPowerStats.hal. Los A continuación, se muestra un ejemplo de comentarios usados en las pruebas de VTS:

/**
* Rail information:
* Reports information related to the rails being monitored.
*
* @return rails Information about monitored rails.
* @return status SUCCESS on success or NOT_SUPPORTED if
* feature is not enabled or FILESYSTEM_ERROR on filesystem nodes
* access error.
*/
getRailInfo()
generates(vec<e;RailInfo>e; rails, Status status);