Medición de la potencia de los componentes

Puede determinar el consumo de energía de los componentes individuales comparando la corriente consumida por el dispositivo cuando el componente está en el estado deseado (encendido, activo, escaneando, etc.) 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 Monsoon Solution Inc. Power Monitor y Power Tool).

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 usar esos valores en el perfil de energía de su dispositivo.

Control del consumo de energía

Al medir, 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 extraer 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 imprecisas causadas por cambios en otros componentes. Las actividades del sistema que pueden introducir cambios no deseados en las mediciones de potencia incluyen:

  • Actividad celular, Wi-Fi y Bluetooth para recibir, transmitir o escanear . Cuando no esté midiendo la potencia de radio de la celda, configure el dispositivo en modo avión y habilite Wi-Fi o Bluetooth según corresponda.
  • Pantalla encendida/apagada . 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 de pantalla.
  • Suspensión/reanudación del sistema . Un estado de pantalla apagada puede desencadenar 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 detalles, consulte Control de suspensión del sistema .
  • Las CPU 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 la CPU en línea y otros estados del núcleo 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 escalado de voltaje y reloj 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. Para obtener más información 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 para un dispositivo. Habilita 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 medida (200 mA). A continuación, Joe enciende la pantalla del dispositivo con el brillo mínimo y toma otra medida (300 mA). El valor screen.on es 100mA (300 - 200).

Nota : Para los 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 el termistor o en las clavijas del indicador 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 que falta.

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 desea medirlo.

Prevención de la suspensión del sistema

La suspensión del sistema puede introducir variaciones no deseadas en las mediciones de potencia y colocar los componentes del sistema en estados de baja potencia inapropiados para medir el uso de potencia activa. Para evitar que el sistema se suspenda mientras la pantalla está apagada, use un wakelock parcial temporal. Con 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 quitar el wakelock:

adb shell "echo temporary > /sys/power/wake_unlock"

Suspensión del sistema de medición

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 anteriormente).
  • Coloque el dispositivo en modo avión para evitar la actividad simultánea de la radio celular, que podría ejecutarse en un procesador separado de las partes del SoC controladas por la suspensión del sistema.
  • Asegúrese de que el sistema esté en estado de suspensión:
    • Confirmando que las lecturas actuales se establecen 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).
    • Comprobación de la salida de la consola del sistema.
    • Observar las indicaciones externas del estado del sistema (como un LED que se apaga cuando no está suspendido).

Controlar las velocidades de la CPU

Las CPU activas se pueden poner en línea o desconectar, se pueden cambiar sus velocidades de reloj y voltajes asociados (lo que posiblemente también afecte 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 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 asume que todas las CPU tienen las mismas velocidades y características de energía disponibles.

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 en línea (como tener una CPU en línea y el resto fuera de línea/conectado en caliente). Mantener todas las CPU excepto una en programación inactiva puede producir resultados aceptables. Detener el marco de trabajo 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 potencia. Para obtener una lista de las 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 valor cpu.active .

Para las plataformas en las que la cantidad de núcleos conectados en línea afecta significativamente el consumo de energía, es posible que deba modificar el controlador cpufreq o el gobernador para la plataforma. La mayoría de las plataformas admiten el control de la velocidad de la CPU mediante el gobernador cpufreq del espacio de usuario y el uso de las interfaces sysfs para establecer la velocidad. Por ejemplo, para establecer una 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 el shell 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 la plataforma cpufreq.

Estos comandos aseguran que la nueva velocidad no esté fuera de los límites permitidos, establezcan la nueva velocidad y luego impriman la velocidad a la que la CPU se está ejecutando realmente (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 disminuir 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 mediante 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 la regulación térmica debido a una medición de alta temperatura (es decir, después de ejecutar las CPU a altas velocidades durante períodos prolongados). Esté atento a tales limitaciones, ya sea usando la salida de la consola del sistema al tomar medidas o revisando el registro del kernel después de medir.

Para el valor cpu.awake , mida la energía consumida cuando el sistema no está en suspensión y no está ejecutando tareas. La CPU debe estar en un bucle inactivo del programador de bajo consumo, posiblemente ejecutando una instrucción ARM Wait For Event o en un estado de bajo consumo específico de SoC con una latencia de salida rápida adecuada para el uso inactivo.

Para el valor cpu.active , mida la energía cuando el sistema no está en modo de suspensión y no está ejecutando tareas. Una CPU (generalmente la CPU principal) debe ejecutar la tarea mientras que todas las demás CPU deben estar en estado inactivo.

Medición de la potencia de la pantalla

Al medir la energía de la pantalla, asegúrese de que otros dispositivos normalmente encendidos cuando la pantalla está habilitada también estén encendidos. Por ejemplo, si la pantalla táctil y la luz de fondo de la pantalla normalmente estarían encendidas cuando la pantalla está encendida, asegúrese de que estos dispositivos estén encendidos cuando mida 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 que se muestran, lo que hace que las mediciones de energía varíen considerablemente según lo que se muestre 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 energía más baja 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 pantalla encendida con el brillo mínimo y máximo de la pantalla/retroiluminación. Para configurar 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 de pantalla mínimo. 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/retroiluminación, y no permite configurar el brillo tan bajo que la pantalla podría no verse sin un gran esfuerzo.
  • Utilice un archivo sysfs (recomendado). Si está disponible, use 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 retroiluminación y la pantalla táctil, use 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.

Medición de la potencia de Wi-Fi

Realice mediciones Wi-Fi en una red relativamente silenciosa. Evite introducir trabajo adicional en el procesamiento de grandes volúmenes de tráfico de difusió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 (reposo) del sistema con Wi-Fi habilitado y deshabilitado.

El valor wifi.scan mide la potencia consumida durante un escaneo Wi-Fi para puntos de acceso. Las aplicaciones pueden desencadenar escaneos Wi-Fi usando la API startScan() de la clase WifiManager . También puede abrir Configuración> Wi-Fi, que realiza escaneos de puntos de acceso cada pocos segundos con un aumento aparente en el consumo de energía, pero debe restar la potencia de la pantalla de estas medidas.

Nota : utilice una configuración controlada (como iperf ) para generar tráfico de recepción y transmisión de red.