Mesurer la puissance des composants

Vous pouvez déterminer la consommation électrique d'un composant individuel en comparant le courant consommé par l'appareil lorsque le composant est dans l'état souhaité (par exemple allumé, actif, en numérisation) et lorsqu'il est éteint. Mesurez le courant instantané moyen consommé sur l'appareil à une tension nominale à l'aide d'un moniteur d'alimentation externe, tel qu'une alimentation de banc ou d'outils spécialisés de surveillance de la batterie (tels que Monsoon Solution Inc. Power Monitor et le logiciel Power Tool).

Les fabricants fournissent souvent des informations sur le courant consommé par un composant individuel. Utilisez ces informations si elles représentent avec précision le courant tiré de la batterie de l'appareil dans la pratique. Cependant, validez les valeurs fournies par le fabricant avant d'utiliser ces valeurs dans le profil d'alimentation de votre appareil.

Contrôler la consommation d'énergie

Lors de la mesure, assurez-vous que l'appareil ne dispose pas d'une connexion à une source de charge externe, telle qu'une connexion USB à un hôte de développement utilisé lors de l'exécution d'Android Debug Bridge (adb). L'appareil testé peut tirer du courant de l'hôte, réduisant ainsi les mesures au niveau de la batterie. Évitez les connexions USB On-The-Go (OTG), car le périphérique OTG pourrait tirer du courant de l'appareil testé.

En excluant le composant mesuré, le système doit fonctionner à un niveau de consommation d'énergie constant pour éviter des mesures inexactes causées par des modifications d'autres composants. Les activités du système susceptibles d'introduire des modifications indésirables dans les mesures de puissance comprennent :

  • Activités de réception, de transmission ou de numérisation cellulaires, Wi-Fi et Bluetooth . Lorsque vous ne mesurez pas la puissance radio cellulaire, réglez l'appareil en mode avion et activez le Wi-Fi ou le Bluetooth, selon le cas.
  • Écran allumé/éteint . Les couleurs affichées lorsque l'écran est allumé peuvent affecter la consommation d'énergie de certaines technologies d'écran. Éteignez l'écran lorsque vous mesurez des valeurs pour des composants non-écran.
  • Suspension/reprise du système . Un état d'écran éteint peut déclencher une suspension du système, plaçant certaines parties de l'appareil dans un état de faible consommation ou éteint. Cela peut affecter la consommation électrique du composant mesuré et introduire de grandes variations dans les lectures de puissance lorsque le système recommence périodiquement à envoyer des alarmes, etc. Pour plus de détails, voir Contrôle de la suspension du système .
  • Les processeurs changent de vitesse et entrent/sortent de l'état d'inactivité du planificateur de faible consommation . En fonctionnement normal, le système effectue des ajustements fréquents sur la vitesse du processeur, le nombre de cœurs de processeur en ligne et d'autres états du cœur du système, tels que la vitesse du bus mémoire et les tensions des rails d'alimentation associés aux processeurs et à la mémoire. Lors des tests, ces ajustements affectent les mesures de puissance :
    • Les opérations de mise à l'échelle de la vitesse du processeur peuvent réduire la quantité de mise à l'échelle de l'horloge et de la tension des bus mémoire et d'autres composants centraux du système.
    • L'activité de planification peut affecter le pourcentage de temps que les processeurs passent dans des états d'inactivité de faible consommation. Pour plus de détails sur la façon d'empêcher ces ajustements de se produire pendant les tests, consultez Contrôle de la vitesse du processeur .

Par exemple, Joe Droid souhaite calculer la valeur screen.on pour un appareil. Il active le mode avion sur l'appareil, exécute l'appareil dans un état actuel stable, maintient la vitesse du processeur constante et utilise un wakelock partiel pour empêcher la suspension du système. Joe éteint ensuite l'écran de l'appareil et prend une mesure (200 mA). Ensuite, Joe allume l'écran de l'appareil à la luminosité minimale et prend une autre mesure (300 mA). La valeur screen.on est de 100 mA (300 - 200).

Remarque : Pour les composants qui n'ont pas de forme d'onde plate de consommation de courant lorsqu'ils sont actifs (comme la radio cellulaire ou le Wi-Fi), mesurez le courant moyen au fil du temps à l'aide d'un outil de surveillance de l'alimentation.

Lorsque vous utilisez une source d'alimentation externe à la place de la batterie de l'appareil, le système peut rencontrer des problèmes en raison d'une thermistance de batterie non connectée ou de broches de jauge de carburant intégrées (c'est-à-dire qu'une lecture invalide de la température de la batterie ou de la capacité restante de la batterie pourrait arrêter le noyau ou le système Android). . Les fausses batteries peuvent fournir des signaux sur les broches de la thermistance ou de la jauge de carburant qui imitent les lectures de température et d'état de charge d'un système normal, et peuvent également fournir des câbles pratiques pour la connexion à des alimentations externes. Vous pouvez également modifier le système pour ignorer les données non valides de la batterie manquante.

Suspension du système de contrôle

Cette section décrit comment éviter l'état de suspension du système lorsque vous ne souhaitez pas qu'il interfère avec d'autres mesures, et comment mesurer la consommation électrique de l'état de suspension du système lorsque vous souhaitez le mesurer.

Empêcher la suspension du système

La suspension du système peut introduire des variations indésirables dans les mesures de puissance et placer les composants du système dans des états de faible consommation inappropriés pour mesurer la consommation de puissance active. Pour éviter que le système ne se suspende lorsque l'écran est éteint, utilisez un wakelock partiel temporaire. À l'aide d'un câble USB, connectez l'appareil à un hôte de développement, puis exécutez la commande suivante :

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

En wake_lock , l'état d'écran éteint ne déclenche pas de suspension du système. (N'oubliez pas de débrancher le câble USB de l'appareil avant de mesurer la consommation électrique.)

Pour supprimer le wakelock :

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

Suspension du système de mesure

Pour mesurer la consommation électrique pendant l'état de suspension du système, mesurez la valeur de cpu.idle dans le profil d'alimentation. Avant de mesurer :

  • Supprimez les wakelocks existants (comme décrit ci-dessus).
  • Placez l'appareil en mode avion pour éviter toute activité simultanée de la radio cellulaire, qui pourrait fonctionner sur un processeur distinct des parties SoC contrôlées par la suspension du système.
  • Assurez-vous que le système est en état de suspension en :
    • Confirmer que les lectures actuelles se stabilisent à une valeur stable. Les lectures doivent se situer dans la plage attendue pour la consommation électrique de l'état de suspension du SoC ainsi que la consommation électrique des composants du système qui restent alimentés (tels que l'USB PHY).
    • Vérification de la sortie de la console système.
    • Surveiller les indications externes de l'état du système (comme une LED qui s'éteint lorsqu'elle n'est pas en veille).

Contrôler la vitesse du processeur

Les processeurs actifs peuvent être mis en ligne ou hors ligne, voir leurs vitesses d'horloge et les tensions associées modifiées (ce qui peut également affecter les vitesses du bus mémoire et d'autres états d'alimentation du cœur du système) et peuvent entrer dans des états d'inactivité de consommation inférieure lorsqu'ils sont dans la boucle d'inactivité du noyau. Lorsque vous mesurez différents états de puissance du processeur pour le profil de puissance, évitez la variation de la consommation électrique lors de la mesure d'autres paramètres. Le profil de puissance suppose que tous les processeurs ont les mêmes vitesses disponibles et caractéristiques de puissance.

Lorsque vous mesurez la puissance du processeur, ou tout en maintenant la puissance du processeur constante pour effectuer d'autres mesures, maintenez le nombre de processeurs mis en ligne constant (par exemple, avoir un processeur en ligne et le reste hors ligne/connecté à chaud). Garder tous les processeurs sauf un en mode veille peut produire des résultats acceptables. L'arrêt du framework Android avec adb shell stop peut réduire l'activité de planification du système.

Vous devez spécifier les vitesses de processeur disponibles pour votre appareil dans l'entrée du profil d'alimentation cpu.speeds . Pour obtenir une liste des vitesses de processeur disponibles, exécutez :

adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state

Ces vitesses correspondent aux mesures de puissance correspondantes en valeur cpu.active .

Pour les plates-formes où le nombre de cœurs mis en ligne affecte de manière significative la consommation d'énergie, vous devrez peut-être modifier le pilote ou le gouverneur cpufreq de la plate-forme. La plupart des plates-formes prennent en charge le contrôle de la vitesse du processeur à l'aide du gouverneur cpufreq de l'espace utilisateur et des interfaces sysfs pour définir la vitesse. Par exemple, pour définir la vitesse sur 200 MHz sur un système avec un seul processeur ou tous les processeurs partageant une stratégie cpufreq commune, utilisez la console système ou le shell adb pour exécuter les commandes suivantes :

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

Remarque : Les commandes exactes diffèrent selon l'implémentation de cpufreq de la plateforme.

Ces commandes garantissent que la nouvelle vitesse n'est pas en dehors des limites autorisées, définissent la nouvelle vitesse, puis impriment la vitesse à laquelle le processeur fonctionne réellement (pour vérification). Si la vitesse minimale actuelle avant l'exécution est supérieure à 200 000, vous devrez peut-être inverser l'ordre des deux premières lignes ou réexécuter la première ligne pour abandonner la vitesse minimale avant de définir la vitesse maximale.

Pour mesurer le courant consommé par un processeur fonctionnant à différentes vitesses, utilisez la console système pour placer le processeur dans une boucle liée au processeur à l'aide de la commande :

# while true; do true; done

Prenez la mesure pendant que la boucle s'exécute.

Certains appareils peuvent limiter la vitesse maximale du processeur tout en effectuant une limitation thermique en raison d'une mesure de température élevée (c'est-à-dire après avoir exécuté les processeurs à des vitesses élevées pendant des périodes prolongées). Surveillez cette limitation, soit en utilisant la sortie de la console système lors de la prise de mesures, soit en vérifiant le journal du noyau après la mesure.

Pour la valeur cpu.awake , mesurez la puissance consommée lorsque le système n’est pas en suspension et n’exécute pas de tâches. Le processeur doit être dans une boucle inactive du planificateur de faible consommation, exécutant éventuellement une instruction ARM Wait For Event ou dans un état de faible consommation spécifique au SoC avec une latence de sortie rapide adaptée à une utilisation inactive.

Pour la valeur cpu.active , mesurez la puissance lorsque le système n’est pas en mode suspension et n’exécute pas de tâches. Un processeur (généralement le processeur principal) doit exécuter la tâche tandis que tous les autres processeurs doivent être inactifs.

Mesurer la puissance de l'écran

Lorsque vous mesurez l'écran sous tension, assurez-vous que les autres appareils normalement allumés lorsque l'écran est activé le sont également. Par exemple, si l'écran tactile et le rétroéclairage de l'écran sont normalement allumés lorsque l'écran est allumé, assurez-vous que ces appareils sont allumés lorsque vous mesurez pour obtenir un exemple réaliste de la consommation d'énergie de l'écran.

Certaines technologies d'affichage varient en termes de consommation électrique en fonction des couleurs affichées, ce qui entraîne des variations considérables des mesures de puissance en fonction de ce qui est affiché à l'écran au moment de la mesure. Lors de la mesure, assurez-vous que l'écran affiche quelque chose qui présente les caractéristiques de puissance d'un écran réaliste. Visez entre les extrêmes d’un écran entièrement noir (qui consomme le moins d’énergie pour certaines technologies) et un écran entièrement blanc. Un choix courant consiste à afficher un calendrier dans l'application de calendrier, qui présente un mélange d'arrière-plan blanc et d'éléments non blancs.

Mesurez l'écran sous tension à la luminosité minimale et maximale de l'affichage/du rétroéclairage. Pour définir la luminosité minimale :

  • Utilisez l'interface utilisateur Android (non recommandé). Réglez le curseur Paramètres > Luminosité de l’affichage sur la luminosité minimale de l’écran. Cependant, l'interface utilisateur Android permet de régler la luminosité uniquement à un minimum de 10 à 20 % de la luminosité possible du panneau ou du rétroéclairage, et ne permet pas de régler la luminosité si bas que l'écran pourrait ne pas être visible sans un grand effort.
  • Utilisez un fichier sysfs (recommandé). Si disponible, utilisez un fichier sysfs pour contrôler la luminosité du panneau jusqu'à la luminosité minimale prise en charge par le matériel.

De plus, si le fichier sysfs de la plateforme permet d'allumer et d'éteindre le panneau LCD, le rétroéclairage et l'écran tactile, utilisez le fichier pour prendre des mesures avec l'écran allumé et éteint. Sinon, définissez un wakelock partiel pour que le système ne se suspende pas, puis allumez et éteignez l'écran avec le bouton d'alimentation.

Mesurer la puissance Wi-Fi

Effectuez des mesures Wi-Fi sur un réseau relativement silencieux. Évitez d'introduire des tâches supplémentaires pour traiter des volumes élevés de trafic de diffusion sans rapport avec l'activité mesurée.

La valeur wifi.on mesure la puissance consommée lorsque le Wi-Fi est activé mais ne transmet ni ne reçoit activement. Ceci est souvent mesuré comme le delta entre la consommation de courant dans l'état de suspension (veille) du système avec le Wi-Fi activé et celui désactivé.

La valeur wifi.scan mesure la puissance consommée lors d'une analyse Wi-Fi pour les points d'accès. Les applications peuvent déclencher des analyses Wi-Fi à l'aide de l' API startScan() de la classe WifiManager. Vous pouvez également ouvrir Paramètres > Wi-Fi, qui effectue des analyses des points d'accès toutes les quelques secondes avec une augmentation apparente de la consommation d'énergie, mais vous devez soustraire la puissance de l'écran de ces mesures.

Remarque : utilisez une configuration contrôlée (telle que iperf ) pour générer du trafic de réception et de transmission réseau.