Komponentenleistung messen

Sie können den Stromverbrauch einzelner Komponenten ermitteln, indem Sie die Stromaufnahme des Geräts vergleichen, wenn sich die Komponente im gewünschten Zustand befindet (z. B. eingeschaltet, aktiv, scannt) und wenn die Komponente ausgeschaltet ist. Messen Sie den durchschnittlichen Momentanstrom, der am Gerät bei Nennspannung aufgenommen wird, mithilfe eines externen Leistungsmonitors, z. B. eines Tischnetzteils oder spezieller Batterieüberwachungstools (z. B. Power Monitor und Power Tool-Software von Monsoon Solution Inc.).

Hersteller geben oft Auskunft über den Stromverbrauch einer einzelnen Komponente. Verwenden Sie diese Informationen, wenn sie den in der Praxis vom Akku des Geräts entnommenen Strom genau wiedergeben. Überprüfen Sie jedoch die vom Hersteller bereitgestellten Werte, bevor Sie diese Werte in Ihrem Geräteleistungsprofil verwenden.

Kontrollieren Sie den Stromverbrauch

Stellen Sie beim Messen sicher, dass das Gerät keine Verbindung zu einer externen Ladequelle hat, z. B. eine USB-Verbindung zu einem Entwicklungshost, der beim Ausführen von Android Debug Bridge (adb) verwendet wird. Das zu testende Gerät zieht möglicherweise Strom vom Host und verringert so die Messungen an der Batterie. Vermeiden Sie USB On-The-Go (OTG)-Verbindungen, da das OTG-Gerät möglicherweise Strom vom zu testenden Gerät bezieht.

Abgesehen von der zu messenden Komponente sollte das System mit einem konstanten Stromverbrauch laufen, um ungenaue Messungen aufgrund von Änderungen an anderen Komponenten zu vermeiden. Zu den Systemaktivitäten, die zu unerwünschten Änderungen an Leistungsmessungen führen können, gehören:

  • Mobilfunk-, WLAN- und Bluetooth-Empfangs-, Übertragungs- oder Scanaktivitäten . Wenn Sie die Mobilfunkleistung nicht messen, stellen Sie das Gerät auf den Flugmodus ein und aktivieren Sie je nach Bedarf WLAN oder Bluetooth.
  • Bildschirm ein/aus . Bei eingeschaltetem Bildschirm angezeigte Farben können sich bei einigen Bildschirmtechnologien auf den Stromverbrauch auswirken. Schalten Sie den Bildschirm aus, wenn Sie Werte für Nicht-Bildschirmkomponenten messen.
  • System anhalten/fortsetzen . Ein ausgeschalteter Bildschirm kann eine Systemunterbrechung auslösen, wodurch Teile des Geräts in einen energiesparenden oder ausgeschalteten Zustand versetzt werden. Dies kann sich auf den Stromverbrauch der zu messenden Komponente auswirken und zu großen Abweichungen bei den Strommesswerten führen, da das System regelmäßig wieder Alarme sendet usw. Weitere Informationen finden Sie unter „Systemunterbrechung steuern“ .
  • CPUs ändern ihre Geschwindigkeit und wechseln in den Leerlaufzustand des Low-Power-Schedulers bzw. verlassen diesen . Während des normalen Betriebs nimmt das System häufig Anpassungen der CPU-Geschwindigkeit, der Anzahl der Online-CPU-Kerne und anderer Systemkernzustände wie der Speicherbusgeschwindigkeit und der Spannungen der mit CPUs und Speicher verbundenen Stromschienen vor. Während des Tests wirken sich diese Anpassungen auf Leistungsmessungen aus:
    • CPU-Geschwindigkeitsskalierungsvorgänge können die Takt- und Spannungsskalierung von Speicherbussen und anderen Systemkernkomponenten reduzieren.
    • Die Planungsaktivität kann sich auf den Prozentsatz der Zeit auswirken, die CPUs im Leerlaufzustand mit geringem Stromverbrauch verbringen. Einzelheiten dazu, wie Sie verhindern können, dass diese Anpassungen während des Tests auftreten, finden Sie unter Steuern der CPU-Geschwindigkeit .

Joe Droid möchte beispielsweise den screen.on Wert für ein Gerät berechnen. Er aktiviert den Flugmodus auf dem Gerät, betreibt das Gerät in einem stabilen aktuellen Zustand, hält die CPU-Geschwindigkeit konstant und verwendet einen teilweisen Wakelock, um einen Systemstopp zu verhindern. Dann schaltet Joe den Gerätebildschirm aus und führt eine Messung durch (200 mA). Als nächstes schaltet Joe den Gerätebildschirm auf minimale Helligkeit ein und führt eine weitere Messung durch (300 mA). Der screen.on Wert beträgt 100 mA (300 - 200).

Hinweis : Bei Komponenten, die im aktiven Zustand keine flache Wellenform des Stromverbrauchs aufweisen (z. B. Mobilfunk oder WLAN), messen Sie den durchschnittlichen Strom über die Zeit mit einem Leistungsüberwachungstool.

Wenn anstelle der Gerätebatterie eine externe Stromquelle verwendet wird, kann es aufgrund eines nicht angeschlossenen Batteriethermistors oder integrierter Füllstandanzeigestifte zu Systemproblemen kommen (z. B. könnte ein ungültiger Messwert für die Batterietemperatur oder die verbleibende Batteriekapazität zum Abschalten des Kernels oder des Android-Systems führen). . Gefälschte Batterien können Signale an Thermistor- oder Tankanzeigestiften liefern, die die Temperatur- und Ladezustandswerte eines normalen Systems nachahmen, und können auch praktische Anschlüsse für den Anschluss an externe Netzteile bieten. Alternativ können Sie das System so ändern, dass die ungültigen Daten der fehlenden Batterie ignoriert werden.

Steuersystem angehalten

In diesem Abschnitt wird beschrieben, wie Sie den Ruhezustand des Systems vermeiden, wenn Sie nicht möchten, dass er andere Messungen beeinträchtigt, und wie Sie den Stromverbrauch des Ruhezustands des Systems messen, wenn Sie ihn messen möchten.

Systemunterbrechung verhindern

Eine Systemunterbrechung kann zu unerwünschten Abweichungen bei den Leistungsmessungen führen und Systemkomponenten in einen Energiesparzustand versetzen, der für die Messung des aktiven Stromverbrauchs ungeeignet ist. Um zu verhindern, dass das System bei ausgeschaltetem Bildschirm in den Ruhezustand wechselt, verwenden Sie einen vorübergehenden Teil-Wakelock. 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"

Im wake_lock Zustand löst der Bildschirm-Aus-Zustand keine Systemunterbrechung 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"

Systemunterbrechung messen

Um den Stromverbrauch während des System-Suspend-Zustands zu messen, messen Sie den Wert von cpu.idle im Energieprofil. Vor dem Messen:

  • Entfernen Sie vorhandene Wakelocks (wie oben beschrieben).
  • Versetzen Sie das Gerät in den Flugmodus, um gleichzeitige Aktivitäten durch den Mobilfunk zu vermeiden, der möglicherweise auf einem Prozessor ausgeführt wird, der von den SoC-Teilen getrennt ist, die vom Systemsuspension gesteuert werden.
  • Stellen Sie sicher, dass sich das System im Ruhezustand befindet, indem Sie:
    • Bestätigen, dass sich die aktuellen Messwerte auf einen stabilen Wert einstellen. Die Messwerte sollten innerhalb des erwarteten Bereichs für den Stromverbrauch des SoC-Suspendierungszustands plus den Stromverbrauch der Systemkomponenten liegen, die weiterhin mit Strom versorgt werden (z. B. den USB-PHY).
    • Überprüfen der Ausgabe der Systemkonsole.
    • Achten Sie auf externe Anzeigen des Systemstatus (z. B. das Ausschalten einer LED, wenn sie nicht im Suspend-Modus ist).

Steuern Sie die CPU-Geschwindigkeit

Aktive CPUs können online oder offline geschaltet werden, ihre Taktraten und zugehörigen Spannungen werden geändert (was sich möglicherweise auch auf die Geschwindigkeit des Speicherbusses und andere Energiezustände des Systemkerns auswirkt) und sie können während der Kernel-Leerlaufschleife in Leerlaufzustände mit geringerem Stromverbrauch wechseln. Vermeiden Sie beim Messen unterschiedlicher CPU-Leistungszustände für das Leistungsprofil die Leistungsaufnahmevarianz beim Messen anderer Parameter. Beim Leistungsprofil wird davon ausgegangen, dass alle CPUs über die gleichen verfügbaren Geschwindigkeiten und Leistungsmerkmale verfügen.

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. wenn eine CPU online ist und der Rest offline bzw. per Hotplug angeschlossen ist). Wenn alle CPUs bis auf eine im Leerlauf bleiben, kann dies zu akzeptablen Ergebnissen führen. Das Stoppen des Android-Frameworks mit adb shell stop kann die Systemplanungsaktivität reduzieren.

Sie müssen die verfügbaren CPU-Geschwindigkeiten für Ihr Gerät im cpu.speeds Eintrag des Energieprofils angeben. Um eine Liste der verfügbaren CPU-Geschwindigkeiten zu erhalten, führen Sie Folgendes aus:

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 geschalteten Kerne den Stromverbrauch erheblich beeinflusst, 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 mithilfe des Userspace-cpufreq-Governors und die Verwendung von sysfs-Schnittstellen zum Festlegen der Geschwindigkeit. Um beispielsweise die Geschwindigkeit auf 200 MHz auf einem System mit nur einer CPU oder allen CPUs mit einer gemeinsamen cpufreq-Richtlinie festzulegen, verwenden Sie die Systemkonsole oder die ADB-Shell, um die folgenden Befehle auszuführen:

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 unterscheiden sich je nach Plattform-cpufreq-Implementierung.

Diese Befehle stellen sicher, dass die neue Geschwindigkeit nicht außerhalb der zulässigen Grenzen liegt, stellen die neue Geschwindigkeit ein und geben dann die Geschwindigkeit aus, mit der die CPU tatsächlich läuft (zur Überprüfung). Wenn die aktuelle Mindestgeschwindigkeit vor der Ausführung höher als 200.000 ist, müssen Sie möglicherweise die Reihenfolge der ersten beiden Zeilen umkehren oder die erste Zeile erneut ausführen, um die Mindestgeschwindigkeit zu verringern, bevor Sie die Höchstgeschwindigkeit festlegen.

Um den Stromverbrauch einer CPU zu messen, die mit unterschiedlichen Geschwindigkeiten läuft, verwenden Sie die Systemkonsole, um die CPU mit dem folgenden Befehl in eine CPU-gebundene Schleife zu versetzen:

# while true; do true; done

Nehmen Sie die Messung vor, während die Schleife ausgeführt wird.

Einige Geräte können die maximale CPU-Geschwindigkeit während der thermischen Drosselung aufgrund einer hohen Temperaturmessung begrenzen (d. h. nachdem CPUs über einen längeren Zeitraum mit hohen Geschwindigkeiten betrieben wurden). Achten Sie auf solche Einschränkungen, indem Sie entweder bei Messungen die Ausgabe der Systemkonsole verwenden oder nach der Messung das Kernel-Protokoll überprüfen.

Messen Sie für den cpu.awake Wert den Stromverbrauch, wenn sich das System nicht im Ruhezustand befindet und keine Aufgaben ausführt. Die CPU sollte sich in einer Low-Power-Scheduler -Leerlaufschleife befinden und möglicherweise einen ARM-Wait-For-Event-Befehl ausführen oder sich in einem SoC-spezifischen Low-Power-Zustand mit einer schnellen Ausgangslatenz befinden, die für den Leerlauf geeignet ist.

Messen Sie für den cpu.active Wert die Leistung, wenn sich das System nicht im Suspend-Modus befindet und keine Aufgaben ausführt. Eine CPU (normalerweise die primäre CPU) sollte die Aufgabe ausführen, während sich alle anderen CPUs im Leerlaufzustand befinden sollten.

Bildschirmleistung messen

Stellen Sie beim Messen der Bildschirmleistung sicher, dass andere Geräte, die normalerweise eingeschaltet sind, wenn der Bildschirm aktiviert ist, ebenfalls eingeschaltet sind. Wenn beispielsweise der Touchscreen und die Hintergrundbeleuchtung des Displays normalerweise eingeschaltet sind, wenn der Bildschirm eingeschaltet ist, stellen Sie sicher, dass diese Geräte bei der Messung eingeschaltet sind, um ein realistisches Beispiel für den Stromverbrauch des Bildschirms zu erhalten.

Bei einigen Anzeigetechnologien variiert der Stromverbrauch entsprechend den angezeigten Farben, was dazu führt, dass die Leistungsmessungen erheblich variieren, je nachdem, was zum Zeitpunkt der Messung auf dem Bildschirm angezeigt wird. Stellen Sie beim Messen sicher, dass auf dem Bildschirm etwas angezeigt wird, das die Leistungsmerkmale eines realistischen Bildschirms aufweist. Versuchen Sie zwischen den Extremen eines komplett schwarzen Bildschirms (der bei einigen Technologien den geringsten Stromverbrauch hat) und einem komplett weißen Bildschirm. Eine häufige Wahl ist die Ansicht eines Zeitplans in der Kalender-App, die eine Mischung aus weißem Hintergrund und nicht weißen Elementen aufweist.

Messen Sie den eingeschalteten Bildschirm bei minimaler und maximaler Helligkeit der Anzeige/Hintergrundbeleuchtung. So stellen Sie die Mindesthelligkeit ein:

  • Verwenden Sie die Android-Benutzeroberfläche (nicht empfohlen). Stellen Sie den Schieberegler „Einstellungen“ > „Anzeigehelligkeit“ auf die minimale Anzeigehelligkeit ein. Allerdings erlaubt die Android-Benutzeroberfläche die Einstellung der Helligkeit nur auf mindestens 10–20 % der möglichen Helligkeit des Panels oder der Hintergrundbeleuchtung und erlaubt nicht, die Helligkeit so niedrig einzustellen, dass der Bildschirm ohne großen Aufwand möglicherweise nicht sichtbar ist.
  • Verwenden Sie eine sysfs-Datei (empfohlen). Falls verfügbar, verwenden Sie eine sysfs-Datei, um die Panelhelligkeit bis auf die von der Hardware unterstützte Mindesthelligkeit zu steuern.

Wenn die sysfs-Datei der Plattform außerdem das Ein- und Ausschalten des LCD-Panels, der Hintergrundbeleuchtung und des Touchscreens ermöglicht, können Sie mithilfe der Datei Messungen bei ein- und ausgeschaltetem Bildschirm durchführen. Andernfalls stellen Sie einen teilweisen Wakelock ein, damit das System nicht in den Ruhezustand wechselt, und schalten Sie dann den Bildschirm mit der Ein-/Aus-Taste ein und aus.

WLAN-Leistung messen

Führen Sie WLAN-Messungen in einem relativ leisen Netzwerk durch. Vermeiden Sie zusätzliche Arbeit bei der Verarbeitung großer Mengen an Broadcast-Verkehr, die nichts mit der gemessenen Aktivität zu tun hat.

Der wifi.on Wert misst den Stromverbrauch, wenn WLAN aktiviert ist, aber nicht aktiv sendet oder empfängt. Dies wird oft als Delta zwischen der Stromaufnahme im Ruhezustand (Ruhezustand) des Systems bei aktiviertem und deaktiviertem WLAN gemessen.

Der wifi.scan Wert misst den Stromverbrauch während eines WLAN-Scans für Zugangspunkte. Anwendungen können WLAN-Scans mithilfe der startScan() API der WifiManager-Klasse auslösen. Sie können auch „Einstellungen“ > „WLAN“ öffnen, wodurch alle paar Sekunden Zugriffspunktscans durchgeführt werden, was zu einem offensichtlichen Anstieg des Stromverbrauchs führt. Sie müssen jedoch die Bildschirmleistung von diesen Messungen abziehen.

Hinweis : Verwenden Sie ein kontrolliertes Setup (z. B. iperf ), um Netzwerkempfangs- und -übertragungsverkehr zu generieren.