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. UnPowerEntity
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 cadaPowerEntity
especificado.
Los siguientes clientes usan las APIs de IPowerStats.hal
:
Statsd
, para recopilar métricas de consumo de energía por rielPerfetto
, 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 enpower_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);