Komponentenleistung messen

Sie können den Stromverbrauch einzelner Komponenten ermitteln, indem Sie den vom Gerät aufgenommenen Strom vergleichen, wenn die Komponente sich im gewünschten Zustand befindet (z. B. eingeschaltet, aktiv, scannt) und wenn die Komponente ausgeschaltet ist. Messen Sie den durchschnittlichen momentanen Stromverbrauch des Geräts bei einer Nennspannung mit einem externen Strommessgerät, z. B. einem Labornetzteil oder speziellen Tools zur Akkuüberwachung (z. B. Power Monitor und Power Tool von Monsoon Solution Inc.).

Hersteller geben oft Informationen zum Stromverbrauch einer einzelnen Komponente an. Verwenden Sie diese Informationen, wenn sie den tatsächlichen Stromverbrauch des Akkus des Geräts widerspiegeln. Prüfen Sie jedoch die vom Hersteller bereitgestellten Werte, bevor Sie sie in Ihrem Geräteenergieprofil verwenden.

Stromverbrauch steuern

Achten Sie beim Messen darauf, dass das Gerät nicht mit einer externen Ladequelle verbunden ist, z. B. über eine USB-Verbindung zu einem Entwicklungshost, die beim Ausführen von Android Debug Bridge (adb) verwendet wird. Das Testgerät zieht möglicherweise Strom vom Host, wodurch die Messungen am Akku sinken. Verwenden Sie keine USB-On-The-Go-Verbindungen (OTG), da das OTG-Gerät Strom vom zu testenden Gerät ziehen kann.

Das System sollte, mit Ausnahme der gemessenen Komponente, mit einer konstanten Leistungsaufnahme laufen, um ungenaue Messungen durch Änderungen an anderen Komponenten zu vermeiden. Zu den Systemaktivitäten, die zu unerwünschten Änderungen bei den Leistungsmessungen führen können, gehören:

  • Empfang, Übertragung oder Suche über Mobilfunk, WLAN und Bluetooth Wenn Sie die Mobilfunkleistung nicht messen möchten, versetzen Sie das Gerät in den Flugmodus und aktivieren Sie nach Bedarf WLAN oder Bluetooth.
  • Display ein/aus: Die Farben, die auf dem Display angezeigt werden, während es eingeschaltet ist, können sich bei einigen Displaytechnologien auf den Stromverbrauch auswirken. Schalten Sie das Display aus, wenn Sie Werte für Komponenten messen, die nicht zum Display gehören.
  • System anhalten/fortsetzen Wenn das Display ausgeschaltet ist, kann das System in den Ruhemodus versetzt werden, wodurch Teile des Geräts in einen Energiesparmodus oder in den Aus-Zustand versetzt werden. Dies kann sich auf den Energieverbrauch der gemessenen Komponente auswirken und zu großen Abweichungen bei den Leistungsmesswerten führen, da das System regelmäßig wieder Alarme sendet usw. Weitere Informationen finden Sie unter Systemaussetzung steuern.
  • CPUs ändern die Geschwindigkeit und wechseln in den Ruhemodus des Energiespar-Schedulers oder verlassen ihn. Während des normalen Betriebs nimmt das System häufig Anpassungen an den CPU-Geschwindigkeiten, der Anzahl der online verfügbaren CPU-Kerne und anderen Systemkernzuständen vor, z. B. an der Arbeitsspeicherbusgeschwindigkeit und den Spannungen der mit CPUs und Arbeitsspeicher verbundenen Versorgungsleitungen. Während des Tests wirken sich diese Anpassungen auf die Leistungsmessungen aus:
    • Durch die CPU-Taktgeschwindigkeitsskalierung kann die Takt- und Spannungsskalierung von Speicherbussen und anderen Systemkernkomponenten reduziert werden.
    • Die Planungsaktivität kann sich auf den Prozentsatz der Zeit auswirken, den CPUs im Energiesparmodus verbringen. Weitere Informationen dazu, wie Sie diese Anpassungen während des Tests verhindern, finden Sie unter CPU-Geschwindigkeiten steuern.

Beispiel: Joe Droid möchte den Wert screen.on für ein Gerät berechnen. Er aktiviert den Flugmodus auf dem Gerät, lässt es mit einem stabilen Stromverbrauch laufen, hält die CPU-Geschwindigkeit konstant und verwendet einen partiellen Wakelock, um das System nicht in den Ruhemodus zu versetzen. Joe schaltet dann den Bildschirm des Geräts aus und nimmt eine Messung vor (200 mA). Als Nächstes schaltet Joe den Bildschirm des Geräts mit minimaler Helligkeit ein und nimmt eine weitere Messung vor (300 mA). Der Wert für screen.on ist 100 mA (300 − 200).

Hinweis: Bei Komponenten, die im aktiven Zustand keine flache Wellenform der Stromaufnahme haben (z. B. Mobilfunk oder WLAN), messen Sie den durchschnittlichen Stromverbrauch im Zeitverlauf mit einem Tool zur Leistungsüberwachung.

Wenn Sie anstelle des Akkus des Geräts eine externe Stromquelle verwenden, kann es aufgrund eines nicht angeschlossenen Akku-Thermistors oder integrierter Pins für die Tankanzeige zu Problemen mit dem System kommen. Das bedeutet, dass ein ungültiger Messwert für die Akkutemperatur oder die verbleibende Akkukapazität den Kernel oder das Android-System herunterfahren kann. Gefälschte Akkus können an den Pins des Thermistors oder der Tankanzeige Signale liefern, die die Temperatur- und Ladezustandsmessungen eines normalen Systems nachahmen. Außerdem können sie praktische Anschlüsse für die Verbindung mit externen Netzteilen bieten. Alternativ können Sie das System so ändern, dass die ungültigen Daten des fehlenden Akkus ignoriert werden.

Steuersystem anhalten

In diesem Abschnitt wird beschrieben, wie Sie den Ruhemodus des Systems vermeiden, wenn er andere Messungen beeinträchtigen könnte, und wie Sie den Stromverbrauch im Ruhemodus des Systems messen, wenn Sie ihn messen möchten.

Systemauslagerung verhindern

Das Aussetzen des Systems kann zu unerwünschten Abweichungen bei den Strommessungen führen und Systemkomponenten in einen Energiesparmodus versetzen, der nicht für die Messung der aktiven Stromnutzung geeignet ist. Verwenden Sie eine vorübergehende teilweise Wakelock-Funktion, um zu verhindern, dass das System in den Ruhemodus versetzt wird, während das Display ausgeschaltet ist. Verbinden Sie das Gerät über ein USB-Kabel mit einem Entwicklungshost und geben Sie dann den folgenden Befehl ein:

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

In wake_lock löst der Zustand „Bildschirm aus“ keine Systemaussetzung aus. Denken Sie daran, das USB-Kabel vom Gerät zu trennen, bevor Sie den Stromverbrauch messen.

So entfernen Sie den Wakelock:

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

Messsystem gesperrt

Um den Stromverbrauch im Ruhemodus des Systems zu messen, messen Sie den Wert von cpu.idle im Energieprofil. Vor der Messung:

  • Entfernen Sie vorhandene Wakelocks (wie oben beschrieben).
  • Stellen Sie das Gerät in den Flugmodus, um gleichzeitige Aktivitäten des Mobilfunkradios zu vermeiden, das möglicherweise auf einem separaten Prozessor ausgeführt wird, der nicht von der Systemaussetzung gesteuert wird.
  • Prüfen Sie, ob sich das System im Ruhemodus befindet:
    • Prüfen, ob sich die aktuellen Messwerte auf einen stabilen Wert einpendeln. Die Messwerte sollten innerhalb des erwarteten Bereichs für den Energieverbrauch des SoC-Suspend-Status und der Systemkomponenten liegen, die weiterhin mit Strom versorgt werden (z. B. der USB-PHY).
    • Prüfen der Systemkonsolenausgabe
    • Achten Sie auf externe Hinweise zum Systemstatus, z. B. eine LED, die ausgeht, wenn das System nicht im Ruhemodus ist.

CPU-Geschwindigkeiten steuern

Aktive CPUs können online oder offline geschaltet werden, ihre Taktgeschwindigkeit und die zugehörigen Spannungen können geändert werden (was sich möglicherweise auch auf die Speicherbusgeschwindigkeiten und andere Betriebsmodi der Systemkerne auswirkt) und sie können im Kernel-Inaktivitäts-Loop in einen niedrigeren Energiesparmodus wechseln. Wenn Sie verschiedene CPU-Energiesparzustände für das Energieprofil messen, vermeiden Sie Abweichungen beim Stromverbrauch bei der Messung anderer Parameter. Beim Energieprofil wird davon ausgegangen, dass alle CPUs dieselben verfügbaren Geschwindigkeiten und Leistungsmerkmale haben.

Halten Sie beim Messen der CPU-Leistung oder beim Konstanthalten der CPU-Leistung für andere Messungen die Anzahl der online geschalteten CPUs konstant (z. B. eine CPU online und die restlichen offline/Hot-Plug-fähig). Wenn Sie alle CPUs außer einer im Planungsmodus inaktiv halten, können Sie akzeptable Ergebnisse erzielen. Wenn Sie das Android-Framework mit adb shell stop beenden, kann die Systemplanungsaktivität reduziert werden.

Sie müssen die verfügbaren CPU-Geschwindigkeiten für Ihr Gerät im Eintrag cpu.speeds des Energieprofils angeben. Führen Sie folgenden Befehl aus, um eine Liste der verfügbaren CPU-Taktfrequenzen aufzurufen:

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

Diese Geschwindigkeiten stimmen mit den entsprechenden Leistungsmessungen im Wert cpu.active überein.

Bei Plattformen, bei denen die Anzahl der online gestellten Kerne einen erheblichen Einfluss auf den Energieverbrauch hat, müssen Sie möglicherweise den cpufreq-Treiber oder -Governor für die Plattform ändern. Die meisten Plattformen unterstützen die Steuerung der CPU-Geschwindigkeit über den cpufreq-Taktregler im Userspace und die Festlegung der Geschwindigkeit über sysfs-Schnittstellen. Wenn Sie beispielsweise die Geschwindigkeit auf 200 MHz für ein System mit nur einer CPU oder für alle CPUs mit einer gemeinsamen cpufreq-Richtlinie festlegen möchten, führen Sie über die Systemkonsole oder die adb-Shell die folgenden Befehle aus:

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

Hinweis: Die genauen Befehle variieren je nach cpufreq-Implementierung der Plattform.

Mit diesen Befehlen wird sichergestellt, dass die neue Geschwindigkeit nicht außerhalb der zulässigen Grenzen liegt. Anschließend wird die neue Geschwindigkeit festgelegt und die Geschwindigkeit ausgegeben, mit der die CPU tatsächlich läuft (zur Bestätigung). Wenn die aktuelle Mindestgeschwindigkeit vor der Ausführung über 200.000 liegt, müssen Sie möglicherweise die Reihenfolge der ersten beiden Zeilen umkehren oder die erste Zeile noch einmal ausführen, um die Mindestgeschwindigkeit zu senken, bevor Sie die Höchstgeschwindigkeit festlegen.

Wenn Sie den Stromverbrauch einer CPU messen möchten, die mit verschiedenen Geschwindigkeiten läuft, legen Sie sie mit dem Befehl „cpubind“ in der Systemkonsole in einen CPU-gebundenen Loop:

# while true; do true; done

Die Messung wird während der Ausführung der Schleife durchgeführt.

Bei einigen Geräten kann die maximale CPU-Geschwindigkeit aufgrund einer hohen Temperaturmessung begrenzt werden, wenn die CPU über einen längeren Zeitraum hinweg mit hoher Geschwindigkeit betrieben wurde. Achten Sie auf solche Einschränkungen, entweder anhand der Systemkonsolenausgabe bei der Durchführung von Messungen oder anhand des Kernel-Logs nach der Messung.

Messen Sie für den Wert cpu.awake den Stromverbrauch, wenn das System nicht im Ruhemodus ist und keine Aufgaben ausführt. Die CPU sollte sich in einem Ruhemodus mit niedrigem Energieverbrauch befinden, möglicherweise mit einer ARM-Warte-auf-Ereignis-Anweisung oder in einem SoC-spezifischen Energiesparmodus mit einer kurzen Ausstiegslatenz, die für den Inaktivitätsmodus geeignet ist.

Für den Wert cpu.active messen Sie den Stromverbrauch, wenn sich das System nicht im Ruhemodus befindet und keine Aufgaben ausgeführt werden. Eine CPU (in der Regel die primäre CPU) sollte die Aufgabe ausführen, während alle anderen CPUs im Inaktivitätsstatus sein sollten.

Bildschirmstrom messen

Achten Sie beim Messen des Stromverbrauchs bei eingeschaltetem Display darauf, dass auch andere Geräte eingeschaltet sind, die normalerweise eingeschaltet sind, wenn das Display eingeschaltet ist. Wenn beispielsweise der Touchscreen und die Display-Hintergrundbeleuchtung normalerweise eingeschaltet sind, wenn der Bildschirm eingeschaltet ist, achten Sie darauf, dass diese Geräte eingeschaltet sind, wenn Sie die Messung durchführen, um ein realistisches Beispiel für den Stromverbrauch bei eingeschaltetem Display zu erhalten.

Bei einigen Displaytechnologien variiert der Stromverbrauch je nach angezeigten Farben. Dies führt dazu, dass die Strommessungen je nach dem, was zum Zeitpunkt der Messung auf dem Bildschirm angezeigt wird, erheblich variieren. Achten Sie beim Messen darauf, dass auf dem Bildschirm etwas zu sehen ist, das die Leistungsmerkmale eines realistischen Bildschirms hat. Zielen Sie auf einen Mittelwert zwischen einem vollständig schwarzen Bildschirm (der bei einigen Technologien den geringsten Stromverbrauch hat) und einem vollständig weißen Bildschirm. Eine gängige Option ist die Ansicht eines Terminplans in der Kalender-App, die einen Mix aus weißem Hintergrund und nicht weißen Elementen enthält.

Messen Sie den Stromverbrauch des Displays bei minimaler und maximaler Display-/Hintergrundbeleuchtung. So legen Sie die Mindesthelligkeit fest:

  • Android-Benutzeroberfläche verwenden (nicht empfohlen) Stellen Sie den Schieberegler unter „Einstellungen“ > „Displayhelligkeit“ auf die Mindesthelligkeit des Displays. Die Android-Benutzeroberfläche ermöglicht jedoch nur eine Helligkeit von mindestens 10–20% der möglichen Helligkeit des Displays oder der Hintergrundbeleuchtung. Außerdem kann die Helligkeit nicht so niedrig eingestellt werden, dass das Display nur schwer zu sehen ist.
  • Sysfs-Datei verwenden (empfohlen). Verwenden Sie gegebenenfalls eine sysfs-Datei, um die Displayhelligkeit bis zur von der Hardware unterstützten Mindesthelligkeit zu steuern.

Wenn die sysfs-Datei der Plattform das Ein- und Ausschalten des LCD-Bildschirms, der Hintergrundbeleuchtung und des Touchscreens ermöglicht, können Sie mit der Datei Messungen mit ein- und ausgeschaltetem Display durchführen. Andernfalls legen Sie eine teilweise Wakelock fest, damit das System nicht in den Ruhemodus versetzt wird, und schalten Sie das Display dann mit der Ein-/Aus-Taste ein und aus.

WLAN-Leistung messen

Führen Sie WLAN-Messungen in einem relativ ruhigen Netzwerk durch. Vermeiden Sie zusätzliche Arbeit bei der Verarbeitung großer Mengen an Broadcast-Traffic, der nicht mit der gemessenen Aktivität in Zusammenhang steht.

Der Wert wifi.on gibt den Stromverbrauch an, wenn das WLAN aktiviert ist, aber nicht aktiv sendet oder empfängt. Dies wird oft als Delta zwischen dem Stromverbrauch im Ruhemodus des Systems mit aktiviertem und deaktiviertem WLAN gemessen.

Der Wert wifi.scan gibt den Stromverbrauch während eines WLAN-Scans nach Zugangspunkt an. Anwendungen können WLAN-Scans über die WifiManager-Klasse mit der startScan()API auslösen. Sie können auch die Einstellungen > WLAN öffnen. Dort werden alle paar Sekunden Zugangspunkt-Scans durchgeführt, was zu einem deutlichen Anstieg der Stromaufnahme führt. Sie müssen jedoch den Stromverbrauch des Displays von diesen Messungen abziehen.

Hinweis: Verwenden Sie eine kontrollierte Einrichtung wie iperf, um Netzwerkempfangs- und ‑übertragungsverkehr zu generieren.