Para determinar el consumo de energía de los componentes individuales, compara la corriente que extrae el dispositivo cuando el componente está en el estado deseado (como encendido, activo o escaneando) y cuando está apagado. Mide la corriente instantánea promedio que se extrae del dispositivo a un voltaje nominal con un monitor de energía externo, como una fuente de alimentación de banco o herramientas especializadas de supervisión de baterías (como el software Power Monitor y Power Tool de Monsoon Solution Inc.).
Los fabricantes suelen proporcionar información sobre la corriente que consume un componente individual. Usa esta información si representa con precisión la corriente que se extrae de la batería del dispositivo en la práctica. Sin embargo, valida los valores proporcionados por el fabricante antes de usarlos en el perfil de energía del dispositivo.
Controla el consumo de energía
Cuando realices la medición, asegúrate 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 que se usa cuando se ejecuta Android Debug Bridge (adb). Es posible que el dispositivo sometido a prueba extraiga corriente del host, lo que reducirá las mediciones en la batería. Evita las conexiones USB On-The-Go (OTG), ya que el dispositivo OTG podría extraer corriente del dispositivo en prueba.
Excluyendo el componente que se mide, el sistema debe ejecutarse a un nivel constante de consumo de energía para evitar mediciones imprecisas causadas por cambios en otros componentes. Entre las actividades del sistema que pueden generar cambios no deseados en las mediciones de energía, se incluyen las siguientes:
- Actividad de recepción, transmisión o escaneo de redes móviles, Wi-Fi y Bluetooth Cuando no midas la potencia de la radio celular, configura el dispositivo en modo de avión y habilita Wi-Fi o Bluetooth según corresponda.
- Pantalla encendida o apagada: Los colores que se muestran mientras la pantalla está encendida pueden afectar el consumo de energía en algunas tecnologías de pantalla. Desactiva la pantalla cuando midas valores de componentes que no sean de pantalla.
- Suspensión o reanudación del sistema. Un estado de pantalla apagada puede activar una suspensión del sistema, lo que coloca partes del dispositivo en un estado de bajo consumo o apagado. Esto puede afectar el consumo de energía del componente que se mide y generar grandes variaciones en las lecturas de energía a medida que el sistema reanuda periódicamente el envío de alarmas, etcétera. Para obtener más información, consulta Cómo controlar la suspensión del sistema.
- Las CPUs cambian de velocidad y entran o 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 del sistema, como la velocidad del bus de memoria y los voltajes de los rieles de energía asociados con las CPUs y la memoria. Durante las pruebas, estos ajustes afectan las mediciones de energía:
- Las operaciones de escalamiento de velocidad de la CPU pueden reducir la cantidad de escalamiento de reloj y voltaje de los buses de memoria y otros componentes principales del sistema.
- La programación de actividades puede afectar el porcentaje de tiempo que las CPUs pasan en estados inactivos de baja potencia. Para obtener detalles sobre cómo evitar que se produzcan estos ajustes durante las pruebas, consulta Controla las velocidades de la CPU.
Por ejemplo, Joe Droid quiere calcular el valor de screen.on
para un dispositivo. Habilita el modo avión en el dispositivo, lo ejecuta en un estado actual estable, mantiene la velocidad de la CPU constante y usa un bloqueo de activación parcial para evitar la suspensión del sistema. Luego, Joe apaga la pantalla del dispositivo y realiza 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 de screen.on
es de 100 mA (300 mA - 200 mA).
Nota: En el caso de los componentes que no tienen una forma de onda plana de consumo de corriente cuando están activos (como la radio celular o Wi-Fi), mide la corriente promedio a lo largo del tiempo con una herramienta de supervisión de energía.
Cuando se usa una fuente de alimentación externa en lugar de la batería del dispositivo, es posible que el sistema tenga problemas debido a un termistor de batería desconectado o a pines de medidor de combustible integrados (es decir, una lectura no válida de la temperatura de la batería o la capacidad restante 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. Como alternativa, puedes modificar el sistema para que ignore los datos no válidos de la batería faltante.
Suspensión del sistema de control
En esta sección, se describe cómo evitar el estado de suspensión del sistema cuando no deseas que interfiera con otras mediciones y cómo medir el consumo de energía del estado de suspensión del sistema cuando deseas medirlo.
Evita la suspensión del sistema
La suspensión del sistema puede generar una variación no deseada en las mediciones de energía y colocar los componentes del sistema en estados de bajo consumo inadecuados para medir el uso de energía activo. Para evitar que el sistema se suspenda mientras la pantalla está apagada, usa un bloqueo de activación parcial temporal. Con un cable USB, conecta el dispositivo a un host de desarrollo y, luego, ingresa el siguiente comando:
adb shell "echo temporary > /sys/power/wake_lock"
Mientras se encuentra en wake_lock
, el estado de pantalla apagada no activa una suspensión del sistema.
(Recuerda desconectar el cable USB del dispositivo antes de medir el consumo de energía).
Para quitar el bloqueo de activación, haz lo siguiente:
adb shell "echo temporary > /sys/power/wake_unlock"
Cómo medir la suspensión del sistema
Para medir el consumo de energía durante el estado de suspensión del sistema, mide el valor de cpu.idle
en el perfil de energía. Antes de realizar la medición, haz lo siguiente:
- Quita los bloqueos de activación existentes (como se describió anteriormente).
- Coloca el dispositivo en modo avión para evitar la actividad simultánea de la radio celular, que podría ejecutarse en un procesador independiente de las partes del SoC controladas por la suspensión del sistema.
- Para asegurarte de que el sistema esté en estado suspendido, haz lo siguiente:
- Confirmar que las lecturas actuales se estabilicen en un valor constante 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 PHY USB).
- Verifica el resultado de la consola del sistema.
- Observar indicadores externos del estado del sistema (como una luz LED que se apaga cuando no está en suspensión)
Cómo controlar las velocidades de la CPU
Las CPUs activas se pueden poner en línea o dejar sin conexión, cambiar sus velocidades de reloj y los voltajes asociados (lo que también puede afectar las velocidades del bus de memoria y otros estados de energía del núcleo del sistema) y pueden ingresar a estados inactivos de menor energía mientras están en el bucle inactivo del kernel. Cuando midas los diferentes estados de energía de la CPU para el perfil de energía, evita la variación de la energía consumida cuando midas otros parámetros. El perfil de energía supone que todas las CPU tienen las mismas velocidades y características de energía disponibles.
Mientras mides la energía de la CPU o mantienes constante la energía de la CPU para realizar otras mediciones, mantén constante la cantidad de CPUs que se conectan en línea (por ejemplo, tener una CPU en línea y el resto sin conexión o con conexión en caliente). Mantener todas las CPUs, excepto una, en el estado inactivo de programación puede generar resultados aceptables. Detener el framework de Android con adb shell stop
puede reducir la actividad de programación del sistema.
Debes especificar las velocidades de CPU disponibles para tu dispositivo en la entrada cpu.speeds
del perfil de energía. Para obtener una lista de las velocidades de CPU disponibles, ejecuta el siguiente comando:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
Estas velocidades coinciden con las mediciones de energía correspondientes en el valor cpu.active
.
En el caso de las plataformas en las que la cantidad de núcleos que se activan afecta significativamente el consumo de energía, es posible que debas modificar el controlador o el gobernador de cpufreq de la plataforma. La mayoría de las plataformas admiten el control de la velocidad de la CPU con el regulador de frecuencia de CPU del espacio de usuario y con interfaces sysfs para establecer la velocidad. Por ejemplo, para establecer la velocidad en 200 MHz en un sistema con solo 1 CPU o todas las CPUs que comparten una política de cpufreq común, usa la consola del sistema o la shell de adb 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 se aseguran de que la velocidad nueva no esté fuera de los límites permitidos, la establecen y, luego, imprimen la velocidad a la que se ejecuta la CPU (para la verificación). Si la velocidad mínima actual antes de la ejecución es superior a 200000, es posible que debas invertir el orden de las dos primeras líneas o volver a ejecutar la primera línea para reducir la velocidad mínima antes de establecer la velocidad máxima.
Para medir la corriente que consume una CPU que se ejecuta a varias velocidades, usa la consola del sistema para colocar la CPU en un bucle vinculado a la CPU con el siguiente comando:
# while true; do true; done
Toma la medición mientras se ejecuta el bucle.
Algunos dispositivos pueden limitar la velocidad máxima de la CPU mientras realizan la limitación térmica debido a una medición de temperatura alta (es decir, después de ejecutar CPUs a altas velocidades durante períodos prolongados). Observa si se produce este tipo de limitación, ya sea con el resultado de la consola del sistema cuando realices mediciones o con la verificación del registro del kernel después de realizarlas.
Para el valor de cpu.awake
, mide la energía consumida cuando el sistema no está suspendido y no ejecuta tareas. La CPU debe estar en un bucle inactivo
del programador de bajo consumo, posiblemente ejecutando una instrucción de espera de evento de ARM o en un estado de bajo consumo específico del SoC con una latencia de salida rápida adecuada para el uso inactivo.
Para el valor cpu.active
, mide la energía cuando el sistema no está en modo suspendido y no ejecuta tareas. Una CPU (por lo general, la principal) debe ejecutar la tarea, mientras que todas las demás deben estar inactivas.
Cómo medir el consumo de energía de la pantalla
Cuando midas la pantalla encendida, asegúrate de que también estén encendidos los otros dispositivos que normalmente se encienden cuando la pantalla está habilitada. Por ejemplo, si la pantalla táctil y la retroiluminación de la pantalla normalmente están encendidas cuando la pantalla está encendida, asegúrate de que estos dispositivos estén encendidos cuando realices la medición para obtener un ejemplo realista del consumo de energía de la pantalla.
Algunas tecnologías de pantalla varían en el consumo de energía según los colores que se muestran, 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. Cuando realices la medición, asegúrate de que la pantalla muestre algo que tenga las características de potencia de una pantalla realista. Intenta encontrar un punto intermedio entre los extremos de una pantalla completamente negra (que consume la menor energía en algunas tecnologías) y una pantalla completamente blanca. Una opción común es una vista de un programa en la app de calendario, que tiene una combinación de fondo blanco y elementos que no son blancos.
Mide la pantalla con la alimentación encendida en el brillo mínimo y máximo de la pantalla o la retroiluminación. Para establecer el brillo mínimo, haz lo siguiente:
- Usa la IU de Android (no recomendado). Establece el control deslizante Configuración > Brillo de la pantalla en el brillo mínimo. Sin embargo, la IU de Android permite configurar el brillo solo en un mínimo de entre el 10 y el 20% del brillo posible del panel o de la retroiluminación, y no permite configurar un brillo tan bajo que la pantalla no se pueda ver sin mucho esfuerzo.
- Usa un archivo sysfs (recomendado). Si está disponible, usa un archivo sysfs para controlar el brillo del panel hasta el brillo mínimo que admite el hardware.
Además, si el archivo sysfs de la plataforma permite encender y apagar el panel LCD, la retroiluminación y la pantalla táctil, usa el archivo para tomar medidas con la pantalla encendida y apagada. De lo contrario, establece un bloqueo de activación parcial para que el sistema no se suspenda y, luego, enciende y apaga la pantalla con el botón de encendido.
Cómo medir la energía de Wi-Fi
Realiza mediciones de Wi-Fi en una red relativamente inactiva. Evita introducir trabajo adicional para procesar grandes volúmenes de tráfico de transmisión que no estén relacionados con la actividad que se mide.
El valor wifi.on
mide la energía consumida cuando la red Wi-Fi está habilitada, pero no se está transmitiendo ni recibiendo de forma activa. Esto suele medirse como la diferencia entre la carga actual en el estado de suspensión (modo de suspensión) del sistema con Wi-Fi habilitado o inhabilitado.
El valor wifi.scan
mide la energía consumida durante una búsqueda de Wi-Fi para puntos de acceso. Las aplicaciones pueden activar análisis de Wi-Fi con la
API de startScan()
de la clase WifiManager. También puedes abrir Configuración > Wi-Fi, que realiza análisis de puntos de acceso cada pocos segundos con un aumento aparente en el consumo de energía, pero debes restar la energía de la pantalla de estas mediciones.
Nota: Usa una configuración controlada (como iperf) para generar tráfico de recepción y transmisión de red.