Puede determinar el consumo de energía de cada componente comparando la corriente consumida por el dispositivo cuando el componente está en el estado deseado (como encendido, activo, escaneando) y cuando el componente está apagado. Mida la corriente instantánea promedio consumida en el dispositivo a un voltaje nominal utilizando un monitor de energía externo, como una fuente de alimentación de banco o herramientas especializadas de monitoreo de batería (como el software Power Monitor y Power Tool de Monsoon Solution Inc.).
Los fabricantes suelen proporcionar información sobre la corriente consumida por un componente individual. Utilice esta información si representa con precisión la corriente extraída de la batería del dispositivo en la práctica. Sin embargo, valide los valores proporcionados por el fabricante antes de utilizarlos en el perfil de energía de su dispositivo.
Controlar el consumo de energía
Al realizar la medición, asegúrese de que el dispositivo no tenga una conexión a una fuente de carga externa, como una conexión USB a un host de desarrollo utilizado cuando se ejecuta Android Debug Bridge (adb). El dispositivo bajo prueba podría consumir corriente del host, lo que reduciría las mediciones en la batería. Evite las conexiones USB On-The-Go (OTG), ya que el dispositivo OTG podría consumir corriente del dispositivo bajo prueba.
Excluyendo el componente que se está midiendo, el sistema debe funcionar a un nivel constante de consumo de energía para evitar mediciones inexactas causadas por cambios en otros componentes. Las actividades del sistema que pueden introducir cambios no deseados en las mediciones de potencia incluyen:
- Actividad de recepción, transmisión o escaneo de datos móviles, Wi-Fi y Bluetooth . Cuando no mida la potencia de la radio celular, configure el dispositivo en modo avión y habilite Wi-Fi o Bluetooth según corresponda.
- Encendido/apagado de pantalla . Los colores que se muestran mientras la pantalla está encendida pueden afectar el consumo de energía en algunas tecnologías de pantalla. Apague la pantalla cuando mida valores para componentes que no sean pantalla.
- Suspensión/reanudación del sistema . Un estado de pantalla apagada puede provocar una suspensión del sistema, colocando partes del dispositivo en un estado de bajo consumo o apagado. Esto puede afectar el consumo de energía del componente que se está midiendo e introducir grandes variaciones en las lecturas de energía a medida que el sistema reanuda periódicamente el envío de alarmas, etc. Para obtener más detalles, consulte Suspensión del sistema de control .
- Las CPU cambian de velocidad y entran/salen del estado inactivo del programador de bajo consumo . Durante el funcionamiento normal, el sistema realiza ajustes frecuentes a las velocidades de la CPU, la cantidad de núcleos de CPU en línea y otros estados de los núcleos del sistema, como la velocidad del bus de memoria y los voltajes de los rieles de alimentación asociados con las CPU y la memoria. Durante las pruebas, estos ajustes afectan las mediciones de potencia:
- Las operaciones de escalado de velocidad de la CPU pueden reducir la cantidad de reloj y voltaje de los buses de memoria y otros componentes centrales del sistema.
- La actividad de programación puede afectar el porcentaje de tiempo que las CPU pasan en estados inactivos de bajo consumo de energía. Para obtener detalles sobre cómo evitar que se produzcan estos ajustes durante las pruebas, consulte Control de las velocidades de la CPU .
Por ejemplo, Joe Droid quiere calcular el valor screen.on
de un dispositivo. Activa el modo avión en el dispositivo, ejecuta el dispositivo en un estado actual estable, mantiene constante la velocidad de la CPU y utiliza un wakelock parcial para evitar la suspensión del sistema. Luego, Joe apaga la pantalla del dispositivo y toma una medición (200 mA). A continuación, Joe enciende la pantalla del dispositivo con el brillo mínimo y toma otra medición (300 mA). El valor screen.on
es 100 mA (300 - 200).
Nota : Para componentes que no tienen una forma de onda plana de consumo de corriente cuando están activos (como radio celular o Wi-Fi), mida la corriente promedio a lo largo del tiempo usando una herramienta de monitoreo de energía.
Cuando se utiliza una fuente de alimentación externa en lugar de la batería del dispositivo, el sistema puede experimentar problemas debido a un termistor de batería desconectado o pines de indicador de combustible integrados (es decir, una lectura no válida de la temperatura de la batería o la capacidad restante de la batería podría apagar el kernel o el sistema Android). . Las baterías falsas pueden proporcionar señales en los pines del termistor o del medidor de combustible que imitan las lecturas de temperatura y estado de carga de un sistema normal, y también pueden proporcionar cables convenientes para conectarse a fuentes de alimentación externas. Alternativamente, puede modificar el sistema para ignorar los datos no válidos de la batería faltante.
Suspensión del sistema de control
Esta sección describe cómo evitar el estado de suspensión del sistema cuando no desea que interfiera con otras mediciones y cómo medir el consumo de energía del estado de suspensión del sistema cuando sí desea medirlo.
Evitar la suspensión del sistema
La suspensión del sistema puede introducir variaciones no deseadas en las mediciones de energía y colocar los componentes del sistema en estados de bajo consumo inapropiados para medir el uso de energía activa. Para evitar que el sistema se suspenda mientras la pantalla está apagada, utilice un wakelock parcial temporal. Usando un cable USB, conecte el dispositivo a un host de desarrollo y luego emita el siguiente comando:
adb shell "echo temporary > /sys/power/wake_lock"
Mientras está en wake_lock
, el estado de pantalla apagada no activa una suspensión del sistema. (Recuerde desconectar el cable USB del dispositivo antes de medir el consumo de energía).
Para eliminar el wakelock:
adb shell "echo temporary > /sys/power/wake_unlock"
Suspensión del sistema de medidas
Para medir el consumo de energía durante el estado de suspensión del sistema, mida el valor de cpu.idle
en el perfil de energía. Antes de medir:
- Elimine los wakelocks existentes (como se describe arriba).
- Coloque el dispositivo en modo avión para evitar actividad simultánea de la radio celular, que podría ejecutarse en un procesador independiente de las partes de SoC controladas por la suspensión del sistema.
- Asegúrese de que el sistema esté en estado de suspensión mediante:
- Confirmar que las lecturas actuales se estabilizan en un valor estable. Las lecturas deben estar dentro del rango esperado para el consumo de energía del estado de suspensión del SoC más el consumo de energía de los componentes del sistema que permanecen encendidos (como el USB PHY).
- Comprobando la salida de la consola del sistema.
- Estar atento a indicaciones externas del estado del sistema (como un LED que se apaga cuando no está en suspensión).
Controlar las velocidades de la CPU
Las CPU activas se pueden conectar o desconectar, cambiar sus velocidades de reloj y voltajes asociados (posiblemente también afectando las velocidades del bus de memoria y otros estados de energía del núcleo del sistema) y pueden entrar en estados inactivos de menor consumo de energía mientras se encuentran en el bucle inactivo del kernel. Al medir diferentes estados de energía de la CPU para el perfil de energía, evite la variación del consumo de energía al medir otros parámetros. El perfil de energía supone que todas las CPU tienen las mismas velocidades disponibles y características de energía.
Mientras mide la potencia de la CPU, o mientras mantiene constante la potencia de la CPU para realizar otras mediciones, mantenga constante la cantidad de CPU conectadas (como tener una CPU en línea y el resto fuera de línea o desconectadas en caliente). Mantener inactivas todas las CPU excepto una en la programación puede producir resultados aceptables. Detener el marco de Android con adb shell stop
puede reducir la actividad de programación del sistema.
Debe especificar las velocidades de CPU disponibles para su dispositivo en la entrada cpu.speeds
del perfil de energía. Para obtener una lista de velocidades de CPU disponibles, ejecute:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
Estas velocidades coinciden con las medidas de potencia correspondientes en el valor cpu.active
.
Para plataformas donde la cantidad de núcleos conectados afecta significativamente el consumo de energía, es posible que deba modificar el controlador o regulador cpufreq de la plataforma. La mayoría de las plataformas admiten el control de la velocidad de la CPU mediante el regulador cpufreq del espacio de usuario y el uso de interfaces sysfs para establecer la velocidad. Por ejemplo, para establecer la velocidad de 200 MHz en un sistema con solo 1 CPU o todas las CPU que comparten una política cpufreq común, use la consola del sistema o adb shell para ejecutar los siguientes comandos:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
Nota : Los comandos exactos difieren según la implementación de cpufreq de la plataforma.
Estos comandos garantizan que la nueva velocidad no esté fuera de los límites permitidos, configuran la nueva velocidad y luego imprimen la velocidad a la que realmente está funcionando la CPU (para verificación). Si la velocidad mínima actual antes de la ejecución es superior a 200000, es posible que deba invertir el orden de las dos primeras líneas o ejecutar la primera línea nuevamente para reducir la velocidad mínima antes de establecer la velocidad máxima.
Para medir la corriente consumida por una CPU que se ejecuta a varias velocidades, use la consola del sistema para colocar la CPU en un bucle vinculado a la CPU usando el comando:
# while true; do true; done
Tome la medida mientras se ejecuta el bucle.
Algunos dispositivos pueden limitar la velocidad máxima de la CPU mientras realizan estrangulamiento térmico debido a una medición de temperatura alta (es decir, después de ejecutar CPU a altas velocidades durante períodos prolongados). Esté atento a dichas limitaciones, ya sea utilizando la salida de la consola del sistema al realizar mediciones o verificando el registro del kernel después de realizar las mediciones.
Para el valor cpu.awake
, mida la energía consumida cuando el sistema no está suspendido ni ejecutando tareas. La CPU debe estar en un bucle inactivo del programador de bajo consumo de energía, posiblemente ejecutando una instrucción ARM Wait For Event o en un estado de bajo consumo de energía específico del SoC con una latencia de salida rápida adecuada para uso inactivo.
Para el valor cpu.active
, mida la energía cuando el sistema no está en modo de suspensión y no ejecuta tareas. Una CPU (normalmente la CPU principal) debe ejecutar la tarea mientras que todas las demás CPU deben estar en estado inactivo.
Medir la potencia de la pantalla
Al medir la potencia de la pantalla, asegúrese de que otros dispositivos normalmente encendidos cuando la pantalla está habilitada también lo estén. Por ejemplo, si la pantalla táctil y la luz de fondo normalmente estarían encendidas cuando la pantalla esté encendida, asegúrese de que estos dispositivos estén encendidos cuando realice la medición para obtener un ejemplo realista del uso de energía de la pantalla.
Algunas tecnologías de visualización varían en el consumo de energía según los colores mostrados, lo que hace que las mediciones de energía varíen considerablemente según lo que se muestra en la pantalla en el momento de la medición. Al medir, asegúrese de que la pantalla muestre algo que tenga las características de potencia de una pantalla realista. Apunte entre los extremos de una pantalla completamente negra (que consume la menor energía para algunas tecnologías) y una pantalla completamente blanca. Una opción común es una vista de un horario en la aplicación de calendario, que tiene una combinación de fondo blanco y elementos que no son blancos.
Mida la potencia de la pantalla con el brillo mínimo y máximo de la pantalla/retroiluminación. Para establecer el brillo mínimo:
- Utilice la interfaz de usuario de Android (no recomendado). Establezca el control deslizante Configuración > Brillo de pantalla en el brillo mínimo de la pantalla. Sin embargo, la interfaz de usuario de Android permite configurar el brillo solo a un mínimo del 10-20% del brillo posible del panel o de la retroiluminación, y no permite configurar el brillo tan bajo que la pantalla no sea visible sin un gran esfuerzo.
- Utilice un archivo sysfs (recomendado). Si está disponible, utilice un archivo sysfs para controlar el brillo del panel hasta el brillo mínimo admitido por el hardware.
Además, si el archivo sysfs de la plataforma permite encender y apagar el panel LCD, la luz de fondo y la pantalla táctil, utilice el archivo para tomar medidas con la pantalla encendida y apagada. De lo contrario, configure un wakelock parcial para que el sistema no se suspenda, luego encienda y apague la pantalla con el botón de encendido.
Medir la potencia de Wi-Fi
Realice mediciones de Wi-Fi en una red relativamente silenciosa. Evite introducir trabajo adicional que procese grandes volúmenes de tráfico de transmisión que no esté relacionado con la actividad que se está midiendo.
El valor wifi.on
mide la energía consumida cuando Wi-Fi está habilitado pero no transmite ni recibe activamente. Esto a menudo se mide como el delta entre el consumo actual en el estado de suspensión (suspensión) del sistema con Wi-Fi habilitado y deshabilitado.
El valor wifi.scan
mide la energía consumida durante una búsqueda de puntos de acceso Wi-Fi. Las aplicaciones pueden activar escaneos de Wi-Fi utilizando la API startScan()
de la clase WifiManager. También puedes abrir Configuración > Wi-Fi, que realiza escaneos de puntos de acceso cada pocos segundos con un aparente salto en el consumo de energía, pero debes restar la energía de la pantalla de estas mediciones.
Nota : utilice una configuración controlada (como iperf ) para generar tráfico de recepción y transmisión de red.